From patchwork Fri Feb 16 19:22:36 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Stefan_P=C3=B6schel?= X-Patchwork-Id: 7612 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.150.1 with SMTP id c1csp1076834jai; Fri, 16 Feb 2018 11:22:45 -0800 (PST) X-Google-Smtp-Source: AH8x224wkzQQD2l6+mM4Fz3XvJUAAyrapA2VRh496/CG7ThQ0QFW0WtfP7XdyJnVPvWM52AVrpF4 X-Received: by 10.28.212.13 with SMTP id l13mr5536499wmg.83.1518808964920; Fri, 16 Feb 2018 11:22:44 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1518808964; cv=none; d=google.com; s=arc-20160816; b=I2n6BGlyWzWKRbMzz9sXAxDPkmOR7AvpTGGjmjn3nld+BcMg3T+5QLw2fMnFtgfelv SB3qHcDet91/cfly+Wm58/W5ikQEOOCziz0l97vWTq49saRPUTHjD9VjzEw2GHNLRX0g 6bJuUxeg9RukLssHk10psLJeRv1+STwIPB9s5ifRFnYTeSWw8GFSiL+aunwpQSCxcUQm XkN6X6eT2sH3iOuz/96XSrrp9+l6NRSXNmyOuFh/JqMKxL6t0QQNmZ0mLgdyUSQ4H4Kx jJQMff6HBAVAIb8lexZ4PEmM/kQBcY/lrfhPSfBdNXLq/M7uL6P6usm6ISH/9RmKJeZT zGuQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:content-language:in-reply-to:mime-version :user-agent:date:message-id:from:references:to:delivered-to :arc-authentication-results; bh=JaK7lHqMptCsF5fY7OffaWgpyaQjwBVFcH93d/b3WMc=; b=HkbfBkbESzmVT4lqdbAdajdVRJKuEPIsN6LCJULeXqOkst6I4FK12jk7gdAMCgLabj sNHNS3DUeVa4PsBmpBJRiQ17DwLyJO0Oavie62PSxRkwSAjB3qk1kIRaKkdiA/TLbv2J ue5udNHwhf7Xoe6XR2BMqyutANXnZyCyF0Rb/VIzcrWV8jXLs5CJLgvlbzdMaiKBvh09 DYK2fUhDz0ZUQxxHOY5v7BU4yyCj/GuJChZssfpUYatGKSheYdlurqzSqq7CAKxjdl8Z tHkJM8cLSQMztjo5hUIRRI+mwdLIE5uPnS9ekkh1DzQ1AXhMr+vkYZuW2k15fQbusYUY LGOw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id o13si4148209wra.321.2018.02.16.11.22.44; Fri, 16 Feb 2018 11:22:44 -0800 (PST) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 4E9B668A1FD; Fri, 16 Feb 2018 21:22:31 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mout.gmx.net (mout.gmx.net [212.227.15.18]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 03D2668A1BB for ; Fri, 16 Feb 2018 21:22:24 +0200 (EET) Received: from [192.168.6.10] ([83.135.233.101]) by mail.gmx.com (mrgmx003 [212.227.17.190]) with ESMTPSA (Nemesis) id 0Lcjgd-1eKXVK1ChL-00k7kj for ; Fri, 16 Feb 2018 20:22:37 +0100 To: ffmpeg-devel@ffmpeg.org References: <20f1aa81-c9e0-e0c5-3653-2627d1712a18@gmx.de> From: =?UTF-8?Q?Stefan_P=c3=b6schel?= Message-ID: Date: Fri, 16 Feb 2018 20:22:36 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.6.0 MIME-Version: 1.0 In-Reply-To: Content-Language: en-GB X-Provags-ID: V03:K0:W2XY16nQtU11/awnXI6Rjw9RjnGF+HbPiABFehAD5MYfVmmSc/s KnliCxq5kxf7Iy1Km78qWNPh2m55+NtD/fn00XiOKZg1azxbbP2VhG2u0o5h8/r/LusgB/m BCPxqKVPwB/E5Q5vU+LpTP5/4aKzBB49+K6or2D8kW4kx0xZGhWnu0dJgpzbVpowxd3DcMy v/MFgZOkQeH+Cq517QMXA== X-UI-Out-Filterresults: notjunk:1; V01:K0:ioFFWCBVcKc=:kHj8b+ExjqFuoXlLY0qKWn QwwxMnw2AB+3wzm7eTGMUZGV2I96fmI3hcKbKYGj0e3GcYVjX+o6j4ErgKw4XOQlaY9S0xDar qbwH9IYBuOXxKASdjRdkqAYZdSXIjc6M9tz/v/0bJWP6nimE9fFC56anrhJcDzIeKnoTwsAgn ZYdH1CXZCXOnbqn8j98yiQ7A1gA8r4YOobp6m6zowEDtnADCCoSDBr/HfOIyN6S/z/cUa0EMP H8PHbE3ofMbjqYmaeRzOP9zFJ9U7Y8GNvedl7SqBxrhNbHSCKKqotsl5GeoXRUCGX+fAWxG8D GlGNviiZPIxYbhbbD7UmljX25cSZFoTgkcBeTZaY6ApiEp10Adnc2BOdErcl6arkaVFUe2y2S oowYpa3rtPhQlf6jdtCKNGvfnqunWA+NTnHOCWqLRVm3Tf1ZqOEkXJTrYxPiq8rviXvS+4h1U 9qv3m1B5Dt9y9I0R3OMP1N2w0lwMqGFfhx/Tk27gdEH5MZ4l482ren2hTB1ah4IKylvtl2/D3 edu8Ja4BwVZyFBcFhdGCg/BtjlLsT1LrckEHmk4d7eCPwLpHdAyubUZhmfgemcwi+XsGxhREd TLdEuRtYQhmzLOvi5g977r1ozbRsSHeuEbLBdJy71rr2/VgFSm3Sxjtm7HHIkFgHfNPMHvsQZ qEea1XxTD/hzPNmf3lyZ0lyhCgBW+zu21724oUa5v3p00JWX7sFhmBqBYHsG12Thi6OPUR53j ami5B7RqxL8mzvS8RfWZg9j9Hbk0nIe/mSv5oaONvTl8z0Hj5g66cM3/4mGGqLQ2TgvfH/PG6 eF2tElP6xmzfSfl6qu088NwoxU7BNd7NqU6uzdVal3HxopBYeU= Subject: [FFmpeg-devel] [PATCH v2] lavf/mpegts: add supplementary audio descriptor X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" 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..c3b522b 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) { /* editorial_classification */ + 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) { /* language_code_present */ + 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]) + av_dict_set(&st->metadata, "language", language, 0); + } + } break; default: break;