[Bug 697806] avdec_h264 Fails during error recovery after packet loss leading to stream corruption

GStreamer (bugzilla.gnome.org) bugzilla at gnome.org
Sat Dec 7 03:56:06 PST 2013


https://bugzilla.gnome.org/show_bug.cgi?id=697806
  GStreamer | gst-libav | 1.0.5

Mark Nauwelaerts <mnauw> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |mnauw at users.sourceforge.net

--- Comment #28 from Mark Nauwelaerts <mnauw at users.sourceforge.net> 2013-12-07 11:55:55 UTC ---
Thanks for reporting and looking into this.  git master compiles ok for me
(except for -bad ATM; needs some Wno-error tweaking unfortunately). 
Cherry-picking some more recent patches might also have it apply to 1.2.

As for the API, even after some time, IMO there is still some tweaking to be
done it and is as such not final.  Even then, "the buffer is owned by the
frame", I would say it is up to the subclass to decide when to hand one to the
frame.  Also, I would prefer to have (give or take)
--
GstFlowReturn gst_video_decoder_alloc_buffer (GstVideoDecoder * decoder,
GstBuffer * buffer);
(in stead of the 2 current variations)
--
which roughly does what _alloc_frame does now, i.e. a slightly convenient/smart
wrapper around _acquire_buffer (and alike the old _pad_alloc).  Subclass should
use that and hand a buffer to a frame when it is _finish_frame time (as is done
now here). (*)

Regarding concerns about a buffer still accessed; a ref on the buffer is held
until _release_buffer is issued (by libav), held either by the
GstVideoCodecFrame or by GstFFMpegVidDecVideoFrame directly now with this
patch.

Have not (yet) looked at get_buffer2 API (not yet in libav version in use it
seems), and have kept to rather some small steps for now (so we see where/how
we go ;) ).  We can indeed get around to other changes later on.


(*) Also, I am not even sure about output_frame in the codec struct.  The base
class should do metadata admin (the timestamp stuff in frame struct), hand data
to subclass, and then get data/buffer from subclass along with the subclass
pointing to the 'suggested' metadata, i.e. frame.  That is the essence, and the
API should do that without getting in the way and imposing all sorts of
restrictions such as dumping buffers in struct field </rant>

-- 
Configure bugmail: https://bugzilla.gnome.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
You are the assignee for the bug.


More information about the gstreamer-bugs mailing list