From patchwork Fri Feb 24 18:28:42 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhao Zhili X-Patchwork-Id: 40511 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:5494:b0:bf:7b3a:fd32 with SMTP id i20csp1485506pzk; Fri, 24 Feb 2023 10:29:08 -0800 (PST) X-Google-Smtp-Source: AK7set/obEYXdWewcTBfH6JlB0rC+67XmhVO2Iw5SfgfpB933mTruk6/8HQDZqEUT7sjBha+nQOL X-Received: by 2002:a17:907:9870:b0:889:5686:486a with SMTP id ko16-20020a170907987000b008895686486amr23628636ejc.30.1677263348608; Fri, 24 Feb 2023 10:29:08 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1677263348; cv=none; d=google.com; s=arc-20160816; b=DVqxUexQ0SGFHqR2HkkGs8opk3cf7kq1L2RIY9Tt8DFvEG8vn4kETVF4AyshaITqX4 PEAgMEoqEvwipkT63MkvKreKKxyYjzia34itdEHIKBeCJFmeeqJ9pKzKMqJBRxX4wp// xoVc1teR8V1odRxLk1h+Ax/LmQbewsRE/XaTMqVyU1I54KlJDNnNcdDhfPYB/EnpxDSD y3XuBAI2KqfxNp6rN8xG5aQV36ZDCwHnSXoqZoPQ4U/Pfa1UXg/1zWBdXYWq9Fz/7qd6 9bd3k5vwjaiw5s61/zFg10i9kZJLZH246O32FDAAKyinqZWYvFRrXU3egPWXlSJ4PBQQ jNzw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to:date :to:from:message-id:dkim-signature:delivered-to; bh=8+U1AskL5+S1sbu8olgyl+BMcpyUoDfr4gmb041SWok=; b=TlA4gMbILI6HpJeXttsqRQtWoynXkTgZnDjqh/FzUoKF/hKBbmhx3AHrYM/1hN6zd3 bfNfTvCSPAPwwjWJqZGH3/AkCKacuULAtNvhLCtvPvMHrL0L6E90iZfhNXAqFNJIoV9Y M1r7o5RpcYyUybTitAxmHKSWzynkMT8M0+lA79LVWvECxgA4zew1uLEzHUXaXo4PgTAP zM2gH31Z4u+mtjj2tsgSlQfbyBThqud8+Vy09lW4f7l427E28fKrT6w56MqThsMrujG9 fOZ+p4OrdDn38vuN+KGQs2Lyc/RMg4ujRgETSojw0AZd/ZxbT3BHVmMvH7uiHnFkWqWf dvFw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=cD64eo16; 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=NONE dis=NONE) header.from=foxmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id 9-20020a170906018900b008ddf3c18304si15475681ejb.946.2023.02.24.10.29.07; Fri, 24 Feb 2023 10:29:08 -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; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=cD64eo16; 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=NONE dis=NONE) header.from=foxmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 441A368C12D; Fri, 24 Feb 2023 20:29:03 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from out162-62-58-211.mail.qq.com (out162-62-58-211.mail.qq.com [162.62.58.211]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 7AAC068C13E for ; Fri, 24 Feb 2023 20:28:56 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1677263333; bh=JjvQ4U2au6uTBeMawFf6n7fkgbj0jnqCFj829vFUJuU=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=cD64eo16WcSvtwWAAHEwctuTHUQ0WKCEpKlurl13F+/RjXK/zPk7HNPjr0bp7Blob e49xDqIeAFxmvpbHklPnae2WGD0fkuvlK0AuhJC1qDen5rJUKb78f0qg7pDpi754ns YLyakjRXzLm9V5AOKw4cP4c30Hs5lLBiR3e8rnaM= Received: from localhost.localdomain ([113.118.101.228]) by newxmesmtplogicsvrszb1-0.qq.com (NewEsmtp) with SMTP id 7333FEEC; Sat, 25 Feb 2023 02:28:51 +0800 X-QQ-mid: xmsmtpt1677263332ts6poxxbp Message-ID: X-QQ-XMAILINFO: NvH2zBBgt3uT+E41oYQPEoGwEU84vNc63gIvJRlfcl07IlJF2zPeWDqPp1x5WN XKP1XZADYgmfi44OWvqqQOsA0EiHAJlAr3RoaKdTG0mmA7mvHRp1qRzblnWMml6+/X5MSZfTajie t5m9pdXIlrZ1PimTvvvJBOZHcagv/oZsp5zR7cdvavwKNK+cS+kHHzMbDKpbqZjhXI2ipcqVnnbD +DcqD10vZxd04OjxrYgTzPO0L9B9RQprwlDWEHsTjppblS0LkjpcvQFu/TPVwKIpOcm3l1mM0OLL X0y8QxDS4xl0S/K3tmRFu4gh2TbKSiqJFkRKsTESO5Z9R2qr53oUac3uRZ9/ag5wc0XLK6rBLUeO PcJvVh8S2mo6f4aXas3IGrRyNa6Cq6/aY02lOJ0npaJ7vs+dfEWxFqvn+yASxXRwpDdgVlKUlhKx 7+O8Nf90l8G1g3iXcBC5sBUYupUXLQpYXemUaspn7/4eYaai8ft7UhCdfB2fmV5l39DTcKY9M5VG eUsdwhuwjUGsBpUqNljx4ypgbb/iC9CUqWJ93YAHGj7CM87ArCBTS//ShMOEsY2uHksBJWie5RMG 41nP0solo08CH6ZcTXVuBuynYmDyg7biaMrwNvaqE5b7kFrg7nSQeGfCZHLl90thjMqkrPbpXedn Snaa2jPJvvvFuMqMC2bHDQWTrTgUVJCu0Ssp5wQc1u1dTOC3JjvnEi6DLlGukH3kVYcnuL9Lb9/x 2U+0q6JxLfc42VVu6lMV5/MVXYUBLTjSlCfv00hDliWrjtxbnu4Iz+fWEhYxAHwNcdWEFamJIbb8 RmDhFuysNJ5+uzwzMWv841Q3022FmXs6Ks9w+mmFPy8fpcAQnNE0ncYe0TMMO+a855E4Md+KDaK4 Ua2ZxQZScnnPZ8i6hAZmoznaiXN8Vv5y7tAqQW669FyFPf9xl0hjW/uBc8v/Hb29QBa4VOzsa5DT CLTIXJzuKrymeMQPwuXNAhC2LqfrD1 From: Zhao Zhili To: ffmpeg-devel@ffmpeg.org Date: Sat, 25 Feb 2023 02:28:42 +0800 X-OQ-MSGID: <20230224182849.426345-2-quinkblack@foxmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230224182849.426345-1-quinkblack@foxmail.com> References: <20230224182849.426345-1-quinkblack@foxmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 1/8] avformat/movenc: add PCM in mp4 support 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: Zhao Zhili Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: MSJdnWVv+Hb5 From: Zhao Zhili It's defined by ISO/IEC 23003-5. Fixes ticket #10185 Signed-off-by: Zhao Zhili --- libavformat/movenc.c | 60 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 59 insertions(+), 1 deletion(-) diff --git a/libavformat/movenc.c b/libavformat/movenc.c index c4fcb5f8b1..3315057b88 100644 --- a/libavformat/movenc.c +++ b/libavformat/movenc.c @@ -1179,6 +1179,47 @@ static int mov_write_btrt_tag(AVIOContext *pb, MOVTrack *track) return update_size(pb, pos); } +static int is_mp4_pcm_codec(enum AVCodecID codec) +{ + switch (codec) { + case AV_CODEC_ID_PCM_S16BE: + case AV_CODEC_ID_PCM_S16LE: + case AV_CODEC_ID_PCM_S24BE: + case AV_CODEC_ID_PCM_S24LE: + case AV_CODEC_ID_PCM_S32BE: + case AV_CODEC_ID_PCM_S32LE: + + case AV_CODEC_ID_PCM_F32BE: + case AV_CODEC_ID_PCM_F32LE: + case AV_CODEC_ID_PCM_F64BE: + case AV_CODEC_ID_PCM_F64LE: + return 1; + default: + return 0; + } +} + +static int mov_write_pcmc_tag(AVFormatContext *s, AVIOContext *pb, MOVTrack *track) +{ + int64_t pos = avio_tell(pb); + int format_flags; + + avio_wb32(pb, 0); /* size */ + ffio_wfourcc(pb, "pcmC"); + avio_wb32(pb, 0); /* version & flags */ + + /* 0x01: indicates little-endian format */ + format_flags = (track->par->codec_id == AV_CODEC_ID_PCM_F32LE || + track->par->codec_id == AV_CODEC_ID_PCM_F64LE || + track->par->codec_id == AV_CODEC_ID_PCM_S16LE || + track->par->codec_id == AV_CODEC_ID_PCM_S24LE || + track->par->codec_id == AV_CODEC_ID_PCM_S32LE); + avio_w8(pb, format_flags); + avio_w8(pb, track->par->bits_per_raw_sample); + + return update_size(pb, pos); +} + static int mov_write_audio_tag(AVFormatContext *s, AVIOContext *pb, MOVMuxContext *mov, MOVTrack *track) { int64_t pos = avio_tell(pb); @@ -1243,7 +1284,8 @@ static int mov_write_audio_tag(AVFormatContext *s, AVIOContext *pb, MOVMuxContex } else { /* reserved for mp4/3gp */ avio_wb16(pb, track->par->ch_layout.nb_channels); if (track->par->codec_id == AV_CODEC_ID_FLAC || - track->par->codec_id == AV_CODEC_ID_ALAC) { + track->par->codec_id == AV_CODEC_ID_ALAC || + is_mp4_pcm_codec(track->par->codec_id)) { avio_wb16(pb, track->par->bits_per_raw_sample); } else { avio_wb16(pb, 16); @@ -1307,6 +1349,8 @@ static int mov_write_audio_tag(AVFormatContext *s, AVIOContext *pb, MOVMuxContex ret = mov_write_dmlp_tag(s, pb, track); else if (track->vos_len > 0) ret = mov_write_glbl_tag(pb, track); + else if (track->mode == MODE_MP4 && is_mp4_pcm_codec(track->par->codec_id)) + ret = mov_write_pcmc_tag(s, pb, track); if (ret < 0) return ret; @@ -7744,6 +7788,20 @@ static const AVCodecTag codec_mp4_tags[] = { { AV_CODEC_ID_MPEGH_3D_AUDIO, MKTAG('m', 'h', 'm', '1') }, { AV_CODEC_ID_TTML, MOV_MP4_TTML_TAG }, { AV_CODEC_ID_TTML, MOV_ISMV_TTML_TAG }, + + /* ISO/IEC 23003-5 integer formats */ + { AV_CODEC_ID_PCM_S16BE, MKTAG('i', 'p', 'c', 'm') }, + { AV_CODEC_ID_PCM_S16LE, MKTAG('i', 'p', 'c', 'm') }, + { AV_CODEC_ID_PCM_S24BE, MKTAG('i', 'p', 'c', 'm') }, + { AV_CODEC_ID_PCM_S24LE, MKTAG('i', 'p', 'c', 'm') }, + { AV_CODEC_ID_PCM_S32BE, MKTAG('i', 'p', 'c', 'm') }, + { AV_CODEC_ID_PCM_S32LE, MKTAG('i', 'p', 'c', 'm') }, + /* ISO/IEC 23003-5 floating-point formats */ + { AV_CODEC_ID_PCM_F32BE, MKTAG('f', 'p', 'c', 'm') }, + { AV_CODEC_ID_PCM_F32LE, MKTAG('f', 'p', 'c', 'm') }, + { AV_CODEC_ID_PCM_F64BE, MKTAG('f', 'p', 'c', 'm') }, + { AV_CODEC_ID_PCM_F64LE, MKTAG('f', 'p', 'c', 'm') }, + { AV_CODEC_ID_NONE, 0 }, }; #if CONFIG_MP4_MUXER || CONFIG_PSP_MUXER From patchwork Fri Feb 24 18:28:43 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Zhao Zhili X-Patchwork-Id: 40512 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:5494:b0:bf:7b3a:fd32 with SMTP id i20csp1485652pzk; Fri, 24 Feb 2023 10:29:20 -0800 (PST) X-Google-Smtp-Source: AK7set805bQqeDUr4YU1/hKQXk9i89fzQjHXpPTtU4JmZf37Kw8Ri+2Rc9ZFl1ttNppR5DOC5R2l X-Received: by 2002:a17:907:987b:b0:87b:1be:a8c2 with SMTP id ko27-20020a170907987b00b0087b01bea8c2mr24401547ejc.73.1677263360680; Fri, 24 Feb 2023 10:29:20 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1677263360; cv=none; d=google.com; s=arc-20160816; b=WzYO818Y99+MVTYBoCJubFbLa5Qqc9CifsnTAuFpaVWw62xNKRIcyBDaRcmHZOza8o CLAhct45vIYOmGMjZzTNBFmMCXaQAG8vdObIIRCcDy6TjdgkUpL3nTKa0uBG7/0WkLiE eMinmqjkjz+tLa2VL2tYbNcSl3PYYE2pmzinx/e6IwdEeL1ujAGxJh6ICxgheGzQQRXg 4eNUhDGpHWYbz0/lLeSSVYV2lzR91USk1PkxvEeZVG0DltffgX4zWfiSQ7QiBiCdv+6k fd+fFqyLZxNR34vheAzlU0jZAD2sjLmK7pkaxoMNL0sdgBv1n5WdKDRLX8yvHqE8/9pJ nVwg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to:date :to:from:message-id:dkim-signature:delivered-to; bh=EGemYTCEpGhlRCym5rqf3Bt4S15sc9rSTeJWAi99SsY=; b=lnc/PEY3VzmEzyFBcf2YmniBowSbIaIiSfHnVw3HLIPhwMgviQk8Fr1+BLfms0h8S2 /N2VBCJdJwitpk2DUNTVVvU50CR2HLgCESb5M8YVcN9MYmf9GQVZyeFYZXPyF9UrP3RP 4UDtPIXN+gcnR2fktgj6T3FPcnj3TE26z/NR1AMEyiZiqFr9uXdgDL4vNpIgcmMob4Ts VS6CnVr7pNBtwJnqexLy2mtd2cTCjj2NjXZl/wzB3ZMXBMYuVfmQ6ifGRtKk+ZuaO/Rg U2FeOxlc3wAuAz4OkhkhaV4mrkFJgB0vnGJJPhFOQ7XZ5DUKNYOoW9o/BDj2be84PSTF BLXg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=kVi3RQtO; 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=NONE dis=NONE) header.from=foxmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id u2-20020aa7db82000000b0049f1f3402f4si23767edt.87.2023.02.24.10.29.19; Fri, 24 Feb 2023 10:29:20 -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; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=kVi3RQtO; 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=NONE dis=NONE) header.from=foxmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 912CB68C17A; Fri, 24 Feb 2023 20:29:04 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from out162-62-58-211.mail.qq.com (out162-62-58-211.mail.qq.com [162.62.58.211]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 7618F68BEDB for ; Fri, 24 Feb 2023 20:28:56 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1677263333; bh=ylnTIz+1xIGBcw41oG8ZtOz20ASPBdJOu700L09EsJI=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=kVi3RQtOFIUIcd+MYZxTA+5p0lWaq7Qz+lf5smQpAq2A7UWWuTTBSGZqda5C2eAUa BPWQmkcU6wMJ3S1zFFa2P3eTwg8WqZI+Ic2/XJQYtKiuRgLUXGxd6yWFT/m1632lp7 AkHHflqSw6cR2TjzcGcMIqAKlyqOkhDiv+wUsHq4= Received: from localhost.localdomain ([113.118.101.228]) by newxmesmtplogicsvrszb1-0.qq.com (NewEsmtp) with SMTP id 7333FEEC; Sat, 25 Feb 2023 02:28:51 +0800 X-QQ-mid: xmsmtpt1677263332t1x9y8lv4 Message-ID: X-QQ-XMAILINFO: N4CzT1PKe+qFiOYd9bN4cxSTYAzm5ILgScGImq7mPwLuCzTTsij6yaXMZf+MAx c2iDUIJ0UCFzsBqHX3l6wG6CIpF87kjwA8FYStMwT1znNuZUxSOCmzHc8HpfeZNWIvP32ZQxkzbl PE5/Loh0CYt0LsYYMtmCTVDLhzWSr+mtBo/tDSocgl40xtQn+SZEid/7idmqd3B4Q4d26MBeECBo hYXGMOsAb/fuCuxHTRg/FzjOyylR9+NYXf5VxzrktCjRwuI4vBBc/+ufh4tG5Giep1603IPh/UUh Ovg0fotOJHiu30zZUgBNe13DDZcbGfZtGGOSbXF5F5LhFYSKXPY6GmyxTM0j5MCqIL+AJe9tCt+d TYFLf8h8PYPTR2i40GD28NPjllzXzi7NrKnBYFjDi54ZI16iGeBWnl0jiyRpyXrCtSFmwp+3c6W2 HtbAR1vrUOPYpb3YIj9IsEr0vq+QI0PTtYTbtsLJniRYEA2MDS5oenhIMJkeURhqlw1BQ9hOlPOx nRuhb2GAH94OQFZMZepfPV6PsSoPMWiWQzB2n4LIBraaCiMhT4/eezorAIG1m1l6bWLwYpGlPkIg 0QBYbIbYx0nnOt3lABbvA8i5+FlGSSHaOqogIlGSBMhMm0ixa12TJA7R/tc1r4o3zrx/abYqJduf kzgxAraCEssKlk1maVNdu/D62+qRXciHBI2Mh/8ua3jwYcoEjHfLFn2JJUrKBJcMxfpgqpGB+vyk dqjEsc9QOskq91vXQ4M0eIhvwars8TcqpKk3L+dQwgA5+8AjTexzHukTtGGY1TYx7epnYp1lyxeT PK+fBxxR+qjClOMl0q0YObIxD+8dWbUUdrDET/7LYEk0skCBt9xPAdMo/be0vhnG2b2dnKS70OAF P4++VSuTCD7BwaWq0EFt0LWLTn/apOx5MNAU7dlLFS744KnhBBCPgexSertKmf2SgatjUTfY0tSG XEp7RlrD/DFF3z3SvWbdQZTbsaHZg5 From: Zhao Zhili To: ffmpeg-devel@ffmpeg.org Date: Sat, 25 Feb 2023 02:28:43 +0800 X-OQ-MSGID: <20230224182849.426345-3-quinkblack@foxmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230224182849.426345-1-quinkblack@foxmail.com> References: <20230224182849.426345-1-quinkblack@foxmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 2/8] avformat/mov: check that pcmC box is of the expected type 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: =?utf-8?q?Jan_Ekstr=C3=B6m?= Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: FX/cEQx60Sjq From: Jan Ekström As per 23003-5:2020 this box is defined as PCMConfig extends FullBox(‘pcmC’, version = 0, 0), which means that version is 0 and flags should be zero. --- libavformat/mov.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/libavformat/mov.c b/libavformat/mov.c index 8af564ed61..cdd44a9e44 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -1590,14 +1590,23 @@ static int mov_read_enda(MOVContext *c, AVIOContext *pb, MOVAtom atom) static int mov_read_pcmc(MOVContext *c, AVIOContext *pb, MOVAtom atom) { int format_flags; + int version, flags; if (atom.size < 6) { av_log(c->fc, AV_LOG_ERROR, "Empty pcmC box\n"); return AVERROR_INVALIDDATA; } - avio_r8(pb); // version - avio_rb24(pb); // flags + version = avio_r8(pb); + flags = avio_rb24(pb); + + if (version != 0 || flags != 0) { + av_log(c->fc, AV_LOG_ERROR, + "Unsupported 'pcmC' box with version %d, flags: %x", + version, flags); + return AVERROR_INVALIDDATA; + } + format_flags = avio_r8(pb); if (format_flags == 1) // indicates little-endian format. If not present, big-endian format is used set_last_stream_little_endian(c->fc); From patchwork Fri Feb 24 18:28:44 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Zhao Zhili X-Patchwork-Id: 40513 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:5494:b0:bf:7b3a:fd32 with SMTP id i20csp1485818pzk; Fri, 24 Feb 2023 10:29:39 -0800 (PST) X-Google-Smtp-Source: AK7set+7QsfRKn4pdBdIAn09bvnpUjm2U39iP4Z4K5IVdV89GE9aswcSTHDWPFsY+W4rwS9DP96g X-Received: by 2002:a17:906:f0ca:b0:8b2:37b5:cc4 with SMTP id dk10-20020a170906f0ca00b008b237b50cc4mr28674353ejb.7.1677263379416; Fri, 24 Feb 2023 10:29:39 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1677263379; cv=none; d=google.com; s=arc-20160816; b=aKCrzdlNZ4PASSCtMQ7C/gxfUyiNRjaLhjMt/9cNxyZRHPY/41fyurFJBRH47HcUan 5T7cnXN4iwf4sykSVPpffwmM1QgqokssSye8kBIqF0p6FQJrlWxI+oRca0YWL3arSUa+ 8+DW4GfqENPGFV9k5E0ksx9cg/ZYUzgSZy407PLZndTz3izV28GREJ9IYvHQjYLi4inh zt6Lpuvl9sI0LCpOLdYoewbFUOuVq1A860xH0DQxyl56T9uBiwU5baAKH3VQ3vRietRD 64lW7rY5SIKQET2P6K0goITC+56Y3JRKFSi0+/AbGeIbwZJhTmupnZ2ZY+DDWPGBcpE1 L/gA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to:date :to:from:message-id:dkim-signature:delivered-to; bh=S7ztw7QI4HWC5fJddZEChQPGnTxxA8HOTm2KnZU0MaU=; b=bB81Cnig3cIOlTaQWiSMK3SaOJ0CByRIqls/HjjhFoWW9qy+f6DGof2mLbtabJt3h7 mm2AwwpuOKl/0Sexz3TTW4a94rlNuoFXBb75a/u0nN1y5Uqsez5r2SJuxI5C/CfwWyOK 3TL6JGUma7oOT8qnNNIS2aUEFGALD17lSv+Aurs+2z268IajG/SnK5+tZYnFb/lL4pAb pjQdpdbP0Bu/EQvSGdZQsbStN+T23YH6DJcaXrUNubfnagH6q+feTakHw8giTM/a/Du1 mN9NYOaBLSsu0SZF/VVbn3PI7AI3eeFRUfJL6L3VNGG1uz5OLEB9t1Kv0zknUDBSOCms kuBQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b="hT0F/kUl"; 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=NONE dis=NONE) header.from=foxmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id mx14-20020a1709065a0e00b008cd525eac7bsi18230909ejc.715.2023.02.24.10.29.39; Fri, 24 Feb 2023 10:29:39 -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; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b="hT0F/kUl"; 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=NONE dis=NONE) header.from=foxmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 9960A68C106; Fri, 24 Feb 2023 20:29:06 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from out162-62-57-49.mail.qq.com (out162-62-57-49.mail.qq.com [162.62.57.49]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 0380D68C140 for ; Fri, 24 Feb 2023 20:28:56 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1677263334; bh=m2GllKw90XSIk72I9ceT6/ZOynQ2G9hY9ogh+BQNgbs=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=hT0F/kUl9Ro2Zjefi1Wdq5CQCEzt4v7ar1vB83AKqT/4L8qBxbqldMgy0FWAoWYE1 1UoBfDdf1pTgzk9nCzmvdTFKDRDOhHjCtqsgtGvk3RyuNE5nUqPGuKB2o8DbMiqiF9 oBHPJ3H+in9EGjvb55rQMivfkzifAmWYme+q+yjo= Received: from localhost.localdomain ([113.118.101.228]) by newxmesmtplogicsvrszb1-0.qq.com (NewEsmtp) with SMTP id 7333FEEC; Sat, 25 Feb 2023 02:28:51 +0800 X-QQ-mid: xmsmtpt1677263333tvw34vahv Message-ID: X-QQ-XMAILINFO: MW5hkHoBpWXybi8T3eqOYhXn9i45vRm7fuSxQtgh9oQ2n2dY8Sz6eHJxbULwwO P0rHd0k4Bt9VPbVthJGERnAMC7At2DCaoOxL+bG1162tN3J1Dy6aZOZy5lRVCAdqrdgPo/3wtoPB 27wTr41RmQ0RzRatXmLPMeD6pO8jhkATA8xIS3cZEoLPcRiQdFHSzJLZCbjXnPyP8+kqMEXJJI3g 6JSi6+yZPsyQhBbq+foEcuSxczhBxiTDLDvex9dlU11BvdjGdgNHM616Oq+ISLXh7l/hnBUp2Ht6 hfhVBp2cfn4ZrTSiW5+T179rjbINNiLcZvOGvpXQYh7v9swGAc67DAVdKqqdGrIg4jKwd/8Dpd8w Cw6jXzHFBGmPGfNatMF6jKHbr3f+famG2Ql8zyBpjIngGObNPel4qFLcek3wKMV9+ZRx76/ohueO OvcK5y6Vkog3bZvjEK8mTgawg96Ru9n2UhPjfNlphxxCuCdy2OAm6uYRLuh/f2SWQxQ2HAlhpDeq a069PUrqa/SQHjaO106MBgWBQrPpx/q2/UTJMdeh7bdOo1Ubsa71L4er7ZpCwLqeR9rRW4NSJLBN YXAQ/9Qyi8Mokt2fejw+T/6OGNL0tx7uH+hAa+J2axPie42gxzoBZQJMe+OdgIhkx5GomPNLc+Ql Y6kbNxSERQUhIOKpiYC5kITDR/nvJaqwkXUahvBd9zHPl1+u6jxvv0D7J6I96zrGl5KrWCeJ9RvH sJsKUNgRF4wYZXf6bl9fsDpM3xOpa5UvrihPbeScP9FoQpRP8aSo6ZWhcW5lWfiLCdK6J8V5mLab xgPzLfwpP9vQ3Ns/8P0/Z2D3jnJTUrgbH/SqdNGqLOG2IRqkIqAG1KyG2T+qI4OwQ4AkEpSEtBka dgSv3TFpEukI8SseZILHxmO3EE8VZDF2IEmBFfY+I1X81W4+293wEdFb0xgJudFOy6Rm4+pHcMLU cRhwreo75f0QPivNqSz9ZEe5tvlpoUowPIYVHNswQ= From: Zhao Zhili To: ffmpeg-devel@ffmpeg.org Date: Sat, 25 Feb 2023 02:28:44 +0800 X-OQ-MSGID: <20230224182849.426345-4-quinkblack@foxmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230224182849.426345-1-quinkblack@foxmail.com> References: <20230224182849.426345-1-quinkblack@foxmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 3/8] avformat/mov: base the endianness on just the LSB 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: =?utf-8?q?Jan_Ekstr=C3=B6m?= Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 7ZaxtBakhClL From: Jan Ekström As per 23003-5:2020, the rest of the bits are reserved, and thus in the future they may be utilized for something else. Quote: format_flags is a field of flags that modify the default PCM sample format. Undefined flags are reserved and shall be zero. The following flag is defined: 0x01 indicates little-endian format. If not present, big-endian format is used. --- libavformat/mov.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libavformat/mov.c b/libavformat/mov.c index cdd44a9e44..a9911c0f79 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -1608,7 +1608,7 @@ static int mov_read_pcmc(MOVContext *c, AVIOContext *pb, MOVAtom atom) } format_flags = avio_r8(pb); - if (format_flags == 1) // indicates little-endian format. If not present, big-endian format is used + if (format_flags & 1) // indicates little-endian format. If not present, big-endian format is used set_last_stream_little_endian(c->fc); return 0; From patchwork Fri Feb 24 18:28:45 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhao Zhili X-Patchwork-Id: 40514 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:5494:b0:bf:7b3a:fd32 with SMTP id i20csp1485897pzk; Fri, 24 Feb 2023 10:29:48 -0800 (PST) X-Google-Smtp-Source: AK7set92H5sfkWJgtx64bZC4w81hW0QseZ+f+qIEwjBh9NLnx1cvTSztZCXqkb9Nbu3+OxXjKGEE X-Received: by 2002:a17:906:aac6:b0:8b2:fa6d:45d5 with SMTP id kt6-20020a170906aac600b008b2fa6d45d5mr27305179ejb.71.1677263388346; Fri, 24 Feb 2023 10:29:48 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1677263388; cv=none; d=google.com; s=arc-20160816; b=VgH/f7h4mseiBFpzC7XNG8ZCHdBW1P7WEsQmCIMgNv5Au3tOL9JyKuvLDjZ27ReopA 4Z+j6RHjAyhDtac/mAy84hw9axYo00D/DSRiQE9abX7r5iGGWg6ifEXtz9CeXJ+AscZY TqscsfmZwwayA4SXdXx+DY9zi+xTKiTzno1JHwFIxiXXW67Hflv9TyBT7oXyrbvxKjn0 QSopT682zqzTlKIe++YkhFDuoMehnJvObO1PQXMMiBeoo2VgFK+zj+4eZ69pQZr6gD2/ Zq4slA1gFlQO4Uv8cgubqwBrsN1e5YmqlIuWrQ5B5bxipKXDo8n8m2REnnupjYpxvG2u XqGw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to:date :to:from:message-id:dkim-signature:delivered-to; bh=X0yRkovGVe1Kzr0eXbMEwkxEIIO2RckVA/mbpkEkRmk=; b=PprvWhvrve4f70OlDTg5v4+Y2CPUZVunRqj/fDWxwErzv5YSGdV7EkZRtjrmlh3xXA et0kbZ9jSV17E2+sJijPYzO6z6TehI8KCqOvvZ/BCz4cTRDIDD7rzrYzIVrXM+zHypR3 LJw0zeTg11kGIeTCUyyz+tIL3BOdqa4SfESruiOp2bc4WhzXMM7pKu742iOw9s30sTeK fHPS+5b3aNvb+yF0rHGwRKO+JOtYbFtcQUbXSqOpXabFcACCHcsYKwOSHrRU6p4PIflV Sr70d9IlmRGqDFiQDAo5sP4k0+MOe//OHkHEvRHWznzCXqZv88BDtnshKiDSbeZSvZ9t IS3A== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b="W5pECRj/"; 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=NONE dis=NONE) header.from=foxmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id um42-20020a170907cb2a00b008d0dbf15be3si16729612ejc.676.2023.02.24.10.29.48; Fri, 24 Feb 2023 10:29:48 -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; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b="W5pECRj/"; 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=NONE dis=NONE) header.from=foxmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id B425968C17F; Fri, 24 Feb 2023 20:29:07 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from out162-62-58-216.mail.qq.com (out162-62-58-216.mail.qq.com [162.62.58.216]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 8994268C12D for ; Fri, 24 Feb 2023 20:28:57 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1677263334; bh=u1LJKzURC6Lagk+HAOpJwaYzmlqBKyLNmUYxVMqspq8=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=W5pECRj/5WOPH6859q4tJEYPyxYUobOQS+hroc8RhdNaNN0JJ4aL+AjAPh6QqQmhU n7kkn5T2aWk+SMNuafpLEw1BYvyidVtQtUd1p4GZfTrvsXky5V99RWOKzxHKpA1ogK lWezvPfpbidY6QsiAvNnTbf+bskHOCKqmxFaKv5M= Received: from localhost.localdomain ([113.118.101.228]) by newxmesmtplogicsvrszb1-0.qq.com (NewEsmtp) with SMTP id 7333FEEC; Sat, 25 Feb 2023 02:28:51 +0800 X-QQ-mid: xmsmtpt1677263333tj5pyh4ce Message-ID: X-QQ-XMAILINFO: MmpliBmRb3iC70PQSPk0D2/i8LglwcwItyDVb8pBqp+LX9NRVZadqJfK3UacA2 pnR+PqwmV/HoJO8lKudSkMnMsxknUAbAUHSlPJTk2eXb+T1XD+iBkhbmCfMBruY920yI4GEw1nLD MQJM3WeepSBO2JSJ32xmDPJMbI73+xd6N1LtNKe+Sfe09K0L5JyTsdrzFtXqNEW/i76ybWNnV0Cb bbejO0IG21c5ty0XILI8isQ6gBRkFVZ5G8LtA48le0bv/DjmENKWsfzmbj4WkG9bKyJWTi2sRohT S8rR89/nSatUaY06yMAtOKZkmIp2B4r8nN0Y7PKVkPydUnxDcHuRR5pTYphoRKWcJ4mr69VMMr/N ZVl56mdXXkzcZCL0iNVEKZkvJX7m+owOEwos5hyOkRCH8+Ic3Z3nBuEbgdEaTdZBzIdtgCmdH7Uk AsZXJJDIjWNm7RFw/VVU2ajuisMHDpIUlivFwFyh4CNt6RR5SutJmXya14bC1VqrVmpXhOvL9PTt bH91vb0zk5ITUmzUH2jZF34P81g+6kQSCPbwr9wvpTO5oI1SR2Xx1cRY0w6Zffokjy0cjroDbt65 uf9XseE/suIUXjGLysBuIiKJCimPkA8td06ra/JLZwhChqu8oKfuZ/r0PDqNtff4cZZtIworOGHl lsh/HH9NCVYJkXPFDY2EQ5n5xbws6kntPAFHVZx53yf91zUvWSjZGEgKkiQ/Hb20ksm34+r+0DGj GK2Gx1+iXE794Wx6/KHm151gaYKCnubjjGEOlPfQd1VnQWYRmuixIyONQdeURn1W8lWLBF6RjUlC GbP/DoW+E6nvDKE8ErVMBrj/+Xvtve9A/WSVWN3ZmSknJLK4w467Nobse92tLwHZcc7qfymXp1jc ocS+RH4ivFii5LuGPF1LflY2F6vzTqZCy4kD+O6PRFReUsu+LzR/riVEBUltL2n9mMwbOCwwhS+Z iiKCyRLZmRWiurBQoaGu1eF8wiT8RHNvh3efkcbttgi5yTkI2+daLbWkNIgwCOqoGtAM086rU= From: Zhao Zhili To: ffmpeg-devel@ffmpeg.org Date: Sat, 25 Feb 2023 02:28:45 +0800 X-OQ-MSGID: <20230224182849.426345-5-quinkblack@foxmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230224182849.426345-1-quinkblack@foxmail.com> References: <20230224182849.426345-1-quinkblack@foxmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 4/8] avformat/mov: fix ISO/IEC 23003-5 support 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: Zhao Zhili Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: hF6HFDPAW43O From: Zhao Zhili Missing floating-point formats support. Signed-off-by: Zhao Zhili --- libavformat/mov.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/libavformat/mov.c b/libavformat/mov.c index a9911c0f79..e75cf2f4b7 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -1591,6 +1591,10 @@ static int mov_read_pcmc(MOVContext *c, AVIOContext *pb, MOVAtom atom) { int format_flags; int version, flags; + int pcm_sample_size; + AVFormatContext *fc = c->fc; + AVStream *st; + MOVStreamContext *sc; if (atom.size < 6) { av_log(c->fc, AV_LOG_ERROR, "Empty pcmC box\n"); @@ -1608,6 +1612,49 @@ static int mov_read_pcmc(MOVContext *c, AVIOContext *pb, MOVAtom atom) } format_flags = avio_r8(pb); + pcm_sample_size = avio_r8(pb); + + if (fc->nb_streams < 1) + return AVERROR_INVALIDDATA; + + st = fc->streams[fc->nb_streams - 1]; + sc = st->priv_data; + + if (sc->format == MKTAG('f', 'p', 'c', 'm')) { + switch (pcm_sample_size) { + case 32: + st->codecpar->codec_id = AV_CODEC_ID_PCM_F32BE; + break; + case 64: + st->codecpar->codec_id = AV_CODEC_ID_PCM_F64BE; + break; + default: + av_log(fc, AV_LOG_ERROR, "invalid pcm_sample_size %d for 'fpcm'\n", + pcm_sample_size); + return AVERROR_INVALIDDATA; + } + } else if (sc->format == MKTAG('i', 'p', 'c', 'm')) { + switch (pcm_sample_size) { + case 16: + st->codecpar->codec_id = AV_CODEC_ID_PCM_S16BE; + break; + case 24: + st->codecpar->codec_id = AV_CODEC_ID_PCM_S24BE; + break; + case 32: + st->codecpar->codec_id = AV_CODEC_ID_PCM_S32BE; + break; + default: + av_log(fc, AV_LOG_ERROR, "invalid pcm_sample_size %d for 'ipcm'\n", + pcm_sample_size); + return AVERROR_INVALIDDATA; + } + } else { + av_log(fc, AV_LOG_ERROR, "'pcmC' with invalid sample entry '%s'\n", + av_fourcc2str(sc->format)); + return AVERROR_INVALIDDATA; + } + if (format_flags & 1) // indicates little-endian format. If not present, big-endian format is used set_last_stream_little_endian(c->fc); From patchwork Fri Feb 24 18:28:46 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhao Zhili X-Patchwork-Id: 40515 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:5494:b0:bf:7b3a:fd32 with SMTP id i20csp1485980pzk; Fri, 24 Feb 2023 10:29:57 -0800 (PST) X-Google-Smtp-Source: AK7set/vSppmWVC9tkuYtn8IPsklDRkWaLnvgkMjEUU6CPauwEz84WzWF0E5GgIsWzlCVr5NU/qA X-Received: by 2002:a17:907:7d90:b0:8e9:9e13:9290 with SMTP id oz16-20020a1709077d9000b008e99e139290mr11822404ejc.27.1677263397044; Fri, 24 Feb 2023 10:29:57 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1677263397; cv=none; d=google.com; s=arc-20160816; b=nGuVrPQLhxaQNCqy8gfSkBFYsg+7O+I+H681hC5TpP8tsIN20XpVcnUM1dC3NPW3pm 84MBgdNEWG6+Qqi1O+YIflijyj7Siw5R7w0W+yuvCp7C24M8OmoZWSNz6320Hl+GlcqV dg4qrsGWr8l2UcHw/eS7Ze8VKBG1ULEu7NOyfnVbaft1G17Y9HGa5OI8htjtXYfsmKAE dvsld2gExsEsHOvbvzf0bl+Sgimp8H6VKNVVa9naRtzc2X1BgeXdfJp33vYcJtbFEaen /bUoKObOgLVpzV+l5gl7ZrOlDvlUk3xsT6odqrDmYF6+BUKW87YKz0CgGe3dO9gLeSiA mxjg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to:date :to:from:message-id:dkim-signature:delivered-to; bh=ut+DhglKZgv4AN8zhr1s0JXkm1ffrurupOVfrDW/Kbs=; b=hx63wJw05+1pkNqRDvTuRM1pcOIAuMKIQJ0fmrhBOzseh6RvSxN7Fi5sjFCISg6W+i 3NwMiwFRg022W72cU89DDpn00yjeBkwo+6UofShNkaJHhtOq5FjDZV1AaHg1XoNSNa1K mHYr5MN3AVM180abAuQrR1/vycIQY9RiuNQTX/dh71mCLLzWsSNOJcZ1LpurFE6RS/iI g0qFBED/tHRWgaTwhEnh0rVrrEIic5yPBiBXSvSw4x7PV8kL/U1zFf6IDjAEQPBCd7BK Ba2scVkxmVbh1t1L6zkzxwnm5v9OOwiV0vpN4Ubqz0uiSKKwMCwAVp4tgb6zNNkX1TTy WTbg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=Ruq1yriW; 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=NONE dis=NONE) header.from=foxmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id fq5-20020a1709069d8500b008e32f16a2e5si10900617ejc.950.2023.02.24.10.29.56; Fri, 24 Feb 2023 10:29:57 -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; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=Ruq1yriW; 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=NONE dis=NONE) header.from=foxmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id B338568C198; Fri, 24 Feb 2023 20:29:08 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from out162-62-58-216.mail.qq.com (out162-62-58-216.mail.qq.com [162.62.58.216]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 8F38968C14D for ; Fri, 24 Feb 2023 20:28:57 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1677263335; bh=kT1g+aW1L1mw5Z/zyYO0UCVota7OMKs0uXbYqNK8LOU=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=Ruq1yriWjoPXLPX8cTB+SifAH8LeciQAHrV64V07jHiWlvqXOcAsVKt2QrCv/54JE uv2aZZyuqwYGUXRxT4qFYIQY3+vlXBAW84RHDwwX4jDudtReALVc9uFSnqcmEdaF4M zn3PrGxna/eZoDfnK2O1uvOaHZ3bgBaXaueS0Gsg= Received: from localhost.localdomain ([113.118.101.228]) by newxmesmtplogicsvrszb1-0.qq.com (NewEsmtp) with SMTP id 7333FEEC; Sat, 25 Feb 2023 02:28:51 +0800 X-QQ-mid: xmsmtpt1677263334tuj9vj2a1 Message-ID: X-QQ-XMAILINFO: MmCmH9jyqHC23X8VOL25orCnX7yVjgxgIV4qdTh+oIKtpD+YLsnZEEhL8KPI0e sNqrwaQ8/XIMrMSiMxBBPVzXa0NrHwZN28GINDXtkCTHhcndDmUVDcpC9qlOs7OVK4NUdRabp3bX a85NvcAFTHfmEBxPFF4FPHo+T1jI9ooQJdV3e6P3ijAYFKRMT22bhOKVtf6WigXQROZNlKySoPMw DpRlgWJ4139eXayzTiMkzckWKPaVX0D+4JxsSL9MYiw7C6uF/RN+z4pQOkOqlIPBKpMDVR/p9KvA 5WrlMq28XM6oNNkimVa69oeMkCm56YCwGp0nqG6YJyw7zV1EUN9X41bkMgDOBz/u9gYhBdxosFhD Qwa0Qx6yzP/w7qp7IAjXnbIUVT+0z+qc3a9DecEBkw/jg+Wfqsu0tv3PSfVKmeFOt9MPO8kFbk+K 8LATkzlXtmYXUjPaW6KOevT0e0uAshi35qmgwd2cat8XDg2Xil9Ngkoz5ZteBQf4Hky4p8dbA/76 gj1KIW9+VUS66iFA1h2mkmwHyhSnDO5zOCOeWyhI2Oknj6ccSbu6ItoQtWRyJ/nkf+x7YCPmSXyA uGsCoC/243xMUSX0zvgxumXGjWJvtK8dtN2gmVOxiuxVc76YpbcIT1zvEB+YQJZa3nCllm5nf59P ZfZHLC0sM05KQX+aErKoK5xa2QLv1caYQ7a+5PauT4c5bwitpgL2xQR1LdCJIB+zJLbKiGmFUkuy /n9GkRODrg2O0X9W05eb7dL/WTHX13s0u5RZ0kmWF+EOXJf/ot42LU15ZQASqtqSTZADDVtTfPL9 8Ds/02qKvlH+0iGWIgr6MLCUu03TLV/Seu/c+r34AiVlSYEVmElDAxtYurddMglZPKgu5491GUjZ qlykyIH/MoT7ZwvuxpJfqwnuYX6J5JJDyDTlKEQZ5NYBnjFl6XWGBn/X5xMfXIx8pe75f5n3dgfr 0zp3aPp3wxPwXs/zlVrOMPbqCL8VSB1JXl3aPfdRykDu0J9Pjf6Q== From: Zhao Zhili To: ffmpeg-devel@ffmpeg.org Date: Sat, 25 Feb 2023 02:28:46 +0800 X-OQ-MSGID: <20230224182849.426345-6-quinkblack@foxmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230224182849.426345-1-quinkblack@foxmail.com> References: <20230224182849.426345-1-quinkblack@foxmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 5/8] avformat/isom_tags: remove ipcm from movaudio_tags 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: Zhao Zhili Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: WWAxfQHgz+3V From: Zhao Zhili ipcm is defined by ISO/IEC 23003-5, not defined by quicktime. After adding ISO/IEC 23003-5 support, we don't need it for ticket #9219. Signed-off-by: Zhao Zhili --- libavformat/isom_tags.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/libavformat/isom_tags.c b/libavformat/isom_tags.c index e2b80405cc..86c7272525 100644 --- a/libavformat/isom_tags.c +++ b/libavformat/isom_tags.c @@ -321,8 +321,6 @@ const AVCodecTag ff_codec_movaudio_tags[] = { { AV_CODEC_ID_PCM_S16LE, MKTAG('s', 'o', 'w', 't') }, { AV_CODEC_ID_PCM_S16BE, MKTAG('l', 'p', 'c', 'm') }, { AV_CODEC_ID_PCM_S16LE, MKTAG('l', 'p', 'c', 'm') }, - { AV_CODEC_ID_PCM_S16BE, MKTAG('i', 'p', 'c', 'm') }, - { AV_CODEC_ID_PCM_S16LE, MKTAG('i', 'p', 'c', 'm') }, { AV_CODEC_ID_PCM_S24BE, MKTAG('i', 'n', '2', '4') }, { AV_CODEC_ID_PCM_S24LE, MKTAG('i', 'n', '2', '4') }, { AV_CODEC_ID_PCM_S32BE, MKTAG('i', 'n', '3', '2') }, From patchwork Fri Feb 24 18:28:47 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhao Zhili X-Patchwork-Id: 40516 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:5494:b0:bf:7b3a:fd32 with SMTP id i20csp1486099pzk; Fri, 24 Feb 2023 10:30:06 -0800 (PST) X-Google-Smtp-Source: AK7set9EcwtO61OuMdb/m9Zu77bZdhydZGTUFEXUimzqhQmLQEJG5v9l5GvMU0rVXfLKlY/cCKwQ X-Received: by 2002:a17:907:7605:b0:8b1:7de0:c84a with SMTP id jx5-20020a170907760500b008b17de0c84amr27305943ejc.40.1677263406677; Fri, 24 Feb 2023 10:30:06 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1677263406; cv=none; d=google.com; s=arc-20160816; b=ca2++EG8XaulxpZcTpBFvnyVeiEUefXKN4fXXn2hySc/Zhidxk+QeRo8xyGru1+f6h bRUL/4Sb5xGCjZWIM03QtE/bvytxOcinBChBA+ZkzeMAhxP9NskzTPcUInOhX6GMJ2Fj +jaBrMJ1ASPpJgKzXewefeqCPKB7XRoO1HvA0k7swec9oqLZQjmNQ5bf1oA62bU/KeqE Gs1qjQH9WDVHS1l15bCT/eBBnrAiNAjqd1es4mKNTaK62t4mFGHdf/26DJWnZ9yZQpec UFIwzHegk6+iXEPFSkHgXoUmAbwSkYucHjfpS30XIfYy/n86h9KtHRAu40bd5R8k8TmA yMrQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to:date :to:from:message-id:dkim-signature:delivered-to; bh=vHRIarH8GQOhhJAxFw4P+gYmc3SFGsnBRVVy/5ILkFI=; b=tO3LNptkMyC0rZX283JTlrULvCUS/YFMXOr5E7Pcsg/y92SjAM4fBNS/ePpimwDhnd FFwwHCGDVqlW17MFnNH549aAylEYuiVbTVoBdB2YKHR6eLcMOeXgqsM8Dh0WdXwTRkx+ 2LPtfnVYlTCwShy648TzIe3BbibbK+ApAMI6+5KKuvYWLqE4A1T13NVFm9hJP9hI1msW T3iAIzSlT+ipwTy6sPXH4lL3O0l8LhkIUAN+T/kJ9ZOtfmblVZ0Sd+LXhb6UTxu70vjG GnjA0FjHkHvz8b0akOyGUF5pAhU6MujtCul7cwaTYf+mDYHc1LeFYQmx77sBNZUCIakl 8Q8Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=rt8PTGDk; 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=NONE dis=NONE) header.from=foxmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id w9-20020a170906968900b008d92efb7985si13407044ejx.746.2023.02.24.10.30.06; Fri, 24 Feb 2023 10:30:06 -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; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=rt8PTGDk; 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=NONE dis=NONE) header.from=foxmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 9A3A268C19D; Fri, 24 Feb 2023 20:29:09 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from out162-62-57-252.mail.qq.com (out162-62-57-252.mail.qq.com [162.62.57.252]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id DA04F68C140 for ; Fri, 24 Feb 2023 20:28:57 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1677263335; bh=hefRGcuwvySLgqVK5+A6V1gCaugwC3U/S3QF7FnntmM=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=rt8PTGDkak97pMnz9qIhm/9LN8g6u/G3kjBXr9ojkFmyxOst3SLcmyYDGCPVJPV58 Xb7EJYf60gVydR0nhtfGxI4JZM5LJISNX5I2Nfp1TkmKIeDKpxsIaEl/jzx+Zttjdl +VtFPDIPLPpHXZuK5UdOQvqzfXLGA5gn+Ayo+cUw= Received: from localhost.localdomain ([113.118.101.228]) by newxmesmtplogicsvrszb1-0.qq.com (NewEsmtp) with SMTP id 7333FEEC; Sat, 25 Feb 2023 02:28:51 +0800 X-QQ-mid: xmsmtpt1677263334trnjomcdc Message-ID: X-QQ-XMAILINFO: NQR8mRxMnur9s17uHp5Aa67Vd5/pGKKIoKxrJYBCShvi5juM1R8LX64AcY2BNM C9QmkW+ghWoaHKaGiS98t7bCDIofk4JVbLISGKwp8bFl9AWSkRjGOac5KRTX+yurczLvptNmqBph u7Dd8e4O4kTDefrLX6ikC301B3ulF3sRcXVzo2TgbXECUHITRq3WgejEal3ST7//ppTS/wWk5Nfg jUPhTJH9F2SHlBe6IrF659dtC9lg80rjCMQY/NG4Lp/ml6w4js2G5XXoeECgGFijrlSV+q3NGzAR qKmd06KFBInU2+hH4lO2CV+MpoFNE22FCewlAzAtUB55KO51ez1EF8AhTC0g7WZuFJmLGh3+JPhg ZYNoPhmvS9IwPXb7mQo9Vi3lwlCO8Zr4qUnrchZd/WmNb5nmrPXojyWSjip4Vm/OYbrO/1pPnheD p2zeStLpVw3Wuks5U40WSyEXGdWSU09VNVmORMzjQjhwXB8qVREQxbNvpdQ/5PZLzRi52MgZToWA aMzXEKDL/Mf1emur3kId2ewoG6UbRxe628kegP/pVugSoTCGzba7Hae1FPbkMh3pW5wjdF2YfdMZ BaZJRngIxT8VtfcSWZbUf26E8MSiLD7jZrdiCcBmS3NpMiVadIArrXqCv47uqq89QUZyKKbyOPT+ d2hvvsUILpzmoZNCa5Ymj6t5rJaDIHJVXtWXv4THWkwNRLEkwOnZPtMxdcj/Wr4DD0rbBQ1WO+qd Jv7L7NmDgfqEoE5KfInQ1fWCu4fOroGLQRAqDSCuTZsgCQNNFTuNBA8ZkbVpNLeY170z9pivDaNH OSLjK5WubB2UfEIoCbOAS4sWKdA5RVJwxobphYLMXtMyaQhiph14KhANzZs7fdFDaYtchkDi6JAt KOKeMJjZCTHyzVq8Agu7Ncw3TXmqx1K3j1WY2XB32Y61zhzeCxYiBPidxTONqh+0JZ4pmtC/Pzn8 mOCW+es+1n3RsaqhRAFtbK6j1pBi2WPpqQBYGfCttY1YgCiqdHEZQ52wlJY4Xy From: Zhao Zhili To: ffmpeg-devel@ffmpeg.org Date: Sat, 25 Feb 2023 02:28:47 +0800 X-OQ-MSGID: <20230224182849.426345-7-quinkblack@foxmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230224182849.426345-1-quinkblack@foxmail.com> References: <20230224182849.426345-1-quinkblack@foxmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 6/8] avformat/mov: parse ISO-14496-12 ChannelLayout 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: Zhao Zhili Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: m44GEx9dIQms From: Zhao Zhili Signed-off-by: Zhao Zhili --- libavformat/mov.c | 85 +++++++++++- libavformat/mov_chan.c | 296 +++++++++++++++++++++++++++++++++++++++++ libavformat/mov_chan.h | 26 ++++ 3 files changed, 406 insertions(+), 1 deletion(-) diff --git a/libavformat/mov.c b/libavformat/mov.c index e75cf2f4b7..f8b424cd7f 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -940,6 +940,88 @@ static int mov_read_chan(MOVContext *c, AVIOContext *pb, MOVAtom atom) return 0; } +static int mov_read_chnl(MOVContext *c, AVIOContext *pb, MOVAtom atom) +{ + int64_t end = av_sat_add64(avio_tell(pb), atom.size); + int stream_structure; + int version, flags; + int ret = 0; + AVStream *st; + + if (c->fc->nb_streams < 1) + return 0; + st = c->fc->streams[c->fc->nb_streams-1]; + + version = avio_r8(pb); + flags = avio_rb24(pb); + if (version != 0 || flags != 0) { + av_log(c->fc, AV_LOG_ERROR, + "Unsupported 'chnl' box with version %d, flags: %#x", + version, flags); + return AVERROR_INVALIDDATA; + } + + stream_structure = avio_r8(pb); + + // stream carries channels + if (stream_structure & 1) { + int layout = avio_r8(pb); + + av_log(c->fc, AV_LOG_TRACE, "'chnl' layout %d\n", layout); + if (!layout) { + uint8_t *positions = av_malloc(st->codecpar->ch_layout.nb_channels); + + if (!positions) + return AVERROR(ENOMEM); + for (int i = 0; i < st->codecpar->ch_layout.nb_channels; i++) { + int speaker_pos = avio_r8(pb); + + av_log(c->fc, AV_LOG_TRACE, "speaker_position %d\n", speaker_pos); + if (speaker_pos == 126) { // explicit position + avpriv_request_sample(c->fc, "explicit position"); + av_freep(&positions); + return AVERROR_PATCHWELCOME; + } else { + positions[i] = speaker_pos; + } + } + + ret = ff_mov_get_layout_from_channel_positions(positions, + st->codecpar->ch_layout.nb_channels, + &st->codecpar->ch_layout); + av_freep(&positions); + if (ret) { + av_log(c->fc, AV_LOG_ERROR, + "get channel layout from speaker positions failed, %s\n", + av_err2str(ret)); + return ret; + } + } else { + uint64_t omitted_channel_map = avio_rb64(pb); + + if (omitted_channel_map) { + avpriv_request_sample(c->fc, "omitted_channel_map 0x%" PRIx64 " != 0", + omitted_channel_map); + return AVERROR_PATCHWELCOME; + } + ff_mov_get_channel_layout_from_config(layout, &st->codecpar->ch_layout); + } + } + + // stream carries objects + if (stream_structure & 2) { + int obj_count = avio_r8(pb); + av_log(c->fc, AV_LOG_TRACE, "'chnl' with object_count %d\n", obj_count); + } + + if (avio_tell(pb) != end) { + av_log(c->fc, AV_LOG_WARNING, "skip %" PRId64 " bytes of unknown data inside chnl\n", + end - avio_tell(pb)); + avio_seek(pb, end, SEEK_SET); + } + return ret; +} + static int mov_read_wfex(MOVContext *c, AVIOContext *pb, MOVAtom atom) { AVStream *st; @@ -7815,7 +7897,8 @@ static const MOVParseTableEntry mov_default_parse_table[] = { { MKTAG('w','i','d','e'), mov_read_wide }, /* place holder */ { MKTAG('w','f','e','x'), mov_read_wfex }, { MKTAG('c','m','o','v'), mov_read_cmov }, -{ MKTAG('c','h','a','n'), mov_read_chan }, /* channel layout */ +{ MKTAG('c','h','a','n'), mov_read_chan }, /* channel layout from quicktime */ +{ MKTAG('c','h','n','l'), mov_read_chnl }, /* channel layout from ISO-14496-12 */ { MKTAG('d','v','c','1'), mov_read_dvc1 }, { MKTAG('s','g','p','d'), mov_read_sgpd }, { MKTAG('s','b','g','p'), mov_read_sbgp }, diff --git a/libavformat/mov_chan.c b/libavformat/mov_chan.c index f66bf0df7f..df17976e59 100644 --- a/libavformat/mov_chan.c +++ b/libavformat/mov_chan.c @@ -551,3 +551,299 @@ int ff_mov_read_chan(AVFormatContext *s, AVIOContext *pb, AVStream *st, return 0; } + +/* ISO/IEC 23001-8, 8.2 */ +static const AVChannelLayout iso_channel_configuration[] = { + // 0: any setup + {}, + + // 1: centre front + AV_CHANNEL_LAYOUT_MONO, + + // 2: left front, right front + AV_CHANNEL_LAYOUT_STEREO, + + // 3: centre front, left front, right front + AV_CHANNEL_LAYOUT_SURROUND, + + // 4: centre front, left front, right front, rear centre + AV_CHANNEL_LAYOUT_4POINT0, + + // 5: centre front, left front, right front, left surround, right surround + AV_CHANNEL_LAYOUT_5POINT0, + + // 6: 5 + LFE + AV_CHANNEL_LAYOUT_5POINT1, + + // 7: centre front, left front centre, right front centre, + // left front, right front, left surround, right surround, LFE + AV_CHANNEL_LAYOUT_7POINT1_WIDE, + + // 8: channel1, channel2 + AV_CHANNEL_LAYOUT_STEREO_DOWNMIX, + + // 9: left front, right front, rear centre + AV_CHANNEL_LAYOUT_2_1, + + // 10: left front, right front, left surround, right surround + AV_CHANNEL_LAYOUT_2_2, + + // 11: centre front, left front, right front, left surround, right surround, rear centre, LFE + AV_CHANNEL_LAYOUT_6POINT1, + + // 12: centre front, left front, right front + // left surround, right surround + // rear surround left, rear surround right + // LFE + AV_CHANNEL_LAYOUT_7POINT1, + + // 13: + AV_CHANNEL_LAYOUT_22POINT2, + + // 14: + AV_CHANNEL_LAYOUT_7POINT1_TOP_BACK, + + // TODO: 15 - 20 +}; + +/* ISO/IEC 23001-8, table 8 */ +static const enum AVChannel iso_channel_position[] = { + // 0: left front + AV_CHAN_FRONT_LEFT, + + // 1: right front + AV_CHAN_FRONT_RIGHT, + + // 2: centre front + AV_CHAN_FRONT_CENTER, + + // 3: low frequence enhancement + AV_CHAN_LOW_FREQUENCY, + + // 4: left surround + // TODO + AV_CHAN_NONE, + + // 5: right surround + // TODO + AV_CHAN_NONE, + + // 6: left front centre + AV_CHAN_FRONT_LEFT_OF_CENTER, + + // 7: right front centre + AV_CHAN_FRONT_RIGHT_OF_CENTER, + + // 8: rear surround left + AV_CHAN_BACK_LEFT, + + // 9: rear surround right + AV_CHAN_BACK_RIGHT, + + // 10: rear centre + AV_CHAN_BACK_CENTER, + + // 11: left surround direct + AV_CHAN_SURROUND_DIRECT_LEFT, + + // 12: right surround direct + AV_CHAN_SURROUND_DIRECT_RIGHT, + + // 13: left side surround + AV_CHAN_SIDE_LEFT, + + // 14: right side surround + AV_CHAN_SIDE_RIGHT, + + // 15: left wide front + AV_CHAN_WIDE_LEFT, + + // 16: right wide front + AV_CHAN_WIDE_RIGHT, + + // 17: left front vertical height + AV_CHAN_TOP_FRONT_LEFT, + + // 18: right front vertical height + AV_CHAN_TOP_FRONT_RIGHT, + + // 19: centre front vertical height + AV_CHAN_TOP_FRONT_CENTER, + + // 20: left surround vertical height rear + AV_CHAN_TOP_BACK_LEFT, + + // 21: right surround vertical height rear + AV_CHAN_TOP_BACK_RIGHT, + + // 22: centre vertical height rear + AV_CHAN_TOP_BACK_CENTER, + + // 23: left vertical height side surround + AV_CHAN_TOP_SIDE_LEFT, + + // 24: right vertical height side surround + AV_CHAN_TOP_SIDE_RIGHT, + + // 25: top centre surround + AV_CHAN_TOP_CENTER, + + // 26: low frequency enhancement 2 + AV_CHAN_LOW_FREQUENCY_2, + + // 27: left front vertical bottom + AV_CHAN_BOTTOM_FRONT_LEFT, + + // 28: right front vertical bottom + AV_CHAN_BOTTOM_FRONT_RIGHT, + + // 29: centre front vertical bottom + AV_CHAN_BOTTOM_FRONT_CENTER, + + // 30: left vertical height surround + // TODO + AV_CHAN_NONE, + + // 31: right vertical height surround + // TODO + AV_CHAN_NONE, + + // 32, 33, 34, 35, reserved + AV_CHAN_NONE, + AV_CHAN_NONE, + AV_CHAN_NONE, + AV_CHAN_NONE, + + // 36: low frequency enhancement 3 + AV_CHAN_NONE, + + // 37: left edge of screen + AV_CHAN_NONE, + // 38: right edge of screen + AV_CHAN_NONE, + // 39: half-way between centre of screen and left edge of screen + AV_CHAN_NONE, + // 40: half-way between centre of screen and right edge of screen + AV_CHAN_NONE, + + // 41: left back surround + AV_CHAN_NONE, + + // 42: right back surround + AV_CHAN_NONE, + + // 43 - 125: reserved + // 126: explicit position + // 127: unknown /undefined +}; + +int ff_mov_get_channel_config_from_layout(const AVChannelLayout *layout, int *config) +{ + // Set default value which means any setup in 23001-8 + *config = 0; + for (int i = 0; i < FF_ARRAY_ELEMS(iso_channel_configuration); i++) { + if (!av_channel_layout_compare(layout, iso_channel_configuration + i)) { + *config = i; + break; + } + } + + return 0; +} + +int ff_mov_get_channel_layout_from_config(int config, AVChannelLayout *layout) +{ + if (config > 0 && config < FF_ARRAY_ELEMS(iso_channel_configuration)) { + av_channel_layout_copy(layout, &iso_channel_configuration[config]); + return 0; + } + + return -1; +} + +int ff_mov_get_channel_positions_from_layout(const AVChannelLayout *layout, + uint8_t *position, int position_num) +{ + enum AVChannel channel; + + if (position_num < layout->nb_channels) + return AVERROR(EINVAL); + + for (int i = 0; i < layout->nb_channels; i++) { + position[i] = 127; + channel = av_channel_layout_channel_from_index(layout, i); + if (channel == AV_CHAN_NONE) + return AVERROR(EINVAL); + + for (int j = 0; j < FF_ARRAY_ELEMS(iso_channel_position); j++) { + if (iso_channel_position[j] == channel) { + position[i] = j; + break; + } + } + if (position[i] == 127) + return AVERROR(EINVAL); + } + + return 0; +} + +int ff_mov_get_layout_from_channel_positions(const uint8_t *position, int position_num, + AVChannelLayout *layout) +{ + int ret; + enum AVChannel channel; + + av_channel_layout_uninit(layout); + + if (position_num <= 63) { + layout->order = AV_CHANNEL_ORDER_NATIVE; + layout->nb_channels = position_num; + for (int i = 0; i < position_num; i++) { + if (position[i] >= FF_ARRAY_ELEMS(iso_channel_position)) { + ret = AVERROR_PATCHWELCOME; + goto error; + } + + channel = iso_channel_position[position[i]]; + // unsupported layout + if (channel == AV_CHAN_NONE) { + ret = AVERROR_PATCHWELCOME; + goto error; + } + + layout->u.mask |= 1ULL << channel; + } + } else { + layout->order = AV_CHANNEL_ORDER_CUSTOM; + layout->nb_channels = position_num; + layout->u.map = av_calloc(position_num, sizeof(*layout->u.map)); + if (!layout->u.map) { + ret = AVERROR(ENOMEM); + goto error; + } + + for (int i = 0; i < position_num; i++) { + if (position[i] >= FF_ARRAY_ELEMS(iso_channel_position)) { + ret = AVERROR_PATCHWELCOME; + goto error; + } + + channel = iso_channel_position[position[i]]; + // unsupported layout + if (channel == AV_CHAN_NONE) { + ret = AVERROR_PATCHWELCOME; + goto error; + } + + layout->u.map[i].id = channel; + } + } + + + return 0; + +error: + av_channel_layout_uninit(layout); + return ret; +} diff --git a/libavformat/mov_chan.h b/libavformat/mov_chan.h index 93d9878798..8c807798ab 100644 --- a/libavformat/mov_chan.h +++ b/libavformat/mov_chan.h @@ -163,4 +163,30 @@ int ff_mov_get_channel_layout_tag(const AVCodecParameters *par, int ff_mov_read_chan(AVFormatContext *s, AVIOContext *pb, AVStream *st, int64_t size); +/** + * Get ISO/IEC 23001-8 ChannelConfiguration from AVChannelLayout. + * + */ +int ff_mov_get_channel_config_from_layout(const AVChannelLayout *layout, int *config); + +/** + * Get AVChannelLayout from ISO/IEC 23001-8 ChannelConfiguration. + * + * @return 0 for success, -1 for doesn't match, layout is untouched on failure + */ + +int ff_mov_get_channel_layout_from_config(int config, AVChannelLayout *layout); + +/** + * Get ISO/IEC 23001-8 OutputChannelPosition from AVChannelLayout. + */ +int ff_mov_get_channel_positions_from_layout(const AVChannelLayout *layout, + uint8_t *position, int position_num); + +/** + * Get AVChannelLayout from ISO/IEC 23001-8 OutputChannelPosition. + */ +int ff_mov_get_layout_from_channel_positions(const uint8_t *position, int position_num, + AVChannelLayout *layout); + #endif /* AVFORMAT_MOV_CHAN_H */ From patchwork Fri Feb 24 18:28:48 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhao Zhili X-Patchwork-Id: 40517 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:5494:b0:bf:7b3a:fd32 with SMTP id i20csp1486246pzk; Fri, 24 Feb 2023 10:30:16 -0800 (PST) X-Google-Smtp-Source: AK7set9hXpGf+0mFb4ChU4dXcqQexqfPC3bZO+Ivo7SZd2vIQH73L+MRCF6Pk69SWrc5whCS5aF2 X-Received: by 2002:a17:906:35cc:b0:8af:2d2e:5d31 with SMTP id p12-20020a17090635cc00b008af2d2e5d31mr20270793ejb.31.1677263416665; Fri, 24 Feb 2023 10:30:16 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1677263416; cv=none; d=google.com; s=arc-20160816; b=sRUL8DVd+1qDjCl42FPmza0ya/tcQipraOGou490SSQeHhBTLCL9YXRQpPY2Cj0mzr 8FCr2JzmZtReUFcyCcAFAnonpCMtPGLpptldsgrqohxZrXbro8YRFsfpf7KZ84RVwy/M Ex/AZyHfe5Z3oWDGbPxAX2OrjrnDM6pBzr9Hh+vTM9w7lF5vp0UMZVxzDWVgGiuMRfan 3DqUhYpYZ+lA28iT7bJuaBT54RORLz80M61J3Xa7n0xm9fSWMoo8noDXJPixeEJz11xh onvPiAQ20kJO7urb93x+E9EiWpjPrAOeeiwfa/KMTowJBFLrTjQLROQrpavx2fEmV2h2 0RLg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to:date :to:from:message-id:dkim-signature:delivered-to; bh=sqWWHwDr7kMrHQtaWpDnJWf2+puZPdydxYUt/F54uKI=; b=fNULnISgDkf1JCtr82evI5ukHjJRgMblOo6bonVhsZJJUs6rBY9/Xms3h41dKbJfPz 5j6MGsXJfS5pZAtVAQi06Al2WcKHnleJLDDs5STfAXtw44Ns3AZ1aoTfBESQVWaR1Ke/ VP8jTJkyEMjPliU185EqCCHnK5K+GuNDbVEz/UDrpan5WeM/apKgtU/T1UsY4oEsaEFu dPg1Zfpuf8WwBLnF3RMo9HueiPiSMKcvJmqAZVvyEoLYQVp9iMIjNnZs7G3pumQGVCy6 iD3FhKmjvAw145Ep7Hj++eR8QSairPxoQ4taZjBPh1HcZ2Hkmv8pf2I0idv3whEtZ7QK kqMQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=S0yjrUV9; 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=NONE dis=NONE) header.from=foxmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id 24-20020a170906225800b008d8279dfbe4si19374630ejr.437.2023.02.24.10.30.16; Fri, 24 Feb 2023 10:30:16 -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; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=S0yjrUV9; 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=NONE dis=NONE) header.from=foxmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id AAB0668C1A1; Fri, 24 Feb 2023 20:29:10 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from out162-62-58-216.mail.qq.com (out162-62-58-216.mail.qq.com [162.62.58.216]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 4AC1C68C174 for ; Fri, 24 Feb 2023 20:28:58 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1677263336; bh=KoMjQyxsKfVbtwYntMGcVRF4F+pUL7SKnemLqd7aTUg=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=S0yjrUV9qNms10vB9kKJ2Sq4d7GkhTj6HuX5NZ1vlpISABjiW6pvXpwLwfbWgz0mO V28DobWYmCnQIAnluShtdSikO1MtigrEwOguOKDsXAzNSgMBODXU/DqiYOlnPn7kwT VNV8oEFBb/B8zYm2uzkHqy8xIQpIAmuo6+FQHruo= Received: from localhost.localdomain ([113.118.101.228]) by newxmesmtplogicsvrszb1-0.qq.com (NewEsmtp) with SMTP id 7333FEEC; Sat, 25 Feb 2023 02:28:51 +0800 X-QQ-mid: xmsmtpt1677263335tq8sii9ad Message-ID: X-QQ-XMAILINFO: N26DAMVpW7UEElWISCEDwQP/7583RrLiwov/NwDaOxTGFupq0rfY62jNs4BcUj SHBgKsHX7oo0Rm0fmXN3bXKyF/SaYWyqWHsEs4s7FhnZz5gG9bEYSJT96fZK3uJ6dPEflX6xS8WY oETvAFUzdhtWCmk1jQ62wAXkP6p4d8hq/MIpkSKADqaskTiNoqkF3S8VnCakbJaPLFA0f9CqJYvP yzE19mMcCmxFNuTCJQwxz9R5FiuF01KNtAA5i68FTlgvNq/AFgZAsIVc/iumVgYlvn4qm4EuQGEY k1RAaSnBvUo/rBvFF1703rTMWMCV0nTDg4hqGHe/ZPKxW63W47jd/NoQBHWxuv98xXsL6Yxw7oXX 2GV5PhPcLu6/y9uGSmOXnSGY2/0DKdsz+JKrK8++mpDW2q77+IGnteT4L0ix/04u0oqCmz8nq7uH khyRsPCLW2es1bJjqY2P7cVjCXEhlVkXZNu1VbdZE+TaPMfBEawQmRoIDdOQ5VDsK12rGjvp8zPi w9/NV09GhbYUpJYXDx4IWAi+gROf/ZDQHxhdNbfdLY9Qwh/+iGMSI6iWq3pLQxq+QoD8/ig11aMJ ayLn9HdfzRn/E8ahqBS9uSyv4XUe947IpCZGQg0AFSiYb/jKpRQtahYdUrPX1+w6hILqX/477sj7 aYB+LrqwofUK2HmTe0A9aCe7w1JFXfhAe2+GvYYXnOXKX9OFlgufDHZw8XVazF7MzZCJOXPVqPLc oEc5PcbTX/Q+6siuRoGsOrPOPMestsKRCuALRNV5Owa9bTR/mYM3ZM/SIUT62BxanUKCZNo9PJ5r 1sBkg8mJFiZN1gyBD1hMU79L+WIg+QUK5CmDh9mCWGKBhLUO5hnVbc02TqMbXDHBI6fZoOEBwmh1 69046rYLCJpqgWjSV7OjPmmTGi2Td3TVZqUJ8tIMdp/Dy67Qn28r9siLfsrjRI+AnpsUW6Evn3PP Nle9RXJfMOzy9Aro2s2FYpNu8ybBy16oH88E2hpPPWCiLcSE0OUaKvLOHyvXQM From: Zhao Zhili To: ffmpeg-devel@ffmpeg.org Date: Sat, 25 Feb 2023 02:28:48 +0800 X-OQ-MSGID: <20230224182849.426345-8-quinkblack@foxmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230224182849.426345-1-quinkblack@foxmail.com> References: <20230224182849.426345-1-quinkblack@foxmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 7/8] avformat/movenc: write ChannelLayout box for PCM 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: Zhao Zhili Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: +dQM+3v9wFo/ From: Zhao Zhili Signed-off-by: Zhao Zhili --- libavformat/movenc.c | 48 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/libavformat/movenc.c b/libavformat/movenc.c index 3315057b88..058d3cd6d1 100644 --- a/libavformat/movenc.c +++ b/libavformat/movenc.c @@ -1199,6 +1199,47 @@ static int is_mp4_pcm_codec(enum AVCodecID codec) } } +static int mov_write_chnl_tag(AVFormatContext *s, AVIOContext *pb, MOVTrack *track) +{ + int64_t pos = avio_tell(pb); + int config = 0; + int ret; + uint8_t *speaker_pos = NULL; + const AVChannelLayout *layout = &track->par->ch_layout; + + ret = ff_mov_get_channel_config_from_layout(layout, &config); + if (ret || !config) { + config = 0; + speaker_pos = av_malloc(layout->nb_channels); + ret = ff_mov_get_channel_positions_from_layout(layout, + speaker_pos, layout->nb_channels); + if (ret) { + char buf[128] = {}; + + av_freep(&speaker_pos); + av_channel_layout_describe(layout, buf, sizeof(buf)); + av_log(s, AV_LOG_ERROR, "unsupported channel layout %s\n", buf); + return ret; + } + } + + avio_wb32(pb, 0); /* size */ + ffio_wfourcc(pb, "chnl"); + avio_wb32(pb, 0); /* version & flags */ + + avio_w8(pb, 1); /* stream_structure */ + avio_w8(pb, config); + if (config) { + avio_wb64(pb, 0); + } else { + for (int i = 0; i < layout->nb_channels; i++) + avio_w8(pb, speaker_pos[i]); + av_freep(&speaker_pos); + } + + return update_size(pb, pos); +} + static int mov_write_pcmc_tag(AVFormatContext *s, AVIOContext *pb, MOVTrack *track) { int64_t pos = avio_tell(pb); @@ -1349,8 +1390,13 @@ static int mov_write_audio_tag(AVFormatContext *s, AVIOContext *pb, MOVMuxContex ret = mov_write_dmlp_tag(s, pb, track); else if (track->vos_len > 0) ret = mov_write_glbl_tag(pb, track); - else if (track->mode == MODE_MP4 && is_mp4_pcm_codec(track->par->codec_id)) + else if (track->mode == MODE_MP4 && is_mp4_pcm_codec(track->par->codec_id)) { + if (track->par->ch_layout.nb_channels > 1) + ret = mov_write_chnl_tag(s, pb, track); + if (ret < 0) + return ret; ret = mov_write_pcmc_tag(s, pb, track); + } if (ret < 0) return ret; From patchwork Fri Feb 24 18:28:49 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhao Zhili X-Patchwork-Id: 40518 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:5494:b0:bf:7b3a:fd32 with SMTP id i20csp1486358pzk; Fri, 24 Feb 2023 10:30:25 -0800 (PST) X-Google-Smtp-Source: AK7set/cQREWCQAkDpheeBpDyRK0bsrhfVdpsaR2Bi3G8X1fl6dVjuoQpN2WZnbUNlzV/J1+svwi X-Received: by 2002:a17:907:8a1e:b0:8ea:2055:4f1b with SMTP id sc30-20020a1709078a1e00b008ea20554f1bmr11908109ejc.24.1677263425402; Fri, 24 Feb 2023 10:30:25 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1677263425; cv=none; d=google.com; s=arc-20160816; b=sAgVCFXemxS/61kcTOTO3c834Uf8uHfezJMeaShfeB8810DPQdHYoZUjUtYOZcyS6v nUiq8jviNhHwHKW/L0vJjyGuojwA1N1wqwisArDvgcTuweOsHxzphsix/r/Iyx7mNzHH XDCbrvKc+06yAO1CnEW75Nsbeu5R+eARv03SlARtYfACjinAHXLiVZoSxMS4XuOM40uH HYbmvQl/6Pt/SHt9vOugSRund0P2Cf6uTJs/Ec66eFOTCrcCBRQZXn0sWQWtQC+8vPTB gFgQ02hgj3AO6crWT1R+V3PzqVak2UQUN8porvmgrqZ5x1KXglrFRhCjbqdotR9zUhdk wKIQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to:date :to:from:message-id:dkim-signature:delivered-to; bh=w9Ta9zeSvnQJOsVEYkm6F8XNSiuzGLbYkPbe+fUykSU=; b=K5ED9+ogTMHFsZ/5iszhlwR9k2bPw3a5UBupQbgGSibfTusZ337V44JKouUzgDl1W5 djwZlcQ1ASfSoIoHsnJLLBP1sgTIkyMJFB3W5Bsa9HMOIszePMxKFIemrI+3O6cuRXDS ckPe1DxZ3WPWYDEL12LiJ9cVvbaMvYnjzxJfBwbBM8wSxrulWDDRuhs5B6ncEI1PbtI1 QLF5gqtzdeLSssUR+QaTdiONGVtp5Rskj9wAHHxcNiAQwwEDTn4pDmXIACPcEbcRtziD n96GizSL45O+Vg3016AcBoD8+nNe8Jb5yCrK23oa8xsQ15At/RK0NAA9ncUZUS6O/fLh 1Xqw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=vbdTKwSu; 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=NONE dis=NONE) header.from=foxmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id cj21-20020a17090715d500b008d65603e880si15516701ejc.583.2023.02.24.10.30.25; Fri, 24 Feb 2023 10:30:25 -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; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=vbdTKwSu; 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=NONE dis=NONE) header.from=foxmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id A9B4668C1A6; Fri, 24 Feb 2023 20:29:11 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from out162-62-57-49.mail.qq.com (out162-62-57-49.mail.qq.com [162.62.57.49]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id BFED068C17A for ; Fri, 24 Feb 2023 20:28:58 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1677263336; bh=vXOiSX43y2OBbvOeVLKwwR/ljJtdTFBcCEo/ytt0IHg=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=vbdTKwSuzByHz3CX9iH3l3Pi2o90Uc137/UaKdtM0zdoMg+4Z7o3weHPnRDzYjeNn kNbkWGqSYYxotN4XpE46zjYdaJsRKC6WCLqwmubnVrDPWuT3WJB8d4Q5eEZrDFzS7f 4q/+VTR/n/l+snaQREqMSjGbrWo8lVqK1pARDhns= Received: from localhost.localdomain ([113.118.101.228]) by newxmesmtplogicsvrszb1-0.qq.com (NewEsmtp) with SMTP id 7333FEEC; Sat, 25 Feb 2023 02:28:51 +0800 X-QQ-mid: xmsmtpt1677263336t0hmz714x Message-ID: X-QQ-XMAILINFO: NC/J3CrDtaBbYq4QbiP46iEz8jsafbPDcoaPUYZNpkD5FYJVmBiLP5UtVTHg9O XDxkOHPH9P0lmpIJuX/FCd2wZZfngU3sj+aytxt1X/+0RHRPdcPQNJJkKF/1xC3h70/a8szlwK/F iCqkphgQR8D5U0DmHU1LHaDBZSoCEc3LlE1i/gGABMy9ZwSfxxuwlRLSu0morpcacIDqdsfgcYRq IJFpV0CiCEbJl8UAwK26EZByGhg6oRQ7Ei/CZDsADXUiUA80bSqcGpWpA1yg51HME3STwyOC2ny0 fZWWvZ6fzNyCNYi8B3Np3sJAxUE50+xBlq9RblDTeQmuIVRBu+zHM1zH3wPlIgTVPUg3dpYALJUL m8WLB/fUWKxy9kF3kSl5U9LpgQbpTJQhxwmGOYPU+Q95+YAZnG+mxNY6A4u7RH9F8WUR+JB+pr40 D45kSSZIndnbW8gpK82aLhZD8lTHR5/X+nNx+fKlrlv3FS3jNwTweqrP9faa7kS8Q62pGekXoOmi aaQ/mQrG47H4i5nz+SdIPs36horNWKk5tFK24P/IYPmxzeenvCjhavv5HyPeBQmP2wJjcroCWacD o8N9cKI+763BPNG1j8+8E0eVZjnxxJrtW0K9k01g+LjPV0E9fNyESiizDlwWDhG0pSJWArWZClxR J0XCnrppvPuFjTyz3G6qs3c1xspCPpV99OMrxCVMylc7zNprb5dhX4t7CKHeo7YKomNg9jG90yNx QkZIvUBynLzqdo/Ez7f+DWP5xzguFepjeKjU9WykJfiK+TxrIn9LASuX5A3hwVfLT4SRYKbrcvPf 6V0IT3fKl/YqnbdTatkbsq0zocN/eT+BDPu0z3b+fcJfuPllIYeXsJUH8A2HcdXnbKZ/Urxq0IMO mctdvw5Z86G/abB1EvhCORy+zCTYqxh8hknJKkkDa/zFnIap5Pflw7XTwTzKBnzk7eE1trsv03uS fB0k0AYv+PV6mpJKHUywGn8Q+Awztg0FBLaNAauxmT7ADl0supdS1XF8ixak2O From: Zhao Zhili To: ffmpeg-devel@ffmpeg.org Date: Sat, 25 Feb 2023 02:28:49 +0800 X-OQ-MSGID: <20230224182849.426345-9-quinkblack@foxmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230224182849.426345-1-quinkblack@foxmail.com> References: <20230224182849.426345-1-quinkblack@foxmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 8/8] fate/mov: add PCM in mp4 test 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: Zhao Zhili Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: /Iv7qqFYLYTK From: Zhao Zhili Signed-off-by: Zhao Zhili --- tests/fate/mov.mak | 12 ++++++++++++ tests/filtergraphs/mov-mp4-pcm | 5 +++++ tests/ref/fate/mov-mp4-pcm | 27 +++++++++++++++++++++++++++ tests/ref/fate/mov-mp4-pcm-float | 7 +++++++ 4 files changed, 51 insertions(+) create mode 100644 tests/filtergraphs/mov-mp4-pcm create mode 100644 tests/ref/fate/mov-mp4-pcm create mode 100644 tests/ref/fate/mov-mp4-pcm-float diff --git a/tests/fate/mov.mak b/tests/fate/mov.mak index 8a7218a215..d795445691 100644 --- a/tests/fate/mov.mak +++ b/tests/fate/mov.mak @@ -165,6 +165,18 @@ FATE_MOV_FFMPEG-$(call TRANSCODE, PCM_S16LE, MOV, WAV_DEMUXER PAN_FILTER) \ fate-mov-channel-description: tests/data/asynth-44100-1.wav tests/data/filtergraphs/mov-channel-description fate-mov-channel-description: CMD = transcode wav $(TARGET_PATH)/tests/data/asynth-44100-1.wav mov "-filter_complex_script $(TARGET_PATH)/tests/data/filtergraphs/mov-channel-description -map [outFL] -map [outFR] -map [outFC] -map [outLFE] -map [outBL] -map [outBR] -map [outDL] -map [outDR] -c:a pcm_s16le" "-map 0 -c copy -frames:a 0" +# Test PCM in mp4 and channel layout +FATE_MOV_FFMPEG-$(call TRANSCODE, PCM_S16LE, MOV, WAV_DEMUXER PAN_FILTER) \ + += fate-mov-mp4-pcm +fate-mov-mp4-pcm: tests/data/asynth-44100-1.wav tests/data/filtergraphs/mov-mp4-pcm +fate-mov-mp4-pcm: CMD = transcode wav $(TARGET_PATH)/tests/data/asynth-44100-1.wav mp4 "-filter_complex_script $(TARGET_PATH)/tests/data/filtergraphs/mov-mp4-pcm -map [mono] -map [stereo] -map [2.1] -map [5.1] -map [7.1] -c:a pcm_s16le" "-map 0 -c copy -frames:a 0" + +# Test floating sample format PCM in mp4 and unusual channel layout +FATE_MOV_FFMPEG-$(call TRANSCODE, PCM_S16LE, MOV, WAV_DEMUXER PAN_FILTER) \ + += fate-mov-mp4-pcm-float +fate-mov-mp4-pcm-float: tests/data/asynth-44100-1.wav +fate-mov-mp4-pcm-float: CMD = transcode wav $(TARGET_PATH)/tests/data/asynth-44100-1.wav mp4 "-af aresample,pan=FL+LFE+BR|c0=c0|c1=c0|c2=c0 -c:a pcm_f32le" "-map 0 -c copy -frames:a 0" + FATE_FFMPEG += $(FATE_MOV_FFMPEG-yes) fate-mov: $(FATE_MOV) $(FATE_MOV_FFMPEG-yes) $(FATE_MOV_FFPROBE) $(FATE_MOV_FASTSTART) $(FATE_MOV_FFMPEG_FFPROBE-yes) diff --git a/tests/filtergraphs/mov-mp4-pcm b/tests/filtergraphs/mov-mp4-pcm new file mode 100644 index 0000000000..7fa25a2c3c --- /dev/null +++ b/tests/filtergraphs/mov-mp4-pcm @@ -0,0 +1,5 @@ +[0:a:0]pan=mono|c0=c0[mono]; +[0:a:0]pan=stereo|c0=c0|c1=c0[stereo]; +[0:a:0]pan=2.1|c0=c0|c1=c0|c2=c0[2.1]; +[0:a:0]pan=5.1|c0=c0|c1=c0|c2=c0|c3=c0|c4=c0|c5=c0[5.1]; +[0:a:0]pan=7.1|c0=c0|c1=c0|c2=c0|c3=c0|c4=c0|c5=c0|c6=c0|c7=c0[7.1]; diff --git a/tests/ref/fate/mov-mp4-pcm b/tests/ref/fate/mov-mp4-pcm new file mode 100644 index 0000000000..b34f5e59e1 --- /dev/null +++ b/tests/ref/fate/mov-mp4-pcm @@ -0,0 +1,27 @@ +1573ecbd24a65a6ec23ef08a861614b3 *tests/data/fate/mov-mp4-pcm.mp4 +10589277 tests/data/fate/mov-mp4-pcm.mp4 +#tb 0: 1/44100 +#media_type 0: audio +#codec_id 0: pcm_s16le +#sample_rate 0: 44100 +#channel_layout_name 0: mono +#tb 1: 1/44100 +#media_type 1: audio +#codec_id 1: pcm_s16le +#sample_rate 1: 44100 +#channel_layout_name 1: stereo +#tb 2: 1/44100 +#media_type 2: audio +#codec_id 2: pcm_s16le +#sample_rate 2: 44100 +#channel_layout_name 2: 2.1 +#tb 3: 1/44100 +#media_type 3: audio +#codec_id 3: pcm_s16le +#sample_rate 3: 44100 +#channel_layout_name 3: 5.1 +#tb 4: 1/44100 +#media_type 4: audio +#codec_id 4: pcm_s16le +#sample_rate 4: 44100 +#channel_layout_name 4: 7.1 diff --git a/tests/ref/fate/mov-mp4-pcm-float b/tests/ref/fate/mov-mp4-pcm-float new file mode 100644 index 0000000000..bd08eb9885 --- /dev/null +++ b/tests/ref/fate/mov-mp4-pcm-float @@ -0,0 +1,7 @@ +77d82e3bef652692aaab31e1de4c7082 *tests/data/fate/mov-mp4-pcm-float.mp4 +3175929 tests/data/fate/mov-mp4-pcm-float.mp4 +#tb 0: 1/44100 +#media_type 0: audio +#codec_id 0: pcm_f32le +#sample_rate 0: 44100 +#channel_layout_name 0: 3 channels (FL+LFE+BR)