From patchwork Wed Sep 9 13:07:57 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhao Zhili X-Patchwork-Id: 22229 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 22247449707 for ; Wed, 9 Sep 2020 16:08:29 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id EA14F68B875; Wed, 9 Sep 2020 16:08:28 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from qq.com (out203-205-221-205.mail.qq.com [203.205.221.205]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6AD6F68B837 for ; Wed, 9 Sep 2020 16:08:20 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1599656896; bh=HVahzoIJkyQVk3jMuD1FCqT2nhnN7EKronOVCcsUzzg=; h=From:To:Cc:Subject:Date; b=auAQmeEdPdzKG/PmezgmdHKna/zzA/YYhvsPOJGoiHR2/a16NfCeazHwxBBNfq0fl 7UZp9VVCUXvx5v+7ogg2OgaLfqjSm0Dmu+CQMGMbit76YNKOd+wmuVxZFFwUl0bZNH qr2529GOqEILkryJP1Ex+YTxHfIrLy8+Eyjy6ehg= Received: from localhost.localdomain ([14.17.22.37]) by newxmesmtplogicsvrszc6.qq.com (NewEsmtp) with SMTP id 1F7A5C1C; Wed, 09 Sep 2020 21:07:55 +0800 X-QQ-mid: xmsmtpt1599656875tlkixqdb0 Message-ID: X-QQ-XMAILINFO: Ni85YrLDmO92O+bzF+yxCXV3p2sCjlLsc2kcNEqCfIghp4fwVgfBSyrc3mV/qp wdZYbW81fMRSHD7jeAVS3AFWohGGn5mcKfY16WhewkelkhPGE+kiozbQi+u3+12xxMddsmt2sCft +f2WYlSfHsBUGvWoBz0T/8oS60EWfM4cYG+JlRiNzPnD9Jsqs488mKT2pDl7iakQbc23XqiGABaL 4VhmO47xg7ivHBn1kqNm7PXFHTw+qstrI7OK2XJRx6/uV62E+tCbVPcyOHbEDl7s4toRaIExVtiW gEhH7OTKd5b/1QT62T5TZEfdq3JLV9WxN+xpneKzlrueXY1/5d11ZqnHYYGYIwCs21h+k2Vn6Qtv ZIw9oLdwaeD+C99WtGHpgJGyP5GfooVSrJF6+DbcBoZAd0nxLz7Oed6WJnAeOOIDWnamjb6u1lT1 uXhzygjsDD4oFt2fHq3zojDRiir1h2+D8avavSthnW+LnJXMxIoMk3vWs2XwkYCQb9tdygMxJFbM Z5LaxwI2Zig6InuCRLq6KeMthhwem8bG8R/U5buOTuAI8aqCzn8jnLnUL2zukxvzLs3iPic95VC7 BksUhChgSuy3n/zX3LUeLtOL79AqEqHuoMLdIFYi3nsepUKndHsMEk+nw/l+RIfCDcv5W4ChMM5Y ctErsnuTrMRVIckviwkomDBpbW6zZ/oYJGVB6ea2LoSv2sCNKQC3Z4CCIpCgaYQPP0K9lSal6954 HY+av2/nfWL04oN4SFwuvoAbVzOEOoQLGJXGD7BxHCpFw= From: quinkblack@foxmail.com To: ffmpeg-devel@ffmpeg.org Date: Wed, 9 Sep 2020 21:07:57 +0800 X-OQ-MSGID: <20200909130757.3930-1-quinkblack@foxmail.com> X-Mailer: git-send-email 2.17.1 Subject: [FFmpeg-devel] [PATCH] avformat/mov: make compatible brands more readable X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Zhao Zhili MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" From: Zhao Zhili Use comma as separator between multiple compatible brands. --- libavformat/mov.c | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/libavformat/mov.c b/libavformat/mov.c index 690beb10ce..8f5341f925 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -1093,7 +1093,7 @@ static int aax_filter(uint8_t *input, int size, MOVContext *c) static int mov_read_ftyp(MOVContext *c, AVIOContext *pb, MOVAtom atom) { uint32_t minor_ver; - int comp_brand_size; + int comp_brand_count; char* comp_brands_str; uint8_t type[5] = {0}; int ret = ffio_read_size(pb, type, 4); @@ -1107,19 +1107,25 @@ static int mov_read_ftyp(MOVContext *c, AVIOContext *pb, MOVAtom atom) minor_ver = avio_rb32(pb); /* minor version */ av_dict_set_int(&c->fc->metadata, "minor_version", minor_ver, 0); - comp_brand_size = atom.size - 8; - if (comp_brand_size < 0 || comp_brand_size == INT_MAX) + comp_brand_count = (atom.size - 8) / 4; + if (!comp_brand_count) + return 0; + else if (comp_brand_count < 0 || comp_brand_count > INT_MAX / 5) return AVERROR_INVALIDDATA; - comp_brands_str = av_malloc(comp_brand_size + 1); /* Add null terminator */ + /* add separator between multiple brands, add null terminator */ + comp_brands_str = av_malloc(comp_brand_count * 5); if (!comp_brands_str) return AVERROR(ENOMEM); - ret = ffio_read_size(pb, comp_brands_str, comp_brand_size); - if (ret < 0) { - av_freep(&comp_brands_str); - return ret; + for (int i = 0; i < comp_brand_count; i++) { + ret = ffio_read_size(pb, comp_brands_str + i * 5, 4); + if (ret < 0) { + av_freep(&comp_brands_str); + return ret; + } + comp_brands_str[i * 5 + 4] = ','; } - comp_brands_str[comp_brand_size] = 0; + comp_brands_str[comp_brand_count * 5 - 1] = '\0'; av_dict_set(&c->fc->metadata, "compatible_brands", comp_brands_str, AV_DICT_DONT_STRDUP_VAL);