[FFmpeg-devel] [RFC] Support multiple frames in a singe AVPacket in avcodec_decode_subtitle2

Marton Balint 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 mailing list