omxvideodec: Always free all pending frames when caps changes require reconfiguration

This commit is contained in:
Sebastian Dröge 2011-11-07 10:58:24 +01:00
parent 0c0aa78373
commit be1f75d2f4

View file

@ -1059,19 +1059,20 @@ gst_omx_video_dec_set_format (GstBaseVideoDecoder * decoder,
self->started = FALSE;
}
/* FIXME: Workaround for
* https://bugzilla.gnome.org/show_bug.cgi?id=654529
*/
g_list_foreach (GST_BASE_VIDEO_CODEC (self)->frames,
(GFunc) gst_base_video_codec_free_frame, NULL);
g_list_free (GST_BASE_VIDEO_CODEC (self)->frames);
GST_BASE_VIDEO_CODEC (self)->frames = NULL;
if (klass->hacks & GST_OMX_HACK_NO_COMPONENT_RECONFIGURE) {
GST_BASE_VIDEO_CODEC_STREAM_UNLOCK (self);
gst_omx_video_dec_stop (GST_BASE_VIDEO_DECODER (self));
gst_omx_video_dec_close (self);
GST_BASE_VIDEO_CODEC_STREAM_LOCK (self);
/* FIXME: Workaround for
* https://bugzilla.gnome.org/show_bug.cgi?id=654529
*/
g_list_foreach (GST_BASE_VIDEO_CODEC (self)->frames,
(GFunc) gst_base_video_codec_free_frame, NULL);
g_list_free (GST_BASE_VIDEO_CODEC (self)->frames);
GST_BASE_VIDEO_CODEC (self)->frames = NULL;
if (!gst_omx_video_dec_open (self))
return FALSE;
@ -1080,6 +1081,7 @@ gst_omx_video_dec_set_format (GstBaseVideoDecoder * decoder,
if (gst_omx_port_manual_reconfigure (self->in_port,
TRUE) != OMX_ErrorNone)
return FALSE;
if (gst_omx_port_set_enabled (self->in_port, FALSE) != OMX_ErrorNone)
return FALSE;
}