From patchwork Fri Feb 24 12:25:18 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhao Zhili X-Patchwork-Id: 40481 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:5494:b0:bf:7b3a:fd32 with SMTP id i20csp945311pzk; Thu, 23 Feb 2023 20:26:01 -0800 (PST) X-Google-Smtp-Source: AK7set9f3xAWDVhBOIPqRmzR3/1J8sz9GB3aKe4wovcFAR186L6N4tCrrxbd51CM5KeImPmB46Fi X-Received: by 2002:a17:906:5a4c:b0:8b1:811e:cd30 with SMTP id my12-20020a1709065a4c00b008b1811ecd30mr23689058ejc.22.1677212761592; Thu, 23 Feb 2023 20:26:01 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1677212761; cv=none; d=google.com; s=arc-20160816; b=Lc3plft+fbXZTtShxOCOMeUNeCycZKB+OqmcJdnHEJnn2WFytQ5agUkRUjAzKeLMnQ 7OG0/+xijJ0X6oCru/Qc3+1eSxAP+hwUK15WkisVHL0vdkUkh8lQGAjtkijeFtlypNe5 Uf9e3KoqSxqGzbEKIZDQ2/O/mKby3WbFDPqRJeROEKg9biREPjD7TbeQN5OD64NlAfwK IYUyZLPWzF1Fde1z5YRUbgO28lsQcCtBsDYBYSHWtzZBRtZUrnlARTDvETijbCkSmrgK sPqmmjUvJomHmnxrKrX1FG9clwEX+mdDmiJNhIMQUE90aVIxOblKEtTIGJfuNglyZqGF JB/Q== 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=jTlU5UaIRRGzmWqieemc8dIGqqYS4Vgz2OBKaFotQps=; b=hpRQgtLnfKair0WKRwvaGHZjKvYi0n6dLozCXPsOvw4Th1/YBZwxnom4hL3WYbYA/G gD4UI9XYuO1IJHUG/DNo7oeiiHr6/HXWCjyWHHRe4z/+XSt+329pNTxdsCV4ajA6TxUq UQJq2kn9B7/mlyIYh49OYKDPSvJKCpNxV4eGsEQFhIGP6f/chAYN8r0WQxTzZJTZ1a1W evZWA+Vrw5X067t38gbouhzv/0c1OtMqe2Ritnys37lKYbbnABGbLjW3Y62CVY/wjKxe f2aMQPHwXnqjveY0NKx0b0YoFWfV4c69Oa0jrYXcqPGcBkcFi9yOHHNintzamXQT3Tt7 PoEA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=JQOtavlv; 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 fl17-20020a1709072a9100b008b194cc10acsi20581522ejc.381.2023.02.23.20.26.00; Thu, 23 Feb 2023 20:26:01 -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=JQOtavlv; 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 A724C68C0FE; Fri, 24 Feb 2023 06:25:39 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from out162-62-57-210.mail.qq.com (out162-62-57-210.mail.qq.com [162.62.57.210]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 3A4E468C0C7 for ; Fri, 24 Feb 2023 06:25:29 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1677212726; bh=5IgZ9ZUCLrPXduwmGsyUIAmCCOW4CE1+Fu1kNI4zHXY=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=JQOtavlvu2fZbSbJvKatO+Zsfczs35DDe8yNYAOKIvtX6NMJosmSjfgazDYiTda0w 5SwlHwOx6yrQKSlcXh4vfUTVQDQfh2DyKbuDytzHmBP4QfJhEgk6ATnCRZ+xe8Z1UB j5zPtYWVwjFIDSItZCelIC7mu8GgdK9WizTrzknk= Received: from localhost.localdomain ([119.147.10.197]) by newxmesmtplogicsvrszb9-0.qq.com (NewEsmtp) with SMTP id 6588BCBD; Fri, 24 Feb 2023 12:25:24 +0800 X-QQ-mid: xmsmtpt1677212725t7ox896oh Message-ID: X-QQ-XMAILINFO: OW5zxOp0HHYwPVIYVTWS+SKk9w/hmUDjrwERvpeEx7mXc2657CgeafU2M68TW/ 5AXZoq0Y+4eHxHe+ev2SCgR80cAOOfd/HzNR6jVlbVVYkd3RgNXYLpSDu87cBmZvnA99Z1QwaRSM uSEEHhuzSJ/aKx8NQBGryWGSV8fIOm9JpujpHEeSU5Qd2AvGDwUwIqeJRa5f9WF+CkQiIUDI3eh8 8m2RJcHhfXkgO+L4ehFpQokAtEXSI8C+aUOSYldNqramB2ZKP7O4fDLg3nVng7GjZuTtyQZm3tOT GQD0k6mdgu2OC5y+QrKNUrhNXd3BlcTMUOJr5v4BKVRwDQzlrctp0oI2m6in3SalqEUfG3hnMd2U /LEX8yxvdpJDj5VzNUbRVDczaMXLUVa4XxApxWpLSeQnih5ZDkQx1kEPlFuRdCwrhifWU+4ynlJo GCzuVTVTsQ4DLz8UTvkUcHRwDmONwFkTImXaMlaDrGqvS0cVXtFCx02WDk1Mk1KuTxF351T+BuDO yB3OeQ1gnvQD/jPxuQXYTlUHxb45gw46IHD1jQyImCQESVC9OLof5ygtk07gmo61ZiXbIW8MS4gd tLHOtE5aFhxJkLF7XQRZ/YQ2Z6yu4W/qlU7M44x9vlqBQYPKPFf0BCnbf1UCHJfMZGRA2g+78BeR f3jnfhB5xZytILvjYuXoFw6qp7dauUHoPoSO3etjROP+4fDMB2XRafgla7J6WAh0OzQR1W2gHm5o BF4k6OPfvF6gBkW1AjjR+Xs31PAd2BKxuVecm9LcPcFpshmBRNjZ9ps+msUVGQaacZ1gSu8/7Zt0 7YnNWOFkQSpWIO+vIPFCGfb9jPndrYulTH7UW7gkRRdv/rpjNq9sXOF6STqVhYxbK8M5YGAmeZxJ hmaZ7hGchL74IQ9BhKScoHodxIBUeV0aD+VxOxRKQiTLbovIAgNVD6yAOCgLMEbyWjrPVmJHkK4M Wod24k+JirnqO333EyO9Wvl1xbjRZa From: Zhao Zhili To: ffmpeg-devel@ffmpeg.org Date: Fri, 24 Feb 2023 20:25:18 +0800 X-OQ-MSGID: <20230224122523.143571-2-quinkblack@foxmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230224122523.143571-1-quinkblack@foxmail.com> References: <20230224122523.143571-1-quinkblack@foxmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/6] 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: Vo0fx4UD+bon From: Zhao Zhili It's defined by ISO/IEC 23003-5. Fixes ticket #10185 Signed-off-by: Zhao Zhili --- libavformat/movenc.c | 64 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 63 insertions(+), 1 deletion(-) diff --git a/libavformat/movenc.c b/libavformat/movenc.c index c4fcb5f8b1..99b93c1d5b 100644 --- a/libavformat/movenc.c +++ b/libavformat/movenc.c @@ -1179,6 +1179,51 @@ static int mov_write_btrt_tag(AVIOContext *pb, MOVTrack *track) return update_size(pb, pos); } +static int is_mp4_pcm_codec(enum AVCodecID codec) +{ + static const enum AVCodecID codec_list[] = { + AV_CODEC_ID_PCM_S16BE, + AV_CODEC_ID_PCM_S16LE, + AV_CODEC_ID_PCM_S24BE, + AV_CODEC_ID_PCM_S24LE, + AV_CODEC_ID_PCM_S32BE, + AV_CODEC_ID_PCM_S32LE, + + AV_CODEC_ID_PCM_F32BE, + AV_CODEC_ID_PCM_F32LE, + AV_CODEC_ID_PCM_F64BE, + AV_CODEC_ID_PCM_F64LE, + }; + + for (int i = 0; i < FF_ARRAY_ELEMS(codec_list); i++) { + if (codec == codec_list[i]) + return 1; + } + + 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 +1288,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 +1353,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 +7792,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 12:25:19 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhao Zhili X-Patchwork-Id: 40482 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:5494:b0:bf:7b3a:fd32 with SMTP id i20csp945384pzk; Thu, 23 Feb 2023 20:26:11 -0800 (PST) X-Google-Smtp-Source: AK7set89QM7lemjhOa0gccknZyyac/dcJzIe29zfrMbe+0g+nwhWjtlGHe5SkGNEzCb4Xa2wy1tp X-Received: by 2002:a17:907:1c0f:b0:8d7:6699:3bae with SMTP id nc15-20020a1709071c0f00b008d766993baemr16953518ejc.57.1677212770804; Thu, 23 Feb 2023 20:26:10 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1677212770; cv=none; d=google.com; s=arc-20160816; b=A18gbgcm9kDrT08YjOymPKX15DvzzA5pcAI4GXjiK26/JXzaOvy9Fu/VXgDgUhJQi5 zfU0UvBn5JVb5GXDj1N/YjDbRcV3SK1gAgwOhLuQkLVLNfqvjv6tluMoC7iiSitIWfqq t8K8fVkkafJrRfUMF2aI4UgQuR1ThplwtnFeDOgvH+AYVMku3UBDpCcL3FPaZw19PvG4 3G+K7vmB/7mqXAorQXBrUIO80CVwMxajaUisXiYwDHy3qVhrhiMN1Khu1Starv80CyGo q6qJkfKslLt5BfQpsjy2RqmvjYDHuOXW8naVrbLrJKXLS2u9y8nu4g+ZZy555cbfkwcM xxpQ== 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=9X6up2I+bLQhvUI3Pm/S6+nscvZ/Vwezb42njR9oZKk=; b=OVco0Lkc/2q40GJel+/IyqECbBhX1ycz7etJfdO1jWMuRM8fb2vlC5CZmArlTXejx2 O76uYHkKf7IVdv0gNR7ixRyUQ5RJ5YgoN+mG6lG74/y1Md+Z5ygBLGwvTH0iLldBdQeh ag6vl7i79iu7ZTtceOXHEn75a6BXzTIHlhuMr4PXhChkpwTF+xlkwux3PG7YsysRBS3G 5WqlWJevHDRCXmGk8dCHAL52z5Flb5jIgh7JX5ZuW6xNv3V6+c3Wvfz+mlf92NU8V6TB aL8pSBuyuZSru2u3T+Y3tlnISrWqb/CR6Hmn49Cu8lTWaV4xwXZiDGKYDbAvXJsnPd0O FaQw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=Ur4b5YWd; 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 gc13-20020a1709072b0d00b008b17a7e8feasi27025148ejc.976.2023.02.23.20.26.10; Thu, 23 Feb 2023 20:26:10 -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=Ur4b5YWd; 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 199EF68C0FB; Fri, 24 Feb 2023 06:25:41 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from out203-205-221-209.mail.qq.com (out203-205-221-209.mail.qq.com [203.205.221.209]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 5993268C0CE for ; Fri, 24 Feb 2023 06:25:30 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1677212727; bh=/IEcP5FQBtlXwkfK/BSjnPiE1mpFpftVPkb+uGtBStE=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=Ur4b5YWdPicXRklxaFedjRoXWR9ACzuUwRE+OrmEa7d3SxCMJN7iZw92/lN7j/589 6bViik0N6ZNlTs8h0WG+Y5eGdlzewOfhVOABqfCJPO+KYThPKhlCsskpG5FpFdW4JP N9smvUpirlSQtEcRUPzt47xpVyTGNRVNf1Kqje+E= Received: from localhost.localdomain ([119.147.10.197]) by newxmesmtplogicsvrszb9-0.qq.com (NewEsmtp) with SMTP id 6588BCBD; Fri, 24 Feb 2023 12:25:24 +0800 X-QQ-mid: xmsmtpt1677212726tvv85nyxx Message-ID: X-QQ-XMAILINFO: NGX5+lQVxpC+JVS5pIrRjmBMKzi5kGkjBn67BmGKvxKmUmlpaqv7fLkOuX8irg c4h1UXEXzkzKdHqFADALyoy5NDY/m0Mz640aggZHSvg1xHBTgdaGoS7cYdCzbTHlZZP9nI9eTWKy QMJxZ/n+VEI4Z/xDMy6VKJ1bN74bNPRCkeZojAgaWbpozl4GHMAH7FuTkSEuJBFgaTYr8rdkokQL UyhlyVKHVj9eK8mNddQSyipit04LES8vtb0xldqCFmf6S/1Pm8nvoar3oaqdYW7DqsuBBTiTd35a eU7+c6inpmYCulCVeRQq1ztj1Mh75+bWLHAzWNgVTCVgzOQCvkzpPpHj/hhNb7Vl9oOSziNmoouX Yi0XiIszGH6DlT7dkz1M/07X7YLcLWa0BRxY9mw/+XvIi/R6NXccHUL9dvCFpirpRpl8gATFPJQy 3sWeXbWReF8HhvoqW2B2CO1OcDAB9fR1pTamNft6kIpIuiJAIO/1pC+n3V14H5F7c6LXcKt8x2gX zbkVIsLBYc+T5zaoT0y16y5rHbxDiSrMitk7VMygrCFhkHI0b2iolNFTCSjVrox0izcpy1Y65sQW pFT/FCKBgDxsw7Gmr8mS/XndthUCKQEGlkdCwfMh5pjGpHwAL3NnN+/078ug1hF5UiUlDDHW5QWS 4KSEPD0xdJ0VtH/xkEhL+zQQ02VuKoUYmZgST1KgEns/l5W8CI21YWeOrNjiYjRixAkcHlrdqOKN kHPZA0Qu3AQPQv4F8qjV0/WwTawUpubxy0S+xih1+11CCZ9Pm1NuPqz5HRkeU7QCWh/yahuuoEla A8JerTBrMpZDnpfdABf55p86cvOW8UnzQvmENKgRll4KG88puFlzlKPzftB7oFrIX792JAyplU5z JUIj8mNXzlQakGLLfJd/yq69Rqfn4Oca77vedewY+PAt165oq/0ebGIcTnBCyfP8iQAAYXQy1vpI lHz86HImdYbggrBV+whg9y4G8UrxLj3Cayv8wTq6/qz3XXTGD1M8wYYAMfj6aQitTk3prmL2s= From: Zhao Zhili To: ffmpeg-devel@ffmpeg.org Date: Fri, 24 Feb 2023 20:25:19 +0800 X-OQ-MSGID: <20230224122523.143571-3-quinkblack@foxmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230224122523.143571-1-quinkblack@foxmail.com> References: <20230224122523.143571-1-quinkblack@foxmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/6] 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: Lqp+N5FN5iJR From: Zhao Zhili Missing floating-point formats support. Signed-off-by: Zhao Zhili --- libavformat/mov.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/libavformat/mov.c b/libavformat/mov.c index 6ab43b00c6..b125343f84 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -1590,6 +1590,10 @@ 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 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"); @@ -1599,6 +1603,34 @@ static int mov_read_pcmc(MOVContext *c, AVIOContext *pb, MOVAtom atom) avio_r8(pb); // version avio_rb24(pb); // flags 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')) { + if (pcm_sample_size == 32) + st->codecpar->codec_id = AV_CODEC_ID_PCM_F32BE; + else if (pcm_sample_size == 64) + st->codecpar->codec_id = AV_CODEC_ID_PCM_F64BE; + else + return AVERROR_INVALIDDATA; + } else if (sc->format == MKTAG('i', 'p', 'c', 'm')) { + if (pcm_sample_size == 16) + st->codecpar->codec_id = AV_CODEC_ID_PCM_S16BE; + else if (pcm_sample_size == 24) + st->codecpar->codec_id = AV_CODEC_ID_PCM_S24BE; + else if (pcm_sample_size == 32) + st->codecpar->codec_id = AV_CODEC_ID_PCM_S32BE; + else + return AVERROR_INVALIDDATA; + } else { + 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 12:25:20 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhao Zhili X-Patchwork-Id: 40485 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:5494:b0:bf:7b3a:fd32 with SMTP id i20csp945666pzk; Thu, 23 Feb 2023 20:26:40 -0800 (PST) X-Google-Smtp-Source: AK7set8q8rff8wCLghqMAQaoflYOB+EgjzMMpK+iCf+lX702Yu5jdZzpIZewPR67DntO/s3B02Tc X-Received: by 2002:a17:906:5f93:b0:8af:2a97:91d4 with SMTP id a19-20020a1709065f9300b008af2a9791d4mr21147209eju.14.1677212800548; Thu, 23 Feb 2023 20:26:40 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1677212800; cv=none; d=google.com; s=arc-20160816; b=fgcgi1tNe3gvuL9vvR34lpaolX4/3hKSN/YCUBaRGasjDAyF8jVFadllcZK1e7uzeu 1muUacudQDlTMxQHzbc/5d2dq9J4MWeP0T2r/2mYM1Eh7JGGcw74PRSeKdoPBZsRUCIz VBYcMZzUDdQXEIIZXDOnkc/YaHJJp2RjLBdfeeotDNiwDb1pQ26h1rc2wz/cKMoRcICv XcSWhR4CMEWO+vTJriCA5zO5txzS/x3yh6s0BQTMrECddnEPy5ZFI2D7GNc/t6A5mUQt R34MIo0NGX95mWOyZkTyffWroRbdExT/opBvhdTdD8Z23cWza5Qrk7DxVQxpvPleLTUx 4jmw== 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=wLjUYdph6ad+O2Db+UrfoUMlJz3riOvjoq5B8iI9wjY=; b=tDs2BBTVUb8dQeO+EcP75VVxUGueWv/oBPRn4nVjKmM5vEk+VllaFvoTR6glYQ7iEK 28ykChjFAz8uQyLNXt7C3WR87S+2F8O4eQGO0mV9CIqOBJv+ihDU8jj+bETWSm3msXht pZwuWCnx4E1bWsu0xf0eGoybaY3l5iJ7LxC6+7WhnQkHsrcS6Efgfzig9/PT/AnKcsG7 P0O8V7zDXaapU1b1LfbTbjCRBpSVtCtXHLYz/klE4M49yJ/gM6SOTnfuNhvkwVXStaZ7 Wq7A96q2L9CRsUVLXw2AB4357PKhEiPXnj01mUUPnwNf/yiOb7NkQMAv0c/6T/kaul0R jY3g== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=sdP9wwFg; 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 fp32-20020a1709069e2000b007ad8bc64c89si25936589ejc.701.2023.02.23.20.26.39; Thu, 23 Feb 2023 20:26:40 -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=sdP9wwFg; 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 ADA1868C0FF; Fri, 24 Feb 2023 06:25:45 +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 E12CA68C0C7 for ; Fri, 24 Feb 2023 06:25:40 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1677212738; bh=t1R2fE+gr4jI6mlGjcocVnu6s5abxAZU6a4nrjhm0OI=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=sdP9wwFg4X55Cds49bsAnWAEC1rvCpyngCMk6l+1moN/qCxP9Mj3KyDaFiLFW53Wv 1i/DOeaqUuY2R66WGy91QZzF9ojYpEaFHswDCVn8lzqEKuyJbuxHUqLezg42mIElBR d1IWe8TWqUt1hAwmPEkbf0C/Pfmqo5UKBdRTVCTg= Received: from localhost.localdomain ([119.147.10.197]) by newxmesmtplogicsvrszb9-0.qq.com (NewEsmtp) with SMTP id 6588BCBD; Fri, 24 Feb 2023 12:25:24 +0800 X-QQ-mid: xmsmtpt1677212726t5n1ki0nr Message-ID: X-QQ-XMAILINFO: OZZSS56D9fAjsN/LB1k4UNurWaxnZEXYQqi1E7OkDPBh75nKTTVD8qtRatqiGX EdZGwRX4uYf8tlJgL3K0+UASmmpT6fVCBwihJn06OFMQGSGNU0DGwzSSsjfZ7QJEOEMnbtooUnH/ JPoYBSsuKSLNWOxyyn48hM9UgTrFQTohb6Sui/rBaVuk+nmzwoxp/1NrUrWKOwE8CZ/U6xpKMig2 2gY8z1NEXkEfPazdXh64IcL0mMVSIa1v6mgh1h0PSx/hmgoQk98OGKwaCrdcqFI6YWWqaBD4nxj6 3JXW9/gy2oUbRX3ice3W/1jZWSqCq924VLWVFqO225bSsHhx9C6BzolGkSCyz0BmYb/egW4atT/F IdR3Nrr+n18QfxZdyAeDdO3l+A2gPNlnvYVmTIyqY62iNuyokXT2nRueUUwWSv9coBQ+G/ysONip W27KO7lVN+xh7lp9C+0ogX5s0pX/1ye+sxAF9ux0Fb5U+1ImkcHMhAAlr+UOgT6TIxmocY4wO9pi zvV88ADqudZ9u0pFLQFnHmhL5/p0LPyzqVATLxOBCWwObbVC7PP6til+A6tqtMSF7mBOtHrzwzxj 6ZyCm8+VZ35v2U1n9WoUDacwmLsA6PIxGOAJbZ8sPkYTa9Q3BJ6xpVM4XBjTgS2N3nMSHcfOiLn8 e9/v3VEOrPjHaWA00+wHTaEwhzB0/rohOfnSzY0ZSfNr36WGBSLGKnxy2lnp4qCL83ExyLzbnX7o PVOO3+eQuk8a8LZ5BgnD2IQKNmllinmo2QI2NLA9vw4kb5LQMyth8Jf4ocHqRjNx+BCVY3X2vYHb HVhfuAAcFqxbIiMLDjUvIQTHIgUZdLl8Qvon2s9oYNxHGaKw0aDQ4IW+Pwa1ok/JmAiX6Fu5t6XW ZCVMIJp3egw2vbL/PojLWtjuvmdVGgjqUBdknKYPxSshT0AyILe2RPVh4OmU9foEg0bYU3a27Ftc pDyzF1d/XfJLxefEcAOay3twlVn1rd5LSMqm/XSxo= From: Zhao Zhili To: ffmpeg-devel@ffmpeg.org Date: Fri, 24 Feb 2023 20:25:20 +0800 X-OQ-MSGID: <20230224122523.143571-4-quinkblack@foxmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230224122523.143571-1-quinkblack@foxmail.com> References: <20230224122523.143571-1-quinkblack@foxmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 3/6] 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: ijJdOR83xshK 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 12:25:21 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhao Zhili X-Patchwork-Id: 40480 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:5494:b0:bf:7b3a:fd32 with SMTP id i20csp945245pzk; Thu, 23 Feb 2023 20:25:52 -0800 (PST) X-Google-Smtp-Source: AK7set9EACcUaP8YoTRasQo0vwpVPR1ayZA6xvWdei1KhkZFtm6BMN+Md7AHgy/2pHP/n/39CijP X-Received: by 2002:a17:906:d0c7:b0:8b1:2f0e:e3a4 with SMTP id bq7-20020a170906d0c700b008b12f0ee3a4mr19261219ejb.26.1677212752389; Thu, 23 Feb 2023 20:25:52 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1677212752; cv=none; d=google.com; s=arc-20160816; b=zvkfunxGGX9K94VfOHQQTU6bTQt8nRqPYKIHCbE//HwiTYpE27pGmsVWM0Kn7zq9+Z Ellk5X2ndjaJtlD11uDmmvLjGeFvAjTDRuTN602JsWeEZlgqT+c8gSbPmlJogyTPmmG5 9gVsgcRQc0Vts7I2XMVkbb44/PBISh8a28n+sCGy+BNli4nhY3d1xo6QUAEbZ4U216wk IFFZhrm3MlusTrR0+UYvXCU7QU7DLfV39ng9JlCVn/nVHXPo51OKrB7Y4M8xjGM9+9yI T7vndCJVFjkz4sDJhTNwhOgRbG0aSBNg7UMaksfmn3dehxucAdk7xMFplq3Y10OCkTyH Dbig== 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=t+GfoCuEAslx2gmkc9BZtnonwNATHqcFVLrPFqvS7o8=; b=m7hXFq0eXP5peFf25d3cgWoar2j8sdNLVwQzdnWzeCXwBjGuqcH/tIueQKq/p4H+4v voVx/DS61D6ZgHq1aa6GXXL8MjgQ58ee1YErYGxZ+Bc69W/iCJ1rK52CrLoOQf4gDOgM jCTudXxbCkm+5JeIFDBFQ1POcuNuxy6QvTcq99LuyYb40yTEYG96n1r2mJctnfMlpqU7 9cxoG4AvfOOdk2C39v4ypMmNNYA3K1JVKAcvid1lrbcQGPfzNV6P+Thla9Yg3cojwXKZ GS17y4HtfXRUIFI69ibKXKwG/qnwseSJQ3jH0migpS8RmEiafqo3BRI7e+VABF2rqo+n XdDw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=MXxetmQR; 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 fi23-20020a1709073ad700b008cec55af409si16051338ejc.411.2023.02.23.20.25.52; Thu, 23 Feb 2023 20:25:52 -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=MXxetmQR; 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 85E0368C0D0; Fri, 24 Feb 2023 06:25:38 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from out162-62-57-87.mail.qq.com (out162-62-57-87.mail.qq.com [162.62.57.87]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 3D05F68C0CC for ; Fri, 24 Feb 2023 06:25:30 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1677212728; bh=5r9pioSkMoR6y95AycZ4ZHuSHaHwU+WyyfDrYIjxYsA=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=MXxetmQRrxd9KoK64/TB1qNKBL5T8+FH+lWGtLdZhlkAObqI5AXrF+63/yPPE4ICf omFKWruMj3LCe5fFwQqGqTCullvC5eETkLOaRbFn6kBlFFJJi7IblCbJKzoQHaEtU0 TAUW4X4ur5zAgCsEdOjFd5Hb8P4gBi0osf1djSGc= Received: from localhost.localdomain ([119.147.10.197]) by newxmesmtplogicsvrszb9-0.qq.com (NewEsmtp) with SMTP id 6588BCBD; Fri, 24 Feb 2023 12:25:24 +0800 X-QQ-mid: xmsmtpt1677212727t2psrnjow Message-ID: X-QQ-XMAILINFO: MN/qhr2Qwf5HkDtfxo3Ds36SJfmtOJGoxt2P7MWSg+pflljOjfLueGijU8A+7T +9hGp7cMWer3c56UUKrwvK4yejQ9J4lg4qD8rJ5kEQZv10u9aRJPG0vT1gkAWQ9KAa/ktRZQ4VLt /IiyaC/3kLyzKDKeW6wiQV88SewXDYyTq74KpikX2UwJO9rTiCeJsQu8+08Ng7d750u7vcV21O9b K7Xl25K8IdYH2DAphHuneHK8BjBDfiHeGfNL9TI4F4Fy4wbhHOKhrANXnPb8E0mMR591Rra+9SlV CrLamhWtyOwHRrZ12JEOxjFPC2jHYmXp+pB3yNa4KIRaY/2IE6Ovtj9kkxt1thLubjPfMOcBbLCr X/CFaYX+SQHElpRO+Z/U3fv38DFU24iO+xnglxu12mQw0ZmSekAl7VcPKKjudFuh8x0c3L7LgKeu x2nJIVsHSrnqgY3w2EC8bPf+gHcrQJm2hUmckJ66tsZ+AI7/HMgr2RbTi/GVSNFW/FUcVl0cK7j8 ybhV2FmaG/qbqllGMmV/M3Ub2lcNlbD6h4+2a3Z2TtnJLm+GSfzvO1gQcArI/pfAFvT2+/u6wOQQ 87hq8lkwOSTGjIierKZPtylRhenK7MNn35KUOWMGDm779e2HYD2WTbr3Sdv73kh5mxk5dVoSJsv5 oVExiNQ+zjUM81TQEXxdSdEnN3iE33EjcGcnjY9f3DHzqs1Jjo8qg+sckBtOAxcjKZzTWPklx7cP WbOYvhU5U+iLQ5qPLRdYseFmyJ5CgNf0Vv5WE11zqhliSNsUs4DA6g1UyGwJ9HYjgbBSqyQGa1gK RHUakUujhODVEgBxD0W2xOCKwVyYNk7ZahI94aZZ+Px/XuhJw56X+g4wj1wFbhU99VAnFfDg/ZgO +HqinSMY8QZSsXNc4zK5WGuB1gYnV2ehbuKH6HI9wf4rVt+RPk7clt3JsC/9QigNncFgHQCegatZ U/R57Ilcwj9WY2EK8SY8v4c2Y4tHghaZOh8he/n8b4zlOWK13uODLKnc8tJL+HwXdKckts0NE= From: Zhao Zhili To: ffmpeg-devel@ffmpeg.org Date: Fri, 24 Feb 2023 20:25:21 +0800 X-OQ-MSGID: <20230224122523.143571-5-quinkblack@foxmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230224122523.143571-1-quinkblack@foxmail.com> References: <20230224122523.143571-1-quinkblack@foxmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 4/6] 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: RTfhN/dBFnlQ From: Zhao Zhili Signed-off-by: Zhao Zhili --- libavformat/mov.c | 79 +++++++++++- libavformat/mov_chan.c | 265 +++++++++++++++++++++++++++++++++++++++++ libavformat/mov_chan.h | 26 ++++ 3 files changed, 369 insertions(+), 1 deletion(-) diff --git a/libavformat/mov.c b/libavformat/mov.c index b125343f84..1db869aa2e 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -940,6 +940,82 @@ 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 ret = 0; + AVStream *st; + + if (c->fc->nb_streams < 1) + return 0; + st = c->fc->streams[c->fc->nb_streams-1]; + + /* skip version and flags */ + avio_skip(pb, 4); + + 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[64] = {}; + int enable = 1; + + 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 + int16_t azimuth = avio_rb16(pb); + int8_t elevation = avio_r8(pb); + + av_log(c->fc, AV_LOG_TRACE, "azimuth %d, elevation %d\n", + azimuth, elevation); + // Don't support explicit position + enable = 0; + } else if (i < FF_ARRAY_ELEMS(positions)) { + positions[i] = speaker_pos; + } else { + // number of channel out of our supported range + enable = 0; + } + } + + if (enable) { + ret = ff_mov_get_layout_from_channel_positions(positions, + st->codecpar->ch_layout.nb_channels, + &st->codecpar->ch_layout); + if (ret) { + av_log(c->fc, AV_LOG_WARNING, "unsupported speaker positions\n"); + ret = 0; + } + } + } 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); + } + + avio_seek(pb, end, SEEK_SET); + return ret; +} + static int mov_read_wfex(MOVContext *c, AVIOContext *pb, MOVAtom atom) { AVStream *st; @@ -7784,7 +7860,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..10ebcdc08f 100644 --- a/libavformat/mov_chan.c +++ b/libavformat/mov_chan.c @@ -551,3 +551,268 @@ 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)) { + *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); + + if (layout->order != AV_CHANNEL_ORDER_NATIVE) + return AVERROR_PATCHWELCOME; + + 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) +{ + AVChannelLayout tmp = { + .order = AV_CHANNEL_ORDER_NATIVE, + .nb_channels = position_num, + }; + enum AVChannel channel; + + for (int i = 0; i < position_num; i++) { + if (position[i] >= FF_ARRAY_ELEMS(iso_channel_position)) + return AVERROR_PATCHWELCOME; + + channel = iso_channel_position[position[i]]; + // unsupported layout + if (channel == AV_CHAN_NONE) + return AVERROR_PATCHWELCOME; + + tmp.u.mask |= 1ULL << channel; + } + + *layout = tmp; + + return 0; +} 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 12:25:22 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhao Zhili X-Patchwork-Id: 40483 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:5494:b0:bf:7b3a:fd32 with SMTP id i20csp945524pzk; Thu, 23 Feb 2023 20:26:20 -0800 (PST) X-Google-Smtp-Source: AK7set8f9ronQPncvDTaZIJdyEwPPTKaHALfk6d816amn8+3LmFL3vGIf2gbPF+/wtx4cLQQSsxJ X-Received: by 2002:a17:906:1702:b0:88f:79e7:8305 with SMTP id c2-20020a170906170200b0088f79e78305mr22011369eje.63.1677212780454; Thu, 23 Feb 2023 20:26:20 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1677212780; cv=none; d=google.com; s=arc-20160816; b=yzo1Xp6a5U7FqHrYpUGRg34IcTauPBSuR4/Co5aVUVIGpOKkBCl8h8tliru5qIv87r B1H6lbP2be7X5bgnp1cWXI1Y+sPgkBZZ1gEwNSG/2/HLLcOX0dFNbaiNt0kTTfyNXqeA 9/OiTwp47ydewNoAsMoZyLLAz0WzUbG2OmDtAN1qa+6QS/8kmYugbY0+YG00dRpTEYMf hWZ9IvvnwoGfUsuene3mpViYwxQY6L/syI5rum+6/Z3yuXSoohncX4DrmRzJrAKP15Z5 lO4PM7MrxtrVKUBjxjiAlaTsUsJFA0pVvACyu4lgX2veEM+1E4AfUXXcebf/SqZZ4PVn EtlA== 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=7OBYQ3YKCfw6/Zx/VtN3w3hDXa1f4OpeKZQIUW2nJa8=; b=rb2urGIGuIS58Q/4uAzmn8UCX6mb0CeY0iwmPG15MXIHEjkUR6VDmemdWDtdcLuB9m VZ/HnysScgRvnGBrMW5xj7iVggUPv2qnyVZa7GnqRvwyXnWyfHoRTcJ8SniASWSCCJqX NVKiG19MBEaOzDOnh/mlpn5ix/ugcyvVhqU+YY+vsSKnpOHo8LCAZm08/vofdIqfXkAI VVq9ID1GG8g8V5qwqjGy/Agcxl00QTqfehx8HZNAQSAMxQyKPWhKmbfcUQhDPr5CEJln xuCryE+ueX6/YwAXbCGzB2ZboACmJvPaW518zwOQcMsyM1G+ZtJo5ii2aE8uMPUoZvlb 4Cog== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=swbw9eTS; 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 e19-20020a056402089300b004acb305fe3bsi8262648edy.605.2023.02.23.20.26.20; Thu, 23 Feb 2023 20:26: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=swbw9eTS; 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 39B0568C10F; Fri, 24 Feb 2023 06:25:42 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from out162-62-57-137.mail.qq.com (out162-62-57-137.mail.qq.com [162.62.57.137]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 4E27F68C0C7 for ; Fri, 24 Feb 2023 06:25:31 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1677212728; bh=Hk7Bf6isJEecwnd9auxa37t9drtZsqq87j7hnonrVBw=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=swbw9eTSzsOX745Epflf5EIGsL0FvfxUiiwnhFR1EqU4IouACHKUpMLXVWoTd70dH 6nznOB/D2mKq+G1H3iJjxwhIBKI19ImTbb1mb4XZi1tGerIpyR3BOiVyEnyWaKu5Sn wJNscNJ0GIQb56Y5KvkBotqHVFv5wYth2ZdFV8t0= Received: from localhost.localdomain ([119.147.10.197]) by newxmesmtplogicsvrszb9-0.qq.com (NewEsmtp) with SMTP id 6588BCBD; Fri, 24 Feb 2023 12:25:24 +0800 X-QQ-mid: xmsmtpt1677212728to0ewkfzw Message-ID: X-QQ-XMAILINFO: Mdc3TkmnJyI/FsHtzPj5lINfR8DgXhLFGVZ0UDVYDVZgRm9HuHzDNQJj+aICQR 042wlAchRjoI3MecQIjECPed/5oRULUyz4cxSXRIlEYZ/XgAdduKQ/qpL3Y83Jvh5i5DP2zyPFl5 zKds/8txbKzNILfxJpLLn7sLd82CAVvl6IB1WLOOGjByiV6eBOhg1AyVWpjDxjYscy7T8biR4BND LDrGG7Yp+BlPH3vZROXCwm5nFd94DnZA/RmE4qoHtiXASglR04QFUfYXNy7GCkkiz9A3xjALY7io JYsPsRcvIfDu6R/2vIlGmphj7iFOxIuoUCUE/UYpJ+10nH7c9cz9inHw/y3EJi4QjxL0XJ1r5iaI Oq8kHR9R386rgxs+4Ri/ovrma3iMWLa0P77DjiclTC3WQhhhxFTWKyWFzSlMNOE6U1rR6PGDxrdY S17FmvwIecXpq/xew3mGxy5GjACjUc9f19yfXbLPsPg0SLQxEyO6FnL+rtiJWYBYLWth2wQ5kPqw vTx3qr+kaNKf38C/Y+tR+tWprOrCVNBBX+BsLVpOhZZ7wtcFBMUWRGoAbft4t9CfsDWY5JkESRWF 6lZ3YTb9HcQjAmguB1nkgF/IErw59uoJFnCUuLTo/k6lvDExMyghBWn48JHQxuTuyY7TX6QKnvmM shOQGgPrUShc6jM/kY1YUBu8MPN3kl19kCTQDQH4+RIQttkRzhTwPhIW25RjJjtwXuLjd/iuDKzU 8n1q7i0yjHF8otI3X6f3FS65jzjGrTiatJZjS1PAYx/7bKRkzqWuui+zT5ZqTzl0lvi8UIhH9CQl Flm5HWKQlGgqf6XfkDVPMmzrnnJrCrS+nJbe4odqgUdLUPxfiSmY3VIufmNu+CfrwtNN9uGcjTg6 KohTHMsxIbfkYjER4rrgQHM35EX39ihg78ZzFUUYASMt7z2gQGGTdxKOZXuJsPi9cA3Qo3Ci3XQM xkYb2dhlgCr0w31BVD513f4iIiZkQ7AQsUxBP4QJ8oXmlUM1BtiHfb1gt/NPrf From: Zhao Zhili To: ffmpeg-devel@ffmpeg.org Date: Fri, 24 Feb 2023 20:25:22 +0800 X-OQ-MSGID: <20230224122523.143571-6-quinkblack@foxmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230224122523.143571-1-quinkblack@foxmail.com> References: <20230224122523.143571-1-quinkblack@foxmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 5/6] 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: bPba4j4VP/LX From: Zhao Zhili Signed-off-by: Zhao Zhili --- libavformat/movenc.c | 44 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/libavformat/movenc.c b/libavformat/movenc.c index 99b93c1d5b..2b84ed1afa 100644 --- a/libavformat/movenc.c +++ b/libavformat/movenc.c @@ -1203,6 +1203,43 @@ static int is_mp4_pcm_codec(enum AVCodecID codec) return 0; } +static int mov_write_chnl_tag(AVFormatContext *s, AVIOContext *pb, MOVTrack *track) +{ + int64_t pos = avio_tell(pb); + int layout = 0; + int ret; + uint8_t speaker_pos[64] = { }; + + ret = ff_mov_get_channel_config_from_layout(&track->par->ch_layout, &layout); + if (ret || !layout) { + layout = 0; + ret = ff_mov_get_channel_positions_from_layout(&track->par->ch_layout, + speaker_pos, FF_ARRAY_ELEMS(speaker_pos)); + if (ret) { + char buf[128] = {}; + + av_channel_layout_describe(&track->par->ch_layout, buf, sizeof(buf)); + av_log(s, AV_LOG_WARNING, "unsupported channel layout %s, skip 'chnl'\n", buf); + return 0; + } + } + + avio_wb32(pb, 0); /* size */ + ffio_wfourcc(pb, "chnl"); + avio_wb32(pb, 0); /* version & flags */ + + avio_w8(pb, 1); /* stream_structure */ + avio_w8(pb, layout); + if (layout) { + avio_wb64(pb, 0); + } else { + for (int i = 0; i < track->par->ch_layout.nb_channels; i++) + avio_w8(pb, speaker_pos[i]); + } + + return update_size(pb, pos); +} + static int mov_write_pcmc_tag(AVFormatContext *s, AVIOContext *pb, MOVTrack *track) { int64_t pos = avio_tell(pb); @@ -1353,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 12:25:23 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhao Zhili X-Patchwork-Id: 40484 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:5494:b0:bf:7b3a:fd32 with SMTP id i20csp945608pzk; Thu, 23 Feb 2023 20:26:30 -0800 (PST) X-Google-Smtp-Source: AK7set9tusnEtP3lkDEiQMRVd7e7c3LegI/icN1zWLiV2bPpKgooDwlfajEFMJ3kem5i7AOV7bSr X-Received: by 2002:a05:6402:31ee:b0:4ae:eae1:1458 with SMTP id dy14-20020a05640231ee00b004aeeae11458mr14833588edb.31.1677212790460; Thu, 23 Feb 2023 20:26:30 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1677212790; cv=none; d=google.com; s=arc-20160816; b=xWszPO8TtZq7G8PiW06ECZd7bVDb52Hvsug2bp6lNAn3mCd+txdA/l94qNNIzEk2Bl NaPbGhJpSer6Ztl3ehUqJwUERw6oOz22nnlx8D8k7AV0SQEM6NjpBw9BxehZi7AZ1b7q HRaXhjfhtK3Xw4uBP5mDWNwHr//beB4YfTtOVvmm2prAlIsSvyVKQRrUugRpl807C8Up W5qHuzjTlUG2aXZMFpUAx5JeGUfMoRjVGr223tWv31/gw3nuiLBFI9twdGQ0X3veh+Li nlqi7GA+Xu2fGafnRLBxPuaGDg0TIxqqOeyc5++mP16XJ5qY6Q3XHXEWAr0M2hy95FwA qJsQ== 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=mWF0uOmULZym9XUTvLgRQXT6Pi0/CuBHnNVgXa/4qFI=; b=BOGxe0z6s/GBsSQrmHb9lprvijDjPs6eU/5c5ciRzXGJ3i3HlsRkJRE8mgoBBPIVm7 e8BHScBhYodrizI30Y+kLiWpWb92PKy6gnj2VtmPRY9MNetn5U2ZwqF7Ebkf9eWJErj6 mnyHtTZDfFGOiGA9BhLgQOLI3m3e+Lrjxy3NFS+atpg7rXEmYhEe6Q3s0YgljNJaipT1 YI4asNDHjWFCY61j5EF3iQOw3tDo3g67j3Zf7jLOZWhTgmAk2J9g/859F/cztGFpwGml EayNRkpC90vsfXyvE8Nti4tYGHPxphhfUTDghdwlv7843t3OoOUKtCfZd1vFDclmvxGp wioQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=DAsHIYXU; 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 ca12-20020aa7cd6c000000b004ad6ca85376si11978726edb.223.2023.02.23.20.26.30; Thu, 23 Feb 2023 20:26:30 -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=DAsHIYXU; 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 611CB68C111; Fri, 24 Feb 2023 06:25:43 +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 3147468C0DE for ; Fri, 24 Feb 2023 06:25:32 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1677212729; bh=Iz2QjK/UuCMxg7YxQ7GR9EEyIWiCXn7Ss2hx0J1Xsl8=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=DAsHIYXUO2CVuwMU4Sonh2OgVc7+FBGAbDFAFWNmCPFX0ec79vWl6gvmi9Pz0G+zW 3snK3kRXw1MXkhO2ITa0+ndF/6HrZKA6qlAGsdhKMYmKt5STs9B4kGp0Cc4A1o3I4x c4ywD2vrbBuOcCi5Tiitc0VzNvXGfqhckRiBmNns= Received: from localhost.localdomain ([119.147.10.197]) by newxmesmtplogicsvrszb9-0.qq.com (NewEsmtp) with SMTP id 6588BCBD; Fri, 24 Feb 2023 12:25:24 +0800 X-QQ-mid: xmsmtpt1677212728t89go22sb Message-ID: X-QQ-XMAILINFO: MC9b57iUs2xB8/5pTIIE8IGLtjuIITcm9RaCjkefGYEiewjY59uMuKy+rGDAa5 m4SEvMJUmKMP5BekJGAq2GUPoZ0OAXJ4hFwp7UMwXMJ6e2tH8bk9jGRUBZWJDXuHHy+XMnzaEhSU mxB1PrkowyA9EtzJvPM6Jip1n6MJkXsGEFd2uu1MLnWI6wwiIksKDFKHTbP0+sKQvkfhK91lu76X A/2SP+oTtAplHaX2GGKVMOhGbUAGUuSiCPv19lY/8ItRgG6TvqyPnkgALuBizGO/7uSkTQPQ7N6N oDGKZxkLYtbamnVTXKShTT9CyKG+QYAusjQ/TNxdH+oY6AwhOdA43+2WL2tF4Q6cl0/7nfJbovpl WHFfLOMQuMivyQ7uztBwnlkH22wRplbKZySqT0EyDF2TYEMkr7M+d3co+z6zbnz+aUmrmIEUWNd0 2BkbqOmM09Zcod+KB15wwQ+Fk03EPWpY6krBdyWGatqB8bUPQLazAx2itZp+COubOTO5rduPNXdi QTU6ZvXCKmBsPGrFbCFUvtbxZRUlvVmTuog1Qk8mN57mu6QI1JNOwrM54nzBI8TklPl6QnR5jwUb b7Y8MU07IPaNHrvr5SXyOBhr4+Z3i45DwxPxUDDss+JrZoR41Vb3xdekvovkrIcdPdcvsiTrRLng 2Vv0aDXgrP6ddeubMXOxZqWiSegoWmLfgL/KCZ4Ot69JwmGmBbJZ3OM1a56ZIBxXMVlNsOwrn30b UQZPzj09s069G5+CdqmUV03rZEplzdvUImrX/2GGN3wMXyK3loPnApe5H+WGmJJMvPNjDJ/KOgVf IIpWmnHamFqprUHmr2TOCgYjNGwKc5oS8mePATHlOiAUFKjyM52vozhUfxKDfRY4tDRK+nKvrted fJrbKaeR/vzqFK4s9Cty/WU35B74tGY9dQT2eObgYVwMEXalwcoCvCthHvxIm7Djq1p5K8SsqMtc YDclwJvOw1RxUFBLTWqdrxMlz64tsW From: Zhao Zhili To: ffmpeg-devel@ffmpeg.org Date: Fri, 24 Feb 2023 20:25:23 +0800 X-OQ-MSGID: <20230224122523.143571-7-quinkblack@foxmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230224122523.143571-1-quinkblack@foxmail.com> References: <20230224122523.143571-1-quinkblack@foxmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 6/6] 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: uGTCkuiwbL5a 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..a37a0936dd 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 tests/data/filtergraphs/mov-mp4-pcm +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)