[FFmpeg-devel] [PATCH] lavf/mpegts: add supplementary audio descriptor
Aman Gupta
ffmpeg at tmm1.net
Fri Feb 16 21:01:26 EET 2018
On Thu, Feb 15, 2018 at 4:11 AM, Stefan Pöschel <basic.master at gmx.de> wrote:
> The supplementary audio descriptor is defined in ETSI EN 300 468 and
> provides more details regarding accessibility audio tracks, especially
> the normative annex J contains a detailed description of its use.
>
> Its language code (if present) overrides the language code of an also
> present ISO 639 language descriptor.
>
> Note that this also changes the priority of multiple descriptors with
> language from "the last descriptor with language within the ES loop" to
> "specific descriptor over general ISO 639 descriptor".
> ---
> libavformat/mpegts.c | 37 ++++++++++++++++++++++++++++++++++++-
> 1 file changed, 36 insertions(+), 1 deletion(-)
>
> diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c
> index 0a3ad05..e5d0e1e 100644
> --- a/libavformat/mpegts.c
> +++ b/libavformat/mpegts.c
> @@ -1840,7 +1840,9 @@ int ff_parse_mpeg2_descriptor(AVFormatContext *fc,
> AVStream *st, int stream_type
> }
> if (i && language[0]) {
> language[i - 1] = 0;
> - av_dict_set(&st->metadata, "language", language, 0);
> + /* don't overwrite language, as it may already have been set
> by
> + * another, more specific descriptor (e.g. supplementary
> audio) */
> + av_dict_set(&st->metadata, "language", language,
> AV_DICT_DONT_OVERWRITE);
> }
> break;
> case 0x05: /* registration descriptor */
> @@ -1895,6 +1897,39 @@ int ff_parse_mpeg2_descriptor(AVFormatContext *fc,
> AVStream *st, int stream_type
> st->internal->need_context_update = 1;
> }
> }
> + if (ext_desc_tag == 0x06) { /* supplementary audio descriptor */
> + char flags;
> +
> + if (desc_len < 1)
> + return AVERROR_INVALIDDATA;
> + flags = get8(pp, desc_end);
> +
> + switch ((flags >> 2) & 0x1F) {
> + case 0x01:
> + st->disposition |= AV_DISPOSITION_VISUAL_IMPAIRED;
> + break;
> + case 0x02:
> + st->disposition |= AV_DISPOSITION_HEARING_IMPAIRED;
> + break;
> + case 0x03:
> + st->disposition |= AV_DISPOSITION_VISUAL_IMPAIRED;
> + break;
> + }
> +
> + if(flags & 0x01) {
>
Please add a space after "if" here.
> + if (desc_len < 4)
> + return AVERROR_INVALIDDATA;
> + language[0] = get8(pp, desc_end);
> + language[1] = get8(pp, desc_end);
> + language[2] = get8(pp, desc_end);
> + language[3] = 0;
> +
> + /* This language always has to override a possible
> + * ISO 639 language descriptor language */
> + if(language[0])
>
Same, missing space.
> + av_dict_set(&st->metadata, "language", language, 0);
> + }
> + }
> break;
> default:
> break;
> --
> 2.7.4
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
More information about the ffmpeg-devel
mailing list