VdpVideoSurface surface;
VdpStatus err;
+ if (sys->vdp == NULL)
+ goto drop;
+
/* Create surface (TODO: reuse?) */
err = vdp_video_surface_create(sys->vdp, sys->device, sys->chroma,
filter->fmt_in.video.i_width,
{
msg_Err(filter, "video %s %s failure: %s", "surface", "creation",
vdp_get_error_string(sys->vdp, err));
- picture_Release(src);
- return NULL;
+ goto drop;
}
/* Put bits */
return dst;
error:
vdp_video_surface_destroy(sys->vdp, surface);
+drop:
picture_Release(src);
return NULL;
}
VdpStatus err;
picture_t *dst = OutputAllocate(filter);
- if (dst == NULL)
- {
- picture_Release(src);
- Flush(filter);
- return NULL;
- }
src = sys->import(filter, src);
/* Update history and take "present" picture field */
else
sys->history[MAX_PAST + MAX_FUTURE].field = NULL;
+ if (dst == NULL)
+ goto skip;
+
vlc_vdp_video_field_t *f = sys->history[MAX_PAST].field;
if (f == NULL)
+ {
+ picture_Release(dst);
+ dst = NULL;
goto skip;
+ }
+
dst->date = sys->history[MAX_PAST].date;
dst->b_force = sys->history[MAX_PAST].force;
{
msg_Err(filter, "video %s %s failure: %s", "mixer", "rendering",
vdp_get_error_string(sys->vdp, err));
-skip:
picture_Release(dst);
dst = NULL;
}
+skip:
f = sys->history[0].field;
if (f != NULL)
f->destroy(f); /* Release oldest field */