[FFmpeg-devel] [PATCH v2] libavformat/mpegts: demux DVB VBI data

Marton Balint cus at passwd.hu
Fri Jan 3 01:35:26 EET 2025



On Tue, 10 Dec 2024, Scott Theisen wrote:

> On 12/8/24 17:04, Marton Balint wrote:
>>  On Sun, 8 Dec 2024, Scott Theisen wrote:
>>>  On 12/3/24 17:23, Marton Balint wrote:
>>>>    On Tue, 3 Dec 2024, Marton Balint wrote:
>>>>>    On Sat, 30 Nov 2024, Scott Theisen wrote:
>>>>>>    DVB VBI data is defined in ETSI EN 301 775 and can include EBU
>>>>>>  teletext
>>>>>>    data
>>>>>>    as defined in ETSI EN 300 472.
>>>>>>
>>>>>>    ETSI EN 300 468 defines teletext_descriptor, VBI_data_descriptor,
>>>>>>  and
>>>>>>    VBI_teletext_descriptor, which has the same definition as, but
>>>>>>   different
>>>>>>    use
>>>>>>    from, teletext_descriptor.
>>>>>>    ---
>>>>>>    libavcodec/codec_desc.c | 6 ++++++
>>>>>>    libavcodec/codec_id.h   | 1 +
>>>>>>    libavformat/mpegts.c    | 3 +++
>>>>>>    libavformat/mpegts.h    | 2 ++
>>>>>>    4 files changed, 12 insertions(+)
>>>>>
>>>>>   You should split this to two patches.
>>>
>>>  OK, I'll do that.
>>> 
>>>>>
>>>>>   Patch 1 should add the codec ID the codec_description and please also
>>>>>   update the assertion check in libavcodec/version.c.
>>>>>
>>>>>   Patch 2 should add the support for demuxing in mpegts. I'd rather put
>>>>>  the
>>>>>   VBI descriptors after the teletext descriptor in the list, so in case
>>>>>   multiple descriptors are present the detected codec should be
>>>>>  teletext.
>>>>
>>>>   On second thought the order does not help, because the codec will be
>>>>   determined by the first descriptor...
>>>>
>>>>   Maybe when parsing the teletext descriptor it should override VBI codec
>>>>  to
>>>>   teletext, e.g.:
>>>>
>>>>       case TELETEXT_DESCRIPTOR:
>>>>            if (codec_id == DVB_VBI)
>>>>                   codec_id = DVB_TELETEXT
>>>>            // fall-through
>>>>       case VBI_TELETEXT_DESCRIPTOR:
>>>>            ....
>>>
>>>  I'm not sure it makes sense to change it from DVB_VBI to DVB_TELETEXT,
>>>  since the VBI format is backwards compatible with the teletext format. 
>>>  Although, the TELETEXT_DESCRIPTOR is for EBU teletext data only streams,
>>>  but then there shouldn't be either VBI descriptor to set the codec_id to
>>>  DVB_VBI.
>>>
>>>  I'm not strongly opposed, I'm just not sure it is really necessary.
>>
>>  The reason I prefer it that way so streams which were detected earlier as
>>  teletext won't be suddenly detected as VBI because both descriptors are
>>  present and VBI is the first. I think using both descriptors is not
>>  unlikely, since the essence is compatible, here is an example I stumbled
>>  upon by accident:
>>
>>  https://www.dvbcontrol.com/wp-content/uploads/DVBAnalyzer/DVBAnalyzer_View_0.jpg 
>> 
>
> ETSI EN 300 468 is not very clear on how the descriptors are supposed to be 
> used, but I think it goes like this:
>
> "The VBI_data_descriptor (see table 106) shall be used in the PSI PMT of a 
> stream which carries VBI data as defined in ETSI EN 301 775."
>
> However, a stream as defined by ETSI EN 300 472 (teletext) is also a stream 
> as defined by ETSI EN 301 775 (VBI data), so a stream that is just EBU 
> teletext shall have a teletext_descriptor and a VBI_data_descriptor.
>
> I think a VBI_teletext_descriptor would be used instead of a 
> teletext_descriptor when there are other types of VBI data in addition to the 
> EBU teletext data, but it is not clear if they are supposed to be mutually 
> exclusive.

Yeah, this is also how I understand it should work.

>
>> 
>>>
>>>  If you do want it, I'm not sure the if is necessary, just set codec_id
>>>  unconditionally.  However, it might be better to just call
>>>  mpegts_find_stream_type() instead so FFStream::need_context_update is
>>>  set.
>>
>>  Yes, good point calling mpegts_find_stream_type() instead.
>> 
>>>
>>>  Regardless, I'm wondering if instead VBI_TELETEXT_DESCRIPTOR should not
>>>  be added to DESC_types since ETSI EN 300 468 says this about
>>>  VBI_teletext_descriptor:
>>>  "
>>>  The only exception is that the VBI_teletext_descriptor is not to be used
>>>  to associate stream_type 0x06 with the VBI standard nor the EBU teletext
>>>  standard. Decoders can only use the languages in this descriptor to
>>>  select magazines and subtitles.
>>>  "
>>> 
>>
>>  Yeah, we could remove it from DESC_types if we want to strictly follow the
>>  standard. However, as far as understand, a VBI_teletext_descriptor should
>>  never appear alone, only accompanied by a VBI_data_descriptor. So the
>>  question is if there are non-compliant streams with
>>  VBI_teletext_descriptor only which we want to support? I don't really have
>>  a preference here, so do whichever you think best.
>
> I don't see any harm in keeping it in DESC_types to support possible 
> non-compliant streams.
>
> All of this discussion has made me think that DVB_VBI shouldn't be a separate 
> codec, but added to DVB_TELETEXT, changing the AVCodecDescriptor::long_name 
> to "DVB teletext and VBI data", since the data format is the same.  The only 
> downside I see is that a VBI data stream without any EBU teletext data would 
> appear to be a subtitle stream even though it contains no subtitles.  
> However, that issue is also present with the v2 patch which says DVB_VBI is 
> subtitles.

I'd rather not change DVB_TELETEXT codec bitstream format to the extended 
VBI format. Changing codec bitstream formats can be considered a breaking 
change and it can also cause problems, like all of a sudden remuxing 
DVB_TELETEXT would require a different descriptor depending on 
packet contents... So having a DVB_VBI as a separate codec still looks 
better to me.

>
> It would be nice, although not necessary, if the information in the 
> VBI_data_descriptor was exposed somehow, but the teletext descriptors already 
> use AVCodecParameters::extradata and I'm not sure if AVStream::metadata is 
> supposed to be only text data, so I don't know where the entire 
> VBI_data_descriptor could be copied to.

I guess it could be exported as AVCodecParameters->coded_side_data.

Regards,
Marton


More information about the ffmpeg-devel mailing list