From patchwork Wed Sep 19 13:58:31 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Moritz Barsnick X-Patchwork-Id: 10405 Delivered-To: ffmpegpatchwork@gmail.com Received: by 2002:a02:12c4:0:0:0:0:0 with SMTP id 65-v6csp738288jap; Wed, 19 Sep 2018 06:59:07 -0700 (PDT) X-Google-Smtp-Source: ANB0VdaR7PSmLs7KMjj16IUqoJyyed10L4ABz0cFr/GX1K1+MML5Y0teX8eZlrkNRZ4xYaXbI3kE X-Received: by 2002:a1c:9692:: with SMTP id y140-v6mr19759276wmd.82.1537365547831; Wed, 19 Sep 2018 06:59:07 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1537365547; cv=none; d=google.com; s=arc-20160816; b=kNcWux1aX7Bl4jDku7p8Licm9QE091GEJ9Bs9ZzJtv2QxrYjmLOCKyscS31vy37Jyy TAiGcNJWt+C9UKkUerd+o817v93vbeJrsrDyAVpnn84iAolc2ngHlwR3cYioF5k5d9UF xZ7HuHSSj817HYBY25Aub7Ag7wd+A17+l5YWPp1xuNIaqopL0+NboFtclLurxLuqfefS vit2N5QhDDyUaQ71Hbr/a0HsnGtcV+09SZuAstSxQ+Jq1r1Up6vdFnW1zPOwZo6SM8rK s7kYi9DVkpRheKvo5RBSFrmJsHgsTTQG22jRH7Leqjo/B7Gkzi0GjUQVRxvI4zonZ8Co OquQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:references:in-reply-to:references :in-reply-to:message-id:date:to:from:delivered-to; bh=UVdij4ECcoqq9kLBNxDUq//baIe2WoCdP9/7jW2F1pk=; b=xOGZWDoEgz51biAh2VkHMD1UDjfsx5PWfhMqt7WPfWxJ/hNuPy49NGRYlc7VY7pZsU Qr61wroObr+irixm7N6BTAGOpLMOj4L4+vTHNrP16DVw7f4XTQgcbaIojzkw4clFQ9Tw rxUgsknAIdh+0ZVhaXiJB/c6IcSoHjKPbpx8E2NDbceMRxE292SV4leGPELwdSwafHYm R7Vy8NnHkyluyoM/QTm/I6s33rL6Hy42aaWsvKLDoYP99WyIpR8Pq55MTObQDOVnk6iD +H2fgqHtLHGr6ORG0YTHwRUvcJAZrNvM1hFZ1G7MQD4l1XdCEuP37L1CsSrizCn9G1rD 2kRg== ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id v10-v6si15510478wri.179.2018.09.19.06.59.07; Wed, 19 Sep 2018 06:59:07 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id B17FF68A5FD; Wed, 19 Sep 2018 16:58:40 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mout.gmx.net (mout.gmx.net [212.227.17.21]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6A3AD68A468 for ; Wed, 19 Sep 2018 16:58:34 +0300 (EEST) Received: from paradise.fritz.box ([79.223.50.137]) by mail.gmx.com (mrgmx103 [212.227.17.168]) with ESMTPSA (Nemesis) id 0MMCSP-1gAagU1hhF-0080DL; Wed, 19 Sep 2018 15:58:47 +0200 From: Moritz Barsnick To: FFmpeg development discussions and patches Date: Wed, 19 Sep 2018 15:58:31 +0200 Message-Id: <7c20364f6ad0f6fb75f3a362ea7da3026c37c53b.1537349317.git.barsnick@gmx.net> X-Mailer: git-send-email 2.14.4 In-Reply-To: References: In-Reply-To: <34079525021f9afa22dfbae674203b85968be872.1537349317.git.barsnick@gmx.net> References: <34079525021f9afa22dfbae674203b85968be872.1537349317.git.barsnick@gmx.net> X-Provags-ID: V03:K1:qJnMCB+N0Pupt0wKe2Kn6nIfZnMX/w2ImyP5X5LI+LtqMULQ0/t ayFeFYfQRNR3bnEaGbC3l/4SgaromFeVg9Y1uIM+8iZyMDUVdALSeCJ/yDLaMprmhWoNERV VwUNAdyC6RK4XwszFxTx0tlD0Ibn7vvfk1ClWPmlx5OgCv1ZKtL/e9O5Zhxqu0HzaOMROZb 01Y5gyChuetO9ebShrRsQ== X-UI-Out-Filterresults: notjunk:1; V01:K0:5h2eCswnqv0=:mUf7Fi4w7fSm1pmk35x9F0 DAHXghAKYWWgBfDSiI0Zei5a/IPaqzbNVNWq4IUZIyhjNHyJmOI748M8ZdqrhTTVH8eLHxPDT 9jC+svNX/ZoVfDOz3fGP/FDzaarYnYQfJs2ljV//r/J1BVKR0aoddMceGYNxW3C2oKDr/Ws5b kiZv7OMPYxHG38s0noH7lymZ0AygLfaItognNmCFgxLAhA4hha0xXm4gp4tRjz92T4+8UoN/U spdbQTkI3glb3dLSqk6K1+GLerfmgWyhneNcQ9VGe+q4HeZEC3o5iQLgbGMAGa0HmMdQOC0Pj 2QvY3CYgyhCETnDRRiDX4UJ1uYEKpTVaTyaj/CZtcqxVnqsEtT7vh8l23KFJpJNMx3wRXiE6W 1KqAqjyrqNIKogF7hT/5GHwCoBvPZZhpstKFJmDqUzpXxFxk1dF1zguM2s/84jkxGSdsYoNHR mvB7+g40fIzBt+d9bnLRC0gqoGaet3/6IAmpnj1INSglJWqjlbPNfnjfBD6eGsdfCU8Xylb8c R0iyb+By4z7N/1IiOPniQ8NyNCywQ8x6+WnltGzIG5I+DnO5XYnDL073RP/UxBrT51xrgFcOD Mqt22KNB0+QMu57bCAGSvbKD22USXA7FX1fIzck/t38QzhYZnGxpz4eSlsGxxmkLZTjLnTGxa CODUU8IUkVAQ1/AqXIuQUrEyScKD6rIwdJgNtg+qo7QtOwqMa930hFd8FQ6lKPdyBRYEOsOtF 2kq/0zSTnvr1X9P8EfWJ29hLuUX0gkzb5zPOENgPi/EY3S5JWzYr4OlOsMWU2UzY+uxFQbKq8 INrw7XiPtB4pgPjJWqUdjegXoVp0A== Subject: [FFmpeg-devel] [PATCH 2/3] avformat/movenc: add mov_write_int_metadata() 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: Moritz Barsnick MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Converted from mov_write_int8_metadata(), allowing to also write 16-bit and 32-bit integer atoms, at up to 32-bit total size. Converted mov_write_int8_metadata() into a macro specifying a truncation of one byte length. Signed-off-by: Moritz Barsnick --- libavformat/movenc.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/libavformat/movenc.c b/libavformat/movenc.c index 7c326faa49..0bb66e5fd1 100644 --- a/libavformat/movenc.c +++ b/libavformat/movenc.c @@ -3453,20 +3453,25 @@ static int mov_write_trkn_tag(AVIOContext *pb, MOVMuxContext *mov, return size; } -static int mov_write_int8_metadata(AVFormatContext *s, AVIOContext *pb, - const char *name, const char *tag, - int len) +#define mov_write_int8_metadata(a, b, c, d, e) mov_write_int_metadata(a, b, c, d, e, 1) +static int mov_write_int_metadata(AVFormatContext *s, AVIOContext *pb, + const char *name, const char *tag, + int len, int truncate) { AVDictionaryEntry *t = NULL; - uint8_t num; + uint32_t num; int size = 24 + len; if (len != 1 && len != 2 && len != 4) return -1; + if (truncate > len) + return -1; + if (truncate != 1 && truncate != 2 && truncate != 4) + return -1; if (!(t = av_dict_get(s->metadata, tag, NULL, 0))) return 0; - num = atoi(t->value); + num = (uint32_t)strtoull(t->value, NULL, 10); avio_wb32(pb, size); ffio_wfourcc(pb, name); @@ -3475,9 +3480,10 @@ static int mov_write_int8_metadata(AVFormatContext *s, AVIOContext *pb, avio_wb32(pb, 0x15); // type specifier avio_wb32(pb, 0); // data: - if (len == 4) avio_wb32(pb, num); - else if (len == 2) avio_wb16(pb, num); - else avio_w8 (pb, num); + num &= (1U << (truncate*8)) - 1; // mask out the lower "truncate" number of bytes + if (len == 4) avio_wb32(pb, num); + else if (len == 2) avio_wb16(pb, (uint16_t)num); + else avio_w8 (pb, (uint8_t) num); return size; }