From patchwork Mon Sep 4 11:27:44 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 43514 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:4f16:b0:149:dfde:5c0a with SMTP id gi22csp1136992pzb; Mon, 4 Sep 2023 04:28:39 -0700 (PDT) X-Google-Smtp-Source: AGHT+IG9aV21jsTtZw2b1DN3jESHg/FSTAJRTwaW511djp8ypEosV1Vjeh+zeMBA/FGvzHZ/sucD X-Received: by 2002:a17:906:3291:b0:9a5:cab0:b061 with SMTP id 17-20020a170906329100b009a5cab0b061mr6852875ejw.51.1693826919136; Mon, 04 Sep 2023 04:28:39 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id kd9-20020a17090798c900b0099c714ad27bsi5949166ejc.749.2023.09.04.04.28.34; Mon, 04 Sep 2023 04:28:39 -0700 (PDT) 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; dkim=neutral (body hash did not verify) header.i=@outlook.com header.s=selector1 header.b=RKKnGc4k; arc=fail (body hash mismatch); 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=outlook.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 19A0068C7E5; Mon, 4 Sep 2023 14:27:50 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-db3eur04olkn2033.outbound.protection.outlook.com [40.92.74.33]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B061068C7D3 for ; Mon, 4 Sep 2023 14:27:47 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=A+Gy/gih5X0ZeRErJv1Q9jEss0av9xXeOUL7GzqlTSJotSUnUEUQr2bo31g4fJjMwvSc41Y5ndtWl2srQwMy0aLX5LnPGfLM0znfWllKnnqSQxOK1MdAxbQXTj9z8MjjBxVBl3HkGBO8AfzQ+dTurdvxsHStPWQN5TfdfZCniLAOEjXymbiDVyfda93q0JrktS4ijnyqsXNIKoSVIAlgtbUoKrO012mxGGghNhdRs3VKnwV8xISRhfamTD20f5BVa6pDcZ6uDT88QEPD70j79Bqc1tjsb38nEo6wSl3YT5JBIFuBIbQUw1oYfXOcxUMrZjchxijU5x3CIzeI67gMvA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=DmVUWchjfjdhRhz9xQqlErV2zhoITBZg4OzcV8lrAQU=; b=asQ37sRYV66CnaYw9UCCNti1WEN98U6sghP50JHg2PZYZGhsGBDE50/bdc41+aXIQVwz/zbqpe9OwlmGwMNtjnqMPTgfUvdGNZWz4G1Cv2xAWrDAIO7DFwgehKveLjUJRON0L44A3CfqbFRPKrd1xFqCRt56PNcmShSFIu+1kTm7EIncGGdYNWdoofhJ6OxSe1cWvpOZRZBshIsoJGyviQ5rmIXlMPKwHaYQueKwhuY+TRygR+67CTmPFbgYFPYPYXC1Nxa84gy6bWkQmF94aokvirXklTGBupXTGsaziMDo8B/zaVdGoHRvuCQA1dfXDc+SHIBnpRmBNV1K2SX0/Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=DmVUWchjfjdhRhz9xQqlErV2zhoITBZg4OzcV8lrAQU=; b=RKKnGc4k4Kv/eFJ4m/eShWwphesnpIUretdhUSKEnx1O2u7FXunizhyY+DqWGTELfk8mXE7j3G95h7OeycYEEp7KCdhx3xY9ZRnG4I4VXcRap10G05JeUEPHXP+BR2U41SgvMw1UDRHRnM5F0BKXK+3k5ed425l7IE5ULCMiGatKNCjTQ6Yk6x4L1tjCwGs1RNn9nAvU9LgB1zj7iQubzDibUtPdn4ZD/B6Jn+XfaTy+E1YDE6x8xhY4J6/cF5i5VpTKlNInWiTUL8c5KRVJ/bA1cTbIOyBuc5b1cpdMeIysL5iH71MsTTkhbUrwYtsZbRV2M1BICOdmOotPgU1xbA== Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) by DU2P250MB0333.EURP250.PROD.OUTLOOK.COM (2603:10a6:10:27a::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6745.30; Mon, 4 Sep 2023 11:27:17 +0000 Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::5e01:aea5:d3a8:cafa]) by AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::5e01:aea5:d3a8:cafa%3]) with mapi id 15.20.6745.030; Mon, 4 Sep 2023 11:27:17 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 4 Sep 2023 13:27:44 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [XMpYgZfwQJho62qjJkpyIHvyhNKmeq4MwuNusVbxY2E=] X-ClientProxiedBy: ZR2P278CA0078.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:65::13) To AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) X-Microsoft-Original-Message-ID: <20230904112759.2652347-4-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8P250MB0744:EE_|DU2P250MB0333:EE_ X-MS-Office365-Filtering-Correlation-Id: 5c7a4cea-5bd1-4ec0-d15b-08dbad39e52e X-MS-Exchange-SLBlob-MailProps: ymJijV9pwJn0y37jYEfmpEAet1qI4rmTax/hiOiw6IllnXmq/hTvf3g6i/LXirbg92jJADMq4R4S/tqASh3RsAt/A7RGZPi/Sve72ct55lw87KTlyypsJ+TY0RTB/XUbP2h84WbwVXrq+8/vpLcoN+IUMcvfZ5bgS5ZaufbDN8t+3XBKvUS9U99DW2QHlNvvYx6mWNTTKHsWCmU4L6ToUFgGIVaarenNwBeN5s2zVR2rhQ+8zHUTyJiEHGAloD5NUCBDuwFxNcSJZyQzE3q2mYVr10redBrLJUDSpbjRLj9O/EAqv4Mf9OEU0dN5KpqDzfEZCCIYe/uWN5LPyDIXo1d53b8rw4KUaDppl0sdW7xQbW2sGCgOt9pVMfHkvMJZc8Cz0r3pf2+gqn8q2iE9XSFq5oPEKjdmMb1gF9V3jWxJkD5xnw7f2WZlhqrNJj8Dpb0iZa5L5DxT+TPHfxu4j4BLLr8LTs3gAu33FjzxQ+R7C4gDtLKk8R3Ug29RBIwTAzn1cDGJZE27KdhFwx5X2v9HpV01+DSc6/EtPscHv2Jof1RXKOkDE0fCAlB7B/vzv3jDD7qAvIcvQ+aRs0CxAt/WZQ540/G3XlsDAEV3G6+2U62tA9xrz3UYHTDkTWB9sYmImfgQs52eU4n/bVrhceEqOezZ6j7RJLiY3IrvvXAtQhNv/iubwiSIhsakWFY54vZTD56q8B0YlNNc/nFUkqo2CGSlEJS/pOOBNJSM0zwy2OK00kYYt8JdCK/fVQNRjcb0ZsmSIsC8Hftd7ULAMd3ObAAuSA2rb+9wD4eLFyPemARe/WoaFhx3qY2dJ6Rx X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: hwAlh9BCnc7bUdyxWPDtsP/sYb8ARY6RLieynvGe+Wm86bSsf4tPviToGpKgLGl9mFflOPxCOpjQatXJhHkFvJiUztFSMI+y5IVuD8uIySwVY4LLsSm1eZAG6Bu2Yslzthvhx7FpBZG14Tff2P3g7sDl4JmQOra7VfqYqG2oDYsz8ijfzpwdyWWJz+Zqop0CmTNXuteMmzEATnUJuShxj3sKUJAQ5u8lpLYWtl92XiDZPBSBSV9XW/qcHEJ/xBR+PHGQq2YAUucY/TOjhP+uFk43m+ASxN20ekR9SgZemoK7i7RE+Vz53eLiGjhIRG4ResiMREHtkP8D4D9CRVQnV5Xusqb4QfaToffa73Mci4otgqSVxGKMqVpGqUKnc6AusHeRE+7auBV+FN+e4Vbx3xqcwX9RmkxF/pJg3IaAQQqgWXTfSLp09zW27dw4IX9NJ18pKHsv2qYetPbjHVvfm0+8wR3RhOVaK5DMzZ++iE1TPESxYdwPQ6Js9ljJhMEvkMgD6zhIdiOULOVvoIbanTa6a7QNvNU1rIwc3EUOONv3x5YwkCKB3n6koxLM7Orkx0yH5vgX66d0/Zcs6AHihyM6FOvWY+ZOG9Ejpe5lmTKlzrGnjUqmZWAv03S5Lm1C X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: Xc0dsA+klM3DQHp4Ik0nZ6qZY4QKTpY1dSoqwYR5w4xckZoSaLXZK5hXNhwwAg4pVEIzeeleeOyv2zePMJjRAAVVtcGIZnbKNqJ7+iMJiX1YiUBE6ubDa9+TNG4BmrRiJfpz38rdo2URa+8BIDSkcDvf4S861Lc/zLeNupAclbE+ip39f7rbsJX4G1PbZYpk0ETjwwWCyu8/uF6Dq3oCpzUqGkOBARB39jAqwQrJ3ulSBykCS4/o6gmeDUykFiCydYMUYD0i4GOWqnyongWR/ZIeg7RZRV+Dc5B0gdVaMLOwYHmFtPWaQmtpdIkKzQbtpheMlcdV5nj78UD+eQrqcm45lYx+N0TbHPK6rpSPJX9l/W6a2Nxpijy/HRchuCgsQ1O6NqmAx8YipR+rpexr5wxaylTDuPkoN0MIVxoHuFDWpfW64RU09+a15yv5Bxw/EtlXUm1+3RQynQAAp+gTiezofrM+FWXsaogRy+mZhHQsQWkYj6HiJqTb3iOobG54/8ywE6pv3GfkEdpQ97yndbGGIl37WjmPGR8kVt9u6XzwwjXvseT07TMfLfFl6SEcBPJxJlnoRwA4CvHwi/HxfOnsH2e/es5sqqdB5ZPojUH0QoPzrC8//8jzU5inGUq0t90r1W16P05YIxBisj/uBnohEwVmL4d5V36irf8FWJPf0991t13/rKYqqWvX/pWabhcswVhcIwPC8otsMYXXA6LjMeJXRpLdKlnziXtYbo9INvu98Lcr5aKO6I9+VXzueUStxuGfuH3SxOxnyH6WhHKjtSnWahF7Qpno4QC4DPovPzm+JX4xibNW2j1OjwRHB7z1IxUMqmsv+Cv2Lw/1mgw2/iW9NQ5owjJZUghplglc0b2/GSWx9Siw+zX//4e3dNfCnrdmgXWqb3XNDA8r8Z6uPMSCJuThCSvxpPZsJ/aun4LMHr+bkI4Oz+Az8dhTCdh5waIM1O3brriPmyNqudvQ4Om2PzOrWkPhPicofFH5C1r8xAtIklOt++sm/vO88Fpv073tNhVTMHctzj8h/G+oZpKA90ZZb298c3REexXxYY/9as62y8zD6EbBMMfO0KaMbtuXd6fImOOflCUtVVNdggv61mtcYZ65eVO917LrNRPPngN4MYa8dLMCJFlw49YPk5ZgMWVMjZVwbYpqSDM8ATF0qM66NiwR9JkawOop+IkwHYTtFU2Im9ZRruCcoIUGRXTtdO7px62RsERSiTBUOV0DEUHaL1GIQ581z7zd7mE+Xm9GGZvqqz+Af3rD X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5c7a4cea-5bd1-4ec0-d15b-08dbad39e52e X-MS-Exchange-CrossTenant-AuthSource: AS8P250MB0744.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Sep 2023 11:27:17.5430 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU2P250MB0333 Subject: [FFmpeg-devel] [PATCH 05/20] avformat/matroskadec: Set AVCodecParameters earlier X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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: Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: Et0Wg7YvyAMI This is in preparation for future commits. Signed-off-by: Andreas Rheinhardt --- libavformat/matroskadec.c | 55 ++++++++++++++++++++------------------- 1 file changed, 28 insertions(+), 27 deletions(-) diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c index 50a159460d..e1524a5943 100644 --- a/libavformat/matroskadec.c +++ b/libavformat/matroskadec.c @@ -2528,7 +2528,6 @@ static int matroska_parse_tracks(AVFormatContext *s) AVStream *st; FFStream *sti; char* key_id_base64 = NULL; - int bit_depth = -1; /* Apply some sanity checks. */ if (track->type != MATROSKA_TRACK_TYPE_VIDEO && @@ -2662,6 +2661,9 @@ static int matroska_parse_tracks(AVFormatContext *s) sti = ffstream(st); par = st->codecpar; + par->codec_id = codec_id; + par->codec_tag = fourcc; + if (track->flag_default) st->disposition |= AV_DISPOSITION_DEFAULT; if (track->flag_forced) @@ -2704,13 +2706,13 @@ static int matroska_parse_tracks(AVFormatContext *s) track->codec_priv.size >= 40 && track->codec_priv.data) { track->ms_compat = 1; - bit_depth = AV_RL16(track->codec_priv.data + 14); - fourcc = AV_RL32(track->codec_priv.data + 16); - codec_id = ff_codec_get_id(ff_codec_bmp_tags, - fourcc); - if (!codec_id) - codec_id = ff_codec_get_id(ff_codec_movvideo_tags, - fourcc); + par->bits_per_coded_sample = AV_RL16(track->codec_priv.data + 14); + par->codec_tag = AV_RL32(track->codec_priv.data + 16); + par->codec_id = ff_codec_get_id(ff_codec_bmp_tags, + par->codec_tag); + if (!par->codec_id) + par->codec_id = ff_codec_get_id(ff_codec_movvideo_tags, + par->codec_tag); extradata_offset = 40; } else if (!strcmp(track->codec_id, "A_MS/ACM") && track->codec_priv.size >= 14 && @@ -2723,13 +2725,12 @@ static int matroska_parse_tracks(AVFormatContext *s) track->codec_priv.size, 0); if (ret < 0) return ret; - codec_id = par->codec_id; - fourcc = par->codec_tag; extradata_offset = FFMIN(track->codec_priv.size, 18); } else if (!strcmp(track->codec_id, "A_QUICKTIME") /* Normally 36, but allow noncompliant private data */ && (track->codec_priv.size >= 32) && (track->codec_priv.data)) { + uint32_t fourcc; uint16_t sample_size; int ret = get_qt_codec(track, &fourcc, &codec_id); if (ret < 0) @@ -2748,9 +2749,12 @@ static int matroska_parse_tracks(AVFormatContext *s) fourcc == MKTAG('s','o','w','t')) && sample_size == 8) codec_id = AV_CODEC_ID_PCM_S8; + par->codec_id = codec_id; + par->codec_tag = fourcc; } else if (!strcmp(track->codec_id, "V_QUICKTIME") && (track->codec_priv.size >= 21) && (track->codec_priv.data)) { + uint32_t fourcc; int ret = get_qt_codec(track, &fourcc, &codec_id); if (ret < 0) return ret; @@ -2758,11 +2762,12 @@ static int matroska_parse_tracks(AVFormatContext *s) fourcc = MKTAG('S','V','Q','3'); codec_id = ff_codec_get_id(ff_codec_movvideo_tags, fourcc); } + par->codec_id = codec_id; if (codec_id == AV_CODEC_ID_NONE) av_log(matroska->ctx, AV_LOG_ERROR, "mov FourCC not found %s.\n", av_fourcc2str(fourcc)); if (track->codec_priv.size >= 86) { - bit_depth = AV_RB16(track->codec_priv.data + 82); + unsigned bit_depth = AV_RB16(track->codec_priv.data + 82); ffio_init_context(&b, track->codec_priv.data, track->codec_priv.size, 0, NULL, NULL, NULL, NULL); @@ -2770,34 +2775,36 @@ static int matroska_parse_tracks(AVFormatContext *s) bit_depth &= 0x1F; track->has_palette = 1; } + par->bits_per_coded_sample = bit_depth; } + par->codec_tag = fourcc; } else if (codec_id == AV_CODEC_ID_PCM_S16BE) { switch (track->audio.bitdepth) { case 8: - codec_id = AV_CODEC_ID_PCM_U8; + par->codec_id = AV_CODEC_ID_PCM_U8; break; case 24: - codec_id = AV_CODEC_ID_PCM_S24BE; + par->codec_id = AV_CODEC_ID_PCM_S24BE; break; case 32: - codec_id = AV_CODEC_ID_PCM_S32BE; + par->codec_id = AV_CODEC_ID_PCM_S32BE; break; } } else if (codec_id == AV_CODEC_ID_PCM_S16LE) { switch (track->audio.bitdepth) { case 8: - codec_id = AV_CODEC_ID_PCM_U8; + par->codec_id = AV_CODEC_ID_PCM_U8; break; case 24: - codec_id = AV_CODEC_ID_PCM_S24LE; + par->codec_id = AV_CODEC_ID_PCM_S24LE; break; case 32: - codec_id = AV_CODEC_ID_PCM_S32LE; + par->codec_id = AV_CODEC_ID_PCM_S32LE; break; } } else if (codec_id == AV_CODEC_ID_PCM_F32LE && track->audio.bitdepth == 64) { - codec_id = AV_CODEC_ID_PCM_F64LE; + par->codec_id = AV_CODEC_ID_PCM_F64LE; } else if (codec_id == AV_CODEC_ID_AAC && !track->codec_priv.size) { int profile = matroska_aac_profile(track->codec_id); int sri = matroska_aac_sri(track->audio.samplerate); @@ -2912,7 +2919,7 @@ static int matroska_parse_tracks(AVFormatContext *s) extradata_size = WAVPACK_EXTRADATA_SIZE; AV_WL16(extradata, 0x410); } else if (codec_id == AV_CODEC_ID_PRORES && track->codec_priv.size == 4) { - fourcc = AV_RL32(track->codec_priv.data); + par->codec_tag = AV_RL32(track->codec_priv.data); } else if (codec_id == AV_CODEC_ID_VP9) { /* we don't need any value stored in CodecPrivate. make sure that it's not exported as extradata. */ @@ -2949,12 +2956,10 @@ static int matroska_parse_tracks(AVFormatContext *s) } track->codec_priv.size -= extradata_offset; - if (codec_id == AV_CODEC_ID_NONE) + if (par->codec_id == AV_CODEC_ID_NONE) av_log(matroska->ctx, AV_LOG_INFO, "Unknown/unsupported AVCodecID %s.\n", track->codec_id); - par->codec_id = codec_id; - if (!par->extradata && (extradata_size > 0 || track->codec_priv.size > 0)) { const uint8_t *src = extradata_size > 0 ? extradata : track->codec_priv.data + extradata_offset; @@ -2972,9 +2977,6 @@ static int matroska_parse_tracks(AVFormatContext *s) int display_height_mul = 1; par->codec_type = AVMEDIA_TYPE_VIDEO; - par->codec_tag = fourcc; - if (bit_depth >= 0) - par->bits_per_coded_sample = bit_depth; par->width = track->video.pixel_width; par->height = track->video.pixel_height; @@ -3049,7 +3051,6 @@ static int matroska_parse_tracks(AVFormatContext *s) return ret; } else if (track->type == MATROSKA_TRACK_TYPE_AUDIO) { par->codec_type = AVMEDIA_TYPE_AUDIO; - par->codec_tag = fourcc; par->sample_rate = track->audio.out_samplerate; // channel layout may be already set by codec private checks above if (!av_channel_layout_check(&par->ch_layout)) { @@ -3075,7 +3076,7 @@ static int matroska_parse_tracks(AVFormatContext *s) (AVRational){1, 1000000000}, (AVRational){1, par->sample_rate}); } - } else if (codec_id == AV_CODEC_ID_WEBVTT) { + } else if (par->codec_id == AV_CODEC_ID_WEBVTT) { par->codec_type = AVMEDIA_TYPE_SUBTITLE; if (!strcmp(track->codec_id, "D_WEBVTT/CAPTIONS")) {