From patchwork Thu Jul 30 14:58:57 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lance Wang X-Patchwork-Id: 21381 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 85E0844B9D8 for ; Thu, 30 Jul 2020 17:59:17 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 5169C68B6A5; Thu, 30 Jul 2020 17:59:17 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pj1-f45.google.com (mail-pj1-f45.google.com [209.85.216.45]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E60A168B5E0 for ; Thu, 30 Jul 2020 17:59:10 +0300 (EEST) Received: by mail-pj1-f45.google.com with SMTP id lx9so4749502pjb.2 for ; Thu, 30 Jul 2020 07:59:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=zKOyCPjLN9emxMU6rCOGukT3WE+8OIAbaAAwcEOI2ZU=; b=YbhvQbrIMEvS3lPQd1EFGOGqE81cyE/jw9Em8xhHbqsrAt+riJUrgkvse9L2wPzZEb fwKb05SRGMatMr11tKTeHb8eHz7jRHWyZcMuMbGt3SQ+RzHIr9gt1dxoYJxFOBaoD56d yVu3IFPP6x3cZtfILfbabt3/l/fXLSMuZeWx9r6kN9cAXQ7PMR+Y4WBs20kBhpeYr+sf sGWXHGqFTh/g0CIkjLOe8CWM/tszxD9cm2gpq/gKEBWI8ujIqlHIIk5cdANGMRABNzoN 1bzQP1C7c0ZsAKm7sz+rDAq+T/ljvaliZ3hxfJK7BjNdnXj96FivZGt3Zt6toVkhLaEn yqGA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=zKOyCPjLN9emxMU6rCOGukT3WE+8OIAbaAAwcEOI2ZU=; b=pIuBQbuCCc3bGjLJMaq1myPPFJ9s2n2XcGdtBTP75F6SX9+UFBQiMWx9Xlv6hh1Vlg hC+v2jH/pVVw3wrAnBRSmN2k6AKuHXfqCV22RD+3p3+KGbTGoxtz2hfdERjOYyukU2K9 hP1yCIRgj7wwFprhsNsdGumOJsEO6wSjCqM/6kf2z+hzv+y40UPhH6+NhKt63k/yW6bT KKEDbosjR4cDYBKmKOrYOjSOCNTTrwBqrPtFhn7ya1gZH8nIAjb0WrZiIQsHMztFWjZm 6EzYeK1EBimFzqxBq5gb5z1AzdrMq6thO3LUi5cP4bRlGEnr04lOcKpFEVGiRrLgkOnG FliA== X-Gm-Message-State: AOAM5319rPQUzZyQkW3ap9zlfn43U4q0oGNpYy0bWDi9r9SW1/2E7ztC 9f2dYvA3+68dIr0wZnRaLl2WoPiQ X-Google-Smtp-Source: ABdhPJxd91MVkBo7I4ApwlTBaLX/qkSOo4z47loBoFdhUCHpWShGo/aA4/FyR/H+1AnVhD/WiC2frw== X-Received: by 2002:a62:52d6:: with SMTP id g205mr3835650pfb.144.1596121148399; Thu, 30 Jul 2020 07:59:08 -0700 (PDT) Received: from vpn2.localdomain ([161.117.202.209]) by smtp.gmail.com with ESMTPSA id d5sm5620864pju.15.2020.07.30.07.59.07 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 30 Jul 2020 07:59:07 -0700 (PDT) From: lance.lmwang@gmail.com To: ffmpeg-devel@ffmpeg.org Date: Thu, 30 Jul 2020 22:58:57 +0800 Message-Id: <1596121138-20997-4-git-send-email-lance.lmwang@gmail.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1596121138-20997-1-git-send-email-lance.lmwang@gmail.com> References: <1595948614-10861-1-git-send-email-lance.lmwang@gmail.com> <1596121138-20997-1-git-send-email-lance.lmwang@gmail.com> Subject: [FFmpeg-devel] [PATCH v2 4/5] avformat/mpegts: parse and export descriptor 6a side data 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 Cc: Limin Wang MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" From: Limin Wang Signed-off-by: Limin Wang --- libavformat/mpegts.c | 57 +++++++++++++++++++++++++++++++++++++++++++++---- tests/ref/fate/ts-demux | 2 +- 2 files changed, 54 insertions(+), 5 deletions(-) diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c index c6fd3e1..720ed34 100644 --- a/libavformat/mpegts.c +++ b/libavformat/mpegts.c @@ -29,6 +29,7 @@ #include "libavutil/opt.h" #include "libavutil/avassert.h" #include "libavutil/dovi_meta.h" +#include "libavutil/mpegts_audio_desc_metadata.h" #include "libavcodec/bytestream.h" #include "libavcodec/get_bits.h" #include "libavcodec/opus.h" @@ -2073,16 +2074,64 @@ int ff_parse_mpeg2_descriptor(AVFormatContext *fc, AVStream *st, int stream_type break; case 0x6a: /* ac-3_descriptor */ { - int component_type_flag = get8(pp, desc_end) & (1 << 7); - if (component_type_flag) { - int component_type = get8(pp, desc_end); + int ret; + uint8_t buf; + size_t desc6a_size; + AVDescriptor6A *desc6a; + + if (desc_end - *pp < 1) + return AVERROR_INVALIDDATA; + + desc6a = av_desc6a_alloc(&desc6a_size); + if (!desc6a) + return AVERROR(ENOMEM); + buf = get8(pp, desc_end); + desc6a->component_type_flag = (buf >> 7) & 0x1; + desc6a->bsid_flag = (buf >> 6) & 0x1; + desc6a->mainid_flag = (buf >> 5) & 0x1; + desc6a->asvc_flag = (buf >> 4) & 0x1; + if (desc6a->component_type_flag) { int service_type_mask = 0x38; // 0b00111000 - int service_type = ((component_type & service_type_mask) >> 3); + int service_type; + + if (desc_end - *pp < 1) { + av_free(desc6a); + return AVERROR_INVALIDDATA; + } + desc6a->component_type = get8(pp, desc_end); + service_type = ((desc6a->component_type & service_type_mask) >> 3); if (service_type == 0x02 /* 0b010 */) { st->disposition |= AV_DISPOSITION_DESCRIPTIONS; av_log(ts ? ts->stream : fc, AV_LOG_DEBUG, "New track disposition for id %u: %u\n", st->id, st->disposition); } } + if (desc6a->bsid_flag) { + if (desc_end - *pp < 1) { + av_free(desc6a); + return AVERROR_INVALIDDATA; + } + desc6a->bsid = get8(pp, desc_end); + } + if (desc6a->mainid_flag) { + if (desc_end - *pp < 1) { + av_free(desc6a); + return AVERROR_INVALIDDATA; + } + desc6a->mainid = get8(pp, desc_end); + } + if (desc6a->asvc_flag) { + if (desc_end - *pp < 1) { + av_free(desc6a); + return AVERROR_INVALIDDATA; + } + desc6a->asvc_flag = get8(pp, desc_end); + } + ret = av_stream_add_side_data(st, AV_PKT_DATA_MPEGTS_DESC_6A, + (uint8_t *)desc6a, desc6a_size); + if (ret < 0) { + av_free(desc6a); + return ret; + } } break; case 0x7a: /* enhanced_ac-3_descriptor */ diff --git a/tests/ref/fate/ts-demux b/tests/ref/fate/ts-demux index cdf34d6..dfe0374 100644 --- a/tests/ref/fate/ts-demux +++ b/tests/ref/fate/ts-demux @@ -10,7 +10,7 @@ #sample_rate 1: 48000 #channel_layout 1: 60f #channel_layout_name 1: 5.1(side) -1, 0, 0, 2880, 1536, 0x773ffeea, S=1, 1, 0x00bd00bd +1, 0, 0, 2880, 1536, 0x773ffeea, S=2, 1, 0x00bd00bd, 9, 0x00000000 1, 2880, 2880, 2880, 1536, 0x6dc10748 1, 5760, 5760, 2880, 1536, 0xbab5129c 1, 8640, 8640, 2880, 1536, 0x602f034b, S=1, 1, 0x00bd00bd