summaryrefslogtreecommitdiffstats
path: root/sys/vdpau/gstvdpmpegdecoder.c
diff options
context:
space:
mode:
authorCarl-Anton Ingmarsson <ca.ingmarsson@gmail.com>2009-04-22 23:35:07 +0200
committerJan Schmidt <thaytan@noraisin.net>2009-06-20 15:21:31 +0100
commit035b5f4efb4d57fccf2a5fa220c0d034f4d777a3 (patch)
tree13eb43a6ebf3465990422418fe8fd26ef8b19815 /sys/vdpau/gstvdpmpegdecoder.c
parent17102ad0fadef83a0d8b0d807d698a104bc428b5 (diff)
downloadgst-plugins-bad-035b5f4efb4d57fccf2a5fa220c0d034f4d777a3.tar.gz
gst-plugins-bad-035b5f4efb4d57fccf2a5fa220c0d034f4d777a3.tar.bz2
gst-plugins-bad-035b5f4efb4d57fccf2a5fa220c0d034f4d777a3.zip
vdpaumpegdec: handle broken_gop field
Diffstat (limited to 'sys/vdpau/gstvdpmpegdecoder.c')
-rw-r--r--sys/vdpau/gstvdpmpegdecoder.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/sys/vdpau/gstvdpmpegdecoder.c b/sys/vdpau/gstvdpmpegdecoder.c
index 978d0497..d9b74706 100644
--- a/sys/vdpau/gstvdpmpegdecoder.c
+++ b/sys/vdpau/gstvdpmpegdecoder.c
@@ -158,6 +158,12 @@ gst_vdp_mpeg_decoder_decode (GstVdpMpegDecoder * mpeg_dec)
if (mpeg_dec->vdp_info.picture_coding_type == B_FRAME) {
GstVdpBFrame *b_frame;
+ if (mpeg_dec->broken_gop) {
+ gst_buffer_unref (buffer);
+ mpeg_dec->broken_gop = FALSE;
+ return GST_FLOW_OK;
+ }
+
b_frame = g_slice_new (GstVdpBFrame);
b_frame->buffer = buffer;
@@ -336,6 +342,8 @@ gst_vdp_mpeg_decoder_parse_gop (GstVdpMpegDecoder * mpeg_dec, guint8 * data,
if (!mpeg_util_parse_picture_gop (&gop, data, end))
return FALSE;
+ mpeg_dec->broken_gop = gop.broken_gop;
+
return TRUE;
}
@@ -497,6 +505,8 @@ gst_vdp_mpeg_decoder_init (GstVdpMpegDecoder * mpeg_dec,
mpeg_dec->b_frames = NULL;
+ mpeg_dec->broken_gop = FALSE;
+
mpeg_dec->adapter = gst_adapter_new ();
gst_pad_set_chain_function (dec->sink, gst_vdp_mpeg_decoder_chain);