From patchwork Tue Jul 28 15:03:34 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lance Wang X-Patchwork-Id: 21341 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 E12B74478AF for ; Tue, 28 Jul 2020 18:04:00 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id C635368B9B8; Tue, 28 Jul 2020 18:04:00 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pj1-f68.google.com (mail-pj1-f68.google.com [209.85.216.68]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id D129668B9A4 for ; Tue, 28 Jul 2020 18:03:53 +0300 (EEST) Received: by mail-pj1-f68.google.com with SMTP id lx9so911914pjb.2 for ; Tue, 28 Jul 2020 08:03:53 -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=SPm5issQPxPCbOXwdnthss7/lCwilO+PoaOQG5opCAM=; b=tfkZwKpBLMsLdB953Q+hUQzWrjUr2LYbKHOEcZYpldnmsbDhzyol65Y89lJ1aGZWKS /XprmXmHp6EFDN7I0kknxY5EPtTObCDveNqYneVf58aEaShH/rY+NoBD2e2QMga+CiT9 rNVKCiONfamVwjRuRKT+KTO99gKKy4P5V2eLfOI8aFYdisBKTS4qMqFDb9wYxCMnZVXc ecRxLIhWHOwuLtMwfAxlfL78/im68yqUtzLH1CC956CBg9znc9oyEgnbtx4al4jDnft7 5fEHLGCEGuxmGyZxmNcNdx/MN3F6SuYtx72P/tkK6IBqSiQxnJU/2lqfvJ2eqngXoM/O Et+w== 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=SPm5issQPxPCbOXwdnthss7/lCwilO+PoaOQG5opCAM=; b=bSHfxiy7PV8grVNnmnvmE2WoedL+gbPwyBXBt3gQOcfAJ7iIisITicpFME34eBO00s htXixUvagC7UI255imKWkcEnU0NNV1gwnWxdZq6J4bkESpeW0Qb/YT9sWueUpdbM8zy7 MdBjP3VeyVx3VFlD30Ldoey/38ds1yqtFAJlW9yJeOvT1u1NFGAkSEUzbTpjel8wlRNW Az5l8l2XS8SwiOLWAgNrGD32mzRQ6E/Q6RBNQhf5UAP8nvawnfGlNbvyk73wLw57/tiP qZ1Ir5rop4KpM5yNuxqQvkq2cV80OC3bJxqTT2Yb/N1yZOq2IhzW08A87E7Bb2Ulo/pr 7WcA== X-Gm-Message-State: AOAM530UfUK2l0hL++TnA5xe35pP2aleOppakJyYxf5bhzJeHerHmnxt ptxEfUaZ7WBWwI8hBWpM4OyyHRtv X-Google-Smtp-Source: ABdhPJxNsrupODiJ4+Y439XTu1qmNXpIINsi+srnMBSUqhhn0tcEXhgnXZTktwPq7ULWJdACf4+jFA== X-Received: by 2002:a17:90a:a393:: with SMTP id x19mr5109010pjp.228.1595948631530; Tue, 28 Jul 2020 08:03:51 -0700 (PDT) Received: from vpn2.localdomain ([161.117.202.209]) by smtp.gmail.com with ESMTPSA id m31sm3570005pjb.52.2020.07.28.08.03.50 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 28 Jul 2020 08:03:51 -0700 (PDT) From: lance.lmwang@gmail.com To: ffmpeg-devel@ffmpeg.org Date: Tue, 28 Jul 2020 23:03:34 +0800 Message-Id: <1595948614-10861-5-git-send-email-lance.lmwang@gmail.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1595948614-10861-1-git-send-email-lance.lmwang@gmail.com> References: <1595948614-10861-1-git-send-email-lance.lmwang@gmail.com> Subject: [FFmpeg-devel] [PATCH 5/5] avformat/mpegtsenc: support 0x6a descriptor for AC-3 by side data if have 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/mpegtsenc.c | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c index 718ddab..ff0da62 100644 --- a/libavformat/mpegtsenc.c +++ b/libavformat/mpegtsenc.c @@ -26,6 +26,7 @@ #include "libavutil/intreadwrite.h" #include "libavutil/mathematics.h" #include "libavutil/opt.h" +#include "libavutil//mpegts_audio_desc_metadata.h" #include "libavcodec/internal.h" @@ -244,6 +245,8 @@ typedef struct MpegTSWriteStream { /* For Opus */ int opus_queued_samples; int opus_pending_trim_start; + + AVDescriptor6A desc6a; } MpegTSWriteStream; static void mpegts_write_pat(AVFormatContext *s) @@ -486,9 +489,22 @@ static int mpegts_write_pmt(AVFormatContext *s, MpegTSService *service) case AVMEDIA_TYPE_AUDIO: if (ts->flags & MPEGTS_FLAG_SYSTEM_B) { if (codec_id == AV_CODEC_ID_AC3) { + int len = 1; + + if (ts_st->desc6a.component_type_flag) len ++; + if (ts_st->desc6a.bsid_flag) len ++; + if (ts_st->desc6a.mainid_flag) len ++; + if (ts_st->desc6a.asvc_flag) len ++; + *q++=0x6a; // AC3 descriptor see A038 DVB SI - *q++=1; // 1 byte, all flags sets to 0 - *q++=0; // omit all fields... + *q++ = len; + *q++ = ts_st->desc6a.component_type_flag << 7 | ts_st->desc6a.bsid_flag << 6 | + ts_st->desc6a.mainid_flag << 5 | ts_st->desc6a.asvc_flag << 4; + + if (ts_st->desc6a.component_type_flag) *q++ = ts_st->desc6a.component_type; + if (ts_st->desc6a.bsid_flag) *q++ = ts_st->desc6a.bsid; + if (ts_st->desc6a.mainid_flag) *q++ = ts_st->desc6a.mainid; + if (ts_st->desc6a.asvc_flag) *q++ = ts_st->desc6a.asvc; } else if (codec_id == AV_CODEC_ID_EAC3) { *q++=0x7a; // EAC3 descriptor see A038 DVB SI *q++=1; // 1 byte, all flags sets to 0 @@ -1075,6 +1091,7 @@ static int mpegts_init(AVFormatContext *s) ts_st->first_pts_check = 1; ts_st->cc = 15; ts_st->discontinuity = ts->flags & MPEGTS_FLAG_DISCONT; + memset(&ts_st->desc6a, 0, sizeof(ts_st->desc6a)); if (st->codecpar->codec_id == AV_CODEC_ID_AAC && st->codecpar->extradata_size > 0) { AVStream *ast; @@ -1843,6 +1860,13 @@ static int mpegts_write_packet_internal(AVFormatContext *s, AVPacket *pkt) * need to count the samples of that too! */ av_log(s, AV_LOG_WARNING, "Got MPEG-TS formatted Opus data, unhandled"); } + } else if (st->codecpar->codec_id == AV_CODEC_ID_AC3) { + AVDescriptor6A *side_data; + int sd_size; + side_data = (AVDescriptor6A *) av_packet_get_side_data(pkt, + AV_PKT_DATA_MPEGTS_DESC_6A, &sd_size); + if (side_data && sd_size == sizeof(*side_data)) + memcpy(&ts_st->desc6a, side_data, sizeof(*side_data)); } if (ts_st->payload_size && (ts_st->payload_size + size > ts->pes_payload_size ||