From patchwork Mon Sep 4 11:27:47 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 43511 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:4f16:b0:149:dfde:5c0a with SMTP id gi22csp1136781pzb; Mon, 4 Sep 2023 04:28:09 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGa38o3HZGTqsjkzimKkm9aDYdvO2p9+MKwvI/dS0LK52jI6/Y2KctoypKdijMx4VTjZcyS X-Received: by 2002:a05:6402:17d0:b0:52c:8e9b:6bcd with SMTP id s16-20020a05640217d000b0052c8e9b6bcdmr4799620edy.12.1693826888966; Mon, 04 Sep 2023 04:28:08 -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 d19-20020a056402079300b00525b2f04f7csi6090274edy.41.2023.09.04.04.28.04; Mon, 04 Sep 2023 04:28:08 -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=N4FyVjhD; 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 194D968C7C6; Mon, 4 Sep 2023 14:27:44 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR01-VE1-obe.outbound.protection.outlook.com (mail-ve1eur01olkn2089.outbound.protection.outlook.com [40.92.66.89]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 3EEFF68C7C5 for ; Mon, 4 Sep 2023 14:27:42 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Uxr8mo66mxff+GOOr/sPm2c0NTbG4/MAQhN+sdz+2svjM59ZWYbe0GYQt/s2To4+wMyxjQgOMONrqoGLe8/pjev3Xng8lGz0WkFTOD5Do+NcUdbaiYSG3+Oq15o/J8g6RC0UlY2qYwcn9+Neq0Ex1v/pqAVfxoyWAS8UuTv3twGYuApAIDW9LHamdHX3y6FSphaqudfNimyIjFXgCYTwLJhXlinkcYR2sA7Lqnvj2TL25E+o+0Wdva179MQ9b19xM11OQmYZSSb9KEmIfvY3mlIFf7eeA82IB3ArcXq5aPxx09PhM5xL/rpfr83x+FriRjimZO235d0BgOWHwkrGpQ== 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=oyEwfUaEVYf2J+dTfvstc4uEtxode1XztibtazkAZvA=; b=SBnDJImwQDjtelqlREos50IbXvIDRveaON8UJt6B1JQ/DCs0Nyiuu06TkuiMENeMnU3yWggb21qhPxbw94vuRC95ZXb11D0Up14DeXi7Ld7JzfCQ7+UoopxFIm+2k5HMk5V/5YYccnBmobRQ7H9cLrf560lGoGo1EJEAWqsDD9EIM6Cko0Epgn5bdAmYB6wc2/SM35ooMiUjn9JvPXTjYHRe+mW/KmaqrbLpx6+bZaBelo+lFKTRLYeVr2I4ir7YbSnpGaDceGzQWCM6HNiL0j5d0eNLSN7MC51LcC9n23ok0rYeoKzaYECY0q68UmmjT7ftowbcC61oe2gdLxT8BQ== 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=oyEwfUaEVYf2J+dTfvstc4uEtxode1XztibtazkAZvA=; b=N4FyVjhDcHOHcjO2RGLBCr5HA/LDcWO0/N1mmnRmKd6desrPbXYbgUvFGcooDyIwda/FoVdzpEUGZ3oS7axnM1pDl66NA+SWHY2R4P5FwRpAO90mBffwgEYbynHuyS3Ss0Injw3n7obMIqhh8YUuCJbas6oaOyh/EhO03sBlAZ1Wtg40vKOMp6S5Jv5YOJ6QQOATzpnitzBZoSTzHvDhtNH3uniqUxIZbqAy49RyjYcoBzuWceM6O0ergMYXQdH7DFQfLABM+D849fK6w2T6A+pZ2HRxxvJYM6gcHwEXQKIpfZL8vQWSrvXncjCBlW+bTE+LVvDtWDo6iflc/d5Lgw== Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) by AM8P250MB0280.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:32b::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6745.32; Mon, 4 Sep 2023 11:27:41 +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:41 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 4 Sep 2023 13:27:47 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [+fdwPjrMV2IGSdtwi+yycrsEcW6CY5dIf57VEq+72f4=] 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-7-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8P250MB0744:EE_|AM8P250MB0280:EE_ X-MS-Office365-Filtering-Correlation-Id: 8b3a2507-31ba-437a-ef65-08dbad39f34e X-MS-Exchange-SLBlob-MailProps: 0wLWl8rLpvtlEyItUpZmgfjbRm+zWpoMwFsmFlemc4Ai1a312gaAxdyukDxCUbiE9fEtfdS6wmQdo2qVgmjSSfy57dFigATfaqL5uV1EU2eCqkS/QIsPe+xPfpQxfVFX8eRWOe78UlLp5zpa3txufpgXXnIm1D04cZOa5yull+oGjIr5eR86YPWDDMEetdT+/UdsWYJr6IDbidtvmWee7DqaMJJbtPR6GL3ozogwyM9oUCXsSRmp5J482t1d2PThEefLfJhc0rj26EONMshvxdkHirkUBLpktJlNQB6JatGvzWvFRNCKKjnjJKzyxVwV0/U31rFOOhSryE27su2Al4I6P264G1Ymj9CAF0eICovFq6W2b9PgnUTEj6Jd81b8sir6QPBnBPOdZ4KoJ1DjXgUt3qw37cIADKYdqVjVJ57/YM7dn9K53yveDWI/KuR3GJrOIck/QjviEqAl84Mj6bGy+V53m9SvVaFA4IQnQIChPhPucsSCJ8VFzPl2MlrzsEbUnjePIj+msppJPQiKGjBUFKTzw0lupI6etZkdkqTVpcm6DTqywFenbGKP8cV+9Tyyyin49fIPuRKv2ks/1Of0m+WjD3q4jdIju3nw/FmF6qnPgEaYsTgvVV68M7WiIXdYSYZ6UXS9kAScgnAQqim/7OWVWngBlfyyetOD1usgNQQJZ4l+XKoMp42g704gtqCmZoL/XW8sjNCI+VVmGh0X7Hk6a6zZRM9r+f0HBv7VQR1O/JKAyRcY47SyVLMjGyb8l4lu1vM= X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: IwGUhu7nn0d+mFYc1UFzD+vxb1KBmGEG8n9pez2p4WO5PKmt/50iQcZqetEXV1GUjqIs5ddmO0TYHB9g4eNTd6ACkVUa6Ud1zbcpO6w5Tgmkirx4UNMwjlhorlLdUnOGNbGVMYP6eqg+xDopYXEVQrTKU6ljWQd0/cKu4Z0BKLcSGcIIV6EtD2alGzOX65p1ljWEAHfBL7eT8omUH1Qddb5tLNTcoe9sgHnh6Ap898QzcxRE1GtJOJzBvcEVwaFARY1SVScswwWRhdRwAtA/pJfJ7wIe0ixSbM/geSHyBdnyUo50zaMoGLZJ8QLuCfI75aRklLuz0MIufiCJZ5RJYyzeuu6uEo9i1F/83j5fp7QRsfKfKXYG0hy8WrxXMIDQmOObfPbf+/iP3vQAtrRR89KsnKF04zbvlXfp3TUiIoqzrKiBnjayVwgCVr9WENdYy/CNjg10b3djvW9bBx5d9oc3WUS3qFandmXDqCl60VcaBg4AbOf+Cvm1VCFQ7aTNOQOPAk8la+DKG3ZyaAvaqUCDpIRYpYcMLbFyY4Drw9KGk07huzAsYZ5TId4XczdX9xF2hL6WeuJea0PAUCxIdOzLtD8yXoiyxAS43jMNYkg6VVYj+37yDUdLQjinyiI/ X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: cuMgGhRTsslFgLl/0Vz2sgsdsru6ytAWOIo9NwgmgDeEv5ruHYMleZ7iTiQknEnJDf24Zdb4/F+5z8aMuip3kBUvl+HiqnhXAlYb6kXTIv12UTQ+cgNkRs+yO5KVVYRLG3M7xIs34dE4ejNa0qgOlcgEaLouvTDV96pj4Md/kbHkyQbS4UbyD9X16vhy/spgouy8iVVPG50arA4o7yO2llRNZvGEvBRwGApjNPL+K4SqKRBiiLs8sMXaxGdIoNTeOfV7ZjZgdzBTT7oKBfYQj0gZAQTduD2Ya2WJEzGuEc0cYmWij6rOq0YRkG4lq3BvgOFdguoIkoAV6HI7wjXLRsR6Xz+hQ5QcyyjoIYj5IiO6ZLuFM6TKOKGhxvulO2r2S/85e3512tWi+giIYDinbkuT0VyRtaxc1qXecsBuE0/m/DpBr85W4Ptk3ru39LkMlNu4oek6nJoyspnn/pwYRhwpufuAuwMhiLvYLp3TgnMZe6pxsqoUPSBTIwnsAO855yPpUpZa2J2MnPOnS36rP3oFH6nFzBlfj1y9jInrpcPt/MQ2ulWktaQTHQfxYLv/dGLBMx2/K+6DiHHZEdqP3C1Mve5NNWJ7EJKv5BD+fA78stgUbFgN3BQN55t4dnLC1HdZkD56PlSOSdVF4xfhIZinpz9s1tqKU0e/lHOVSl5fX/K3cE9+GXR5SLzhCtyXlVxsxamHK6m57Pm6L3qzxnbojMr38LVbN8zOx3DEnaFQKJ2j3mxpOmdgNnoG1Tg2OP38/Ovb1WpGw9hOKuGFA/OX7tNEkFkJ8oDXBWXnq7Sh5HuyZFsbrY1bi1XcQxi2Tl+txhdvIi4TYgdq7PVVvLrwMtLg0eRvABYkzARB6ZfMxg5tdOVu+Fpfr0YtSWBsEzSs/zkP29hAnA5fy8a7X3RP9nu1J4R0yPU7lViJR9DlU+87+SwCxUmBiIxi1rv9NesC/Foszry2eOlNUZTOgpHk1TTIS05SX3/GMcc/I5RYzKlH2+pZTGF0mA537+AX8LLQzJZNdG9CPu6HXPqKVthMBsmem4N400g3YjC7+D0g+EW/YPW4aIvxCFaL/Lr1zl02mDXT+NbjzIa7aGEY7Fxhog27/lCdV7ugWNKnd7m8qJjtZ6BkZ94RFQSt7A3+Laz+/gqWreUTkTHf788ZV9P1zieHmBBa1Gt9bxOOvZENS+zKRq2pU0rHBUvvJdnoaZHIDV4M9La6OG9UnXZqR6VOkOjbLogtlOvlSsPpX8xQsDeIA/RSM4drsXgRXAV0 X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8b3a2507-31ba-437a-ef65-08dbad39f34e 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:41.2472 (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: AM8P250MB0280 Subject: [FFmpeg-devel] [PATCH 08/20] avformat/matroskadec: Reindent after the previous commit 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: wberJWCf1seW Also fix a variable shadowing. Signed-off-by: Andreas Rheinhardt --- libavformat/matroskadec.c | 251 +++++++++++++++++++------------------- 1 file changed, 125 insertions(+), 126 deletions(-) diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c index e30dedf434..e9ad0c7e11 100644 --- a/libavformat/matroskadec.c +++ b/libavformat/matroskadec.c @@ -2516,79 +2516,78 @@ static int mka_parse_audio_codec(MatroskaTrack *track, AVCodecParameters *par, const MatroskaDemuxContext *matroska, AVFormatContext *s, int *extradata_offset) { - uint8_t extradata[FFMAX3(AAC_MAX_EXTRADATA_SIZE, - TTA_EXTRADATA_SIZE, - WAVPACK_EXTRADATA_SIZE)]; - int extradata_size = 0; // > 0 means that the extradata buffer is used - int ret; + uint8_t extradata[FFMAX3(AAC_MAX_EXTRADATA_SIZE, + TTA_EXTRADATA_SIZE, + WAVPACK_EXTRADATA_SIZE)]; + int extradata_size = 0; // > 0 means that the extradata buffer is used + int ret; - if (!strcmp(track->codec_id, "A_MS/ACM") && - track->codec_priv.size >= 14) { + if (!strcmp(track->codec_id, "A_MS/ACM") && + track->codec_priv.size >= 14) { FFIOContext b; - int ret; - ffio_init_context(&b, track->codec_priv.data, - track->codec_priv.size, - 0, NULL, NULL, NULL, NULL); - ret = ff_get_wav_header(s, &b.pub, par, - track->codec_priv.size, 0); - if (ret < 0) - return ret; - *extradata_offset = FFMIN(track->codec_priv.size, 18); - return 0; - } else if (!strcmp(track->codec_id, "A_QUICKTIME") - /* Normally 36, but allow noncompliant private data */ - && track->codec_priv.size >= 32) { - enum AVCodecID codec_id; - uint32_t fourcc; - uint16_t sample_size; - int ret = get_qt_codec(track, &fourcc, &codec_id); - if (ret < 0) - return ret; - sample_size = AV_RB16(track->codec_priv.data + 26); - if (fourcc == 0) { - if (sample_size == 8) { - fourcc = MKTAG('r','a','w',' '); - codec_id = ff_codec_get_id(ff_codec_movaudio_tags, fourcc); - } else if (sample_size == 16) { - fourcc = MKTAG('t','w','o','s'); - codec_id = ff_codec_get_id(ff_codec_movaudio_tags, fourcc); - } + ffio_init_context(&b, track->codec_priv.data, + track->codec_priv.size, + 0, NULL, NULL, NULL, NULL); + ret = ff_get_wav_header(s, &b.pub, par, + track->codec_priv.size, 0); + if (ret < 0) + return ret; + *extradata_offset = FFMIN(track->codec_priv.size, 18); + return 0; + } else if (!strcmp(track->codec_id, "A_QUICKTIME") && + /* Normally 36, but allow noncompliant private data */ + track->codec_priv.size >= 32) { + enum AVCodecID codec_id; + uint32_t fourcc; + uint16_t sample_size; + + ret = get_qt_codec(track, &fourcc, &codec_id); + if (ret < 0) + return ret; + sample_size = AV_RB16(track->codec_priv.data + 26); + if (fourcc == 0) { + if (sample_size == 8) { + fourcc = MKTAG('r','a','w',' '); + codec_id = ff_codec_get_id(ff_codec_movaudio_tags, fourcc); + } else if (sample_size == 16) { + fourcc = MKTAG('t','w','o','s'); + codec_id = ff_codec_get_id(ff_codec_movaudio_tags, fourcc); } - if ((fourcc == MKTAG('t','w','o','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; - return 0; } + if ((fourcc == MKTAG('t','w','o','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; + return 0; + } switch (par->codec_id) { case AV_CODEC_ID_PCM_S16BE: - switch (track->audio.bitdepth) { - case 8: - par->codec_id = AV_CODEC_ID_PCM_U8; - break; - case 24: - par->codec_id = AV_CODEC_ID_PCM_S24BE; - break; - case 32: - par->codec_id = AV_CODEC_ID_PCM_S32BE; - break; - } + switch (track->audio.bitdepth) { + case 8: + par->codec_id = AV_CODEC_ID_PCM_U8; + break; + case 24: + par->codec_id = AV_CODEC_ID_PCM_S24BE; + break; + case 32: + par->codec_id = AV_CODEC_ID_PCM_S32BE; + break; + } break; case AV_CODEC_ID_PCM_S16LE: - switch (track->audio.bitdepth) { - case 8: - par->codec_id = AV_CODEC_ID_PCM_U8; - break; - case 24: - par->codec_id = AV_CODEC_ID_PCM_S24LE; - break; - case 32: - par->codec_id = AV_CODEC_ID_PCM_S32LE; - break; - } + switch (track->audio.bitdepth) { + case 8: + par->codec_id = AV_CODEC_ID_PCM_U8; + break; + case 24: + par->codec_id = AV_CODEC_ID_PCM_S24LE; + break; + case 32: + par->codec_id = AV_CODEC_ID_PCM_S32LE; + break; + } break; case AV_CODEC_ID_PCM_F32LE: if (track->audio.bitdepth == 64) @@ -2628,84 +2627,84 @@ static int mka_parse_audio_codec(MatroskaTrack *track, AVCodecParameters *par, break; case AV_CODEC_ID_TTA: { - uint8_t *ptr; - if (track->audio.channels > UINT16_MAX || - track->audio.bitdepth > UINT16_MAX) { - av_log(matroska->ctx, AV_LOG_WARNING, - "Too large audio channel number %"PRIu64 - " or bitdepth %"PRIu64". Skipping track.\n", - track->audio.channels, track->audio.bitdepth); - if (matroska->ctx->error_recognition & AV_EF_EXPLODE) - return AVERROR_INVALIDDATA; - else - return SKIP_TRACK; - } - if (track->audio.out_samplerate < 0 || track->audio.out_samplerate > INT_MAX) + uint8_t *ptr; + if (track->audio.channels > UINT16_MAX || + track->audio.bitdepth > UINT16_MAX) { + av_log(matroska->ctx, AV_LOG_WARNING, + "Too large audio channel number %"PRIu64 + " or bitdepth %"PRIu64". Skipping track.\n", + track->audio.channels, track->audio.bitdepth); + if (matroska->ctx->error_recognition & AV_EF_EXPLODE) return AVERROR_INVALIDDATA; - extradata_size = TTA_EXTRADATA_SIZE; - ptr = extradata; - bytestream_put_be32(&ptr, AV_RB32("TTA1")); - bytestream_put_le16(&ptr, 1); - bytestream_put_le16(&ptr, track->audio.channels); - bytestream_put_le16(&ptr, track->audio.bitdepth); - bytestream_put_le32(&ptr, track->audio.out_samplerate); - bytestream_put_le32(&ptr, av_rescale(matroska->duration * matroska->time_scale, - track->audio.out_samplerate, - AV_TIME_BASE * 1000)); + else + return SKIP_TRACK; + } + if (track->audio.out_samplerate < 0 || track->audio.out_samplerate > INT_MAX) + return AVERROR_INVALIDDATA; + extradata_size = TTA_EXTRADATA_SIZE; + ptr = extradata; + bytestream_put_be32(&ptr, AV_RB32("TTA1")); + bytestream_put_le16(&ptr, 1); + bytestream_put_le16(&ptr, track->audio.channels); + bytestream_put_le16(&ptr, track->audio.bitdepth); + bytestream_put_le32(&ptr, track->audio.out_samplerate); + bytestream_put_le32(&ptr, av_rescale(matroska->duration * matroska->time_scale, + track->audio.out_samplerate, + AV_TIME_BASE * 1000)); break; } case AV_CODEC_ID_RA_144: - track->audio.out_samplerate = 8000; - track->audio.channels = 1; + track->audio.out_samplerate = 8000; + track->audio.channels = 1; break; case AV_CODEC_ID_RA_288: case AV_CODEC_ID_COOK: case AV_CODEC_ID_ATRAC3: case AV_CODEC_ID_SIPR: { - const uint8_t *ptr = track->codec_priv.data; - int flavor; + const uint8_t *ptr = track->codec_priv.data; + int flavor; if (!track->codec_priv.size) break; - if (track->codec_priv.size < 46) - return AVERROR_INVALIDDATA; - ptr += 22; - flavor = bytestream_get_be16(&ptr); - track->audio.coded_framesize = bytestream_get_be32(&ptr); - ptr += 12; - track->audio.sub_packet_h = bytestream_get_be16(&ptr); - track->audio.frame_size = bytestream_get_be16(&ptr); - track->audio.sub_packet_size = bytestream_get_be16(&ptr); - if (track->audio.coded_framesize <= 0 || - track->audio.sub_packet_h <= 0 || - track->audio.frame_size <= 0) - return AVERROR_INVALIDDATA; + if (track->codec_priv.size < 46) + return AVERROR_INVALIDDATA; + ptr += 22; + flavor = bytestream_get_be16(&ptr); + track->audio.coded_framesize = bytestream_get_be32(&ptr); + ptr += 12; + track->audio.sub_packet_h = bytestream_get_be16(&ptr); + track->audio.frame_size = bytestream_get_be16(&ptr); + track->audio.sub_packet_size = bytestream_get_be16(&ptr); + if (track->audio.coded_framesize <= 0 || + track->audio.sub_packet_h <= 0 || + track->audio.frame_size <= 0) + return AVERROR_INVALIDDATA; - if (par->codec_id == AV_CODEC_ID_RA_288) { - if (track->audio.sub_packet_h & 1 || 2 * track->audio.frame_size - != (int64_t)track->audio.sub_packet_h * track->audio.coded_framesize) - return AVERROR_INVALIDDATA; - par->block_align = track->audio.coded_framesize; - track->codec_priv.size = 0; - } else { - if (par->codec_id == AV_CODEC_ID_SIPR) { - static const int sipr_bit_rate[4] = { 6504, 8496, 5000, 16000 }; - if (flavor > 3) - return AVERROR_INVALIDDATA; - track->audio.sub_packet_size = ff_sipr_subpk_size[flavor]; - par->bit_rate = sipr_bit_rate[flavor]; - } else if (track->audio.sub_packet_size <= 0 || - track->audio.frame_size % track->audio.sub_packet_size) + if (par->codec_id == AV_CODEC_ID_RA_288) { + if (track->audio.sub_packet_h & 1 || 2 * track->audio.frame_size + != (int64_t)track->audio.sub_packet_h * track->audio.coded_framesize) + return AVERROR_INVALIDDATA; + par->block_align = track->audio.coded_framesize; + track->codec_priv.size = 0; + } else { + if (par->codec_id == AV_CODEC_ID_SIPR) { + static const int sipr_bit_rate[4] = { 6504, 8496, 5000, 16000 }; + if (flavor > 3) return AVERROR_INVALIDDATA; - par->block_align = track->audio.sub_packet_size; - *extradata_offset = 78; - } - track->audio.buf = av_malloc_array(track->audio.sub_packet_h, - track->audio.frame_size); - if (!track->audio.buf) - return AVERROR(ENOMEM); + track->audio.sub_packet_size = ff_sipr_subpk_size[flavor]; + par->bit_rate = sipr_bit_rate[flavor]; + } else if (track->audio.sub_packet_size <= 0 || + track->audio.frame_size % track->audio.sub_packet_size) + return AVERROR_INVALIDDATA; + par->block_align = track->audio.sub_packet_size; + *extradata_offset = 78; + } + track->audio.buf = av_malloc_array(track->audio.sub_packet_h, + track->audio.frame_size); + if (!track->audio.buf) + return AVERROR(ENOMEM); break; } case AV_CODEC_ID_FLAC: