[FFmpeg-devel] [RFC] Support multiple frames in a singe AVPacket in avcodec_decode_subtitle2
cus at passwd.hu
Tue Oct 1 23:16:01 CEST 2013
When I implemented the DVB teletext decoder, I faced a problem: If
multiple teletext pages are in a single teletext packet, the decoder has
no way to return multiple AVSubtitles. So the current decoder only return
one AVSubtitle in that case, an AVSubtitle containing the first decoded
page from the packet.
This is not a problem if the user wants to decode only a single teletext
page (subtitle page), because the same page is not sent twice in a single
packet. However, if somebody wants to decode all pages, he probably won't
be able to do so without losing a page here or there.
I could have split the teletext PES packets (usually around 1472 bytes) at
the demuxer level to 46-byte packets to overcome this, but I thought it
would be much better to extend the API the same way it is used now for
audio decoding, where a single packet can contain multiple frames.
If I combine this with CODEC_CAP_DELAY, the teletext decoder can store the
remaining pages of a teletext packet (unfortunately libzvbi parses all
pages in the packet in a single pass), and return them to the user on the
next call to avcodec_decode_subtitle2. In that case the decoder obviously
would not consume anything from the next packet until its buffer
containing teletext pages from the previous packet is not empty.
If we do this, we will have to make sure that the current subtitle
decoders will always return the full buffer size as the number of consumed
bytes. I've checked, and it seems that only 3 decoders are problematic,
but they only need a one-line patch to fix them. Movtext (patch is already
on the mailing list), srtdec and dvbsub are the three.
So, what do you think?
More information about the ffmpeg-devel