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.
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.
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.
Regards,
Scott Theisen
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".