diff options
author | Jan Schmidt <thaytan@noraisin.net> | 2012-06-17 20:25:42 +1000 |
---|---|---|
committer | Jan Schmidt <thaytan@noraisin.net> | 2012-06-20 01:57:20 +1000 |
commit | 96883b5fc575b2114c1fb4f240f0e687081c3d80 (patch) | |
tree | 4fa1dd513fd82a5131adfd6c52d01ecbb9d07143 | |
parent | 6451b091f56d08375ce6bb8b3a21040b6dfd7f39 (diff) | |
download | gstreamer-plugins-base-96883b5fc575b2114c1fb4f240f0e687081c3d80.tar.gz |
theoradec: Clear the base class packetized flag.
The data has to be passed through the parser to get the
correct SYNC_POINT flag set on each packet, for reverse
playback to work.
-rw-r--r-- | ext/theora/gsttheoradec.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/ext/theora/gsttheoradec.c b/ext/theora/gsttheoradec.c index c0d96b3f6..122f5ead4 100644 --- a/ext/theora/gsttheoradec.c +++ b/ext/theora/gsttheoradec.c @@ -208,6 +208,7 @@ gst_theora_dec_init (GstTheoraDec * dec, GstTheoraDecClass * g_class) /* input is packetized, * but is not marked that way so data gets parsed and keyframes marked */ + gst_video_decoder_set_packetized (GST_VIDEO_DECODER (dec), FALSE); } static void @@ -275,8 +276,10 @@ theora_dec_parse (GstVideoDecoder * decoder, data = gst_adapter_peek (adapter, 1); /* check for keyframe; must not be header packet */ - if (!(data[0] & 0x80) && (data[0] & 0x40) == 0) + if (!(data[0] & 0x80) && (data[0] & 0x40) == 0) { + GST_DEBUG_OBJECT (decoder, "Found keyframe, frame %p", frame); GST_VIDEO_CODEC_FRAME_SET_SYNC_POINT (frame); + } /* and pass along all */ gst_video_decoder_add_to_frame (decoder, av); @@ -656,8 +659,6 @@ theora_handle_data_packet (GstTheoraDec * dec, ogg_packet * packet, goto wrong_dimensions; result = theora_handle_image (dec, buf, frame); - if (result != GST_FLOW_OK) - return result; return result; |