From patchwork Wed Mar 28 16:02:48 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Timo_Ter=C3=A4s?= X-Patchwork-Id: 8211 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.1.70 with SMTP id c67csp642624jad; Wed, 28 Mar 2018 09:08:44 -0700 (PDT) X-Google-Smtp-Source: AIpwx4/AsgPl1QBNINFUwS98Jrk3zYhyp0vVsoEAIA6d4q1nn11zwE3l4vjRQIAlgxFtOblfoJWj X-Received: by 10.28.152.6 with SMTP id a6mr3132605wme.119.1522253324652; Wed, 28 Mar 2018 09:08:44 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1522253324; cv=none; d=google.com; s=arc-20160816; b=OUzHZsyDPuO3lL4QfHj5SRZyYLQBGd2uWPbv0rHo4ld2Rl7AzwGBLgSmFg2Jj1HgVJ fHvBcVAJLqUfA+pfMhloXlXsgN3t0lzZBYZucF+AOz9zbLmoGUaJcb8GwBUcVM/TClVt 4V2lQuetgKwBH2JSukaxcSgxBIAJr3qdXnETUaWB4l3pvz4Y6sAcNaRN42CxbOlDl/gJ he+EkGm7MJgGMhRIOt+VA9sUkMCj/vqpJO2VCKHfcrVAuvdhEmZ7xumjMHgGSUsqFOw4 F26vLHXyUZ+6HOns2NSPIxcBUB7urrIjKeB/NqjY5F7BRXJCuULAqZjvFFkzKtFc+42m qpFA== 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:message-id:date:to:from :delivered-to:arc-authentication-results; bh=j37kn1+13jYwDaugH9/00YkPm12g85BFcNX14HlnNls=; b=pxRvKafDZjpwi3dME6KxmlKynhYzhMWxyofx9v6DJjDC/RUhUe0r5IvxiGs984SizY Rv9ERwxeji+Cka3K5uAg7m6uvMQF1RJzu4LjAhDQ60UWUjCacIr7ypT3bwuGQoR0kKpI DYjn+3xIuGmWcx4qzMyc3xkTUKEn3On79wFA1pBe8hI1vMOPzXRBhEQFTXieWots/w/k Y8y4rOv2/NS0Evaw9tAtahBwqfa5PuEqMNvywi9iLjIR7WwCekcMHzKWAUuk6hoDRQzD yWj2vjTHYdXNN8yQGD6jFpEv9rNNISSxRDmMAc5ARaxCS7SsFaNfUJKrJ2xQZ2Nn8LfO 4/5g== 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 j11si2917556wmd.233.2018.03.28.09.08.41; Wed, 28 Mar 2018 09:08:44 -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 2D5C0689B54; Wed, 28 Mar 2018 19:08:22 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-lf0-f44.google.com (mail-lf0-f44.google.com [209.85.215.44]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 7692968019C for ; Wed, 28 Mar 2018 19:08:15 +0300 (EEST) Received: by mail-lf0-f44.google.com with SMTP id a22-v6so4268603lfg.9 for ; Wed, 28 Mar 2018 09:08:33 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=hXwlaX079LeNjCcsA/CmnbJpUPwGOJoAjAzHeiB9zSM=; b=ukVT5/kq6T+vLjcE5El1ZwuI102afBJI5uNVlyWRVPQmoOl14WWuMTEceoZavGHjSX TaKfbL1CrJFx7NLv6wcxyMlbEvDvecWMvSvikezhAV9kD/3UIlrMbMTtGi8zEie6ipox jge74BIijHklBZXcwM2rUz9h6efc1mSj/qr8aCbrPaEUjnJ0pX40p/GULyL0oE+GihY7 iOk9+UBPmp+0TVsyogVSRpvLiugdFaitnnXnIjYa84vKtOoZHCg4GpZAPuPVMX30Et2D Rq0drNcZ1QfTqAC+0OVCrbmeegBLBOYE8HEFlTNyOCz9QCSAisn+O220rE1rM98wLDvE ptZw== X-Gm-Message-State: AElRT7G2piMEDZCRKoteT+vmlqbFgmpxAMoKRl0VB2FnMDVCGIwnIAYg gniwRkqfNL7svRH9hlqDMW3hz740 X-Received: by 2002:a19:1d12:: with SMTP id d18-v6mr2707218lfd.128.1522252972209; Wed, 28 Mar 2018 09:02:52 -0700 (PDT) Received: from localhost.localdomain ([83.145.235.201]) by smtp.gmail.com with ESMTPSA id z81-v6sm750985lff.20.2018.03.28.09.02.51 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 28 Mar 2018 09:02:51 -0700 (PDT) From: =?UTF-8?q?Timo=20Ter=C3=A4s?= To: ffmpeg-devel@ffmpeg.org Date: Wed, 28 Mar 2018 19:02:48 +0300 Message-Id: <20180328160248.11382-1-timo.teras@iki.fi> X-Mailer: git-send-email 2.16.2 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/1] avformat/movenc: use modern iTunes copyright atom 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: =?UTF-8?q?Timo=20Ter=C3=A4s?= Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" iTunes currently uses the 'cprt' atom to store the copyright notice and this patch fixes compatibility with majority of software that supports the 'ilst' atom. Other software and documentation using this: - AtomicParseley encodes and parses only 'cprt' - Most players recognize only 'cprt' - https://sno.phy.queensu.ca/~phil/exiftool/TagNames/QuickTime.html documents both tag types - http://mutagen.readthedocs.io/en/latest/api/mp4.html documents only 'cprt' ffmpeg mov reader properly parses the 'cprt' tag inside 'ilst' tag and functions correctly with streams produced with this commit. Since 'cprt' seems to be the current correct atom, it is used by default. "-movflags legacy_copyright" option is added to revert back to the old atom type in case that is needed. Signed-off-by: Timo Teräs --- If the legacy option is not needed, I'm happy to resend patch just changing the atom types. libavformat/movenc.c | 6 +++++- libavformat/movenc.h | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/libavformat/movenc.c b/libavformat/movenc.c index ef668eccd5..230aeb6a6d 100644 --- a/libavformat/movenc.c +++ b/libavformat/movenc.c @@ -79,6 +79,7 @@ static const AVOption options[] = { { "use_metadata_tags", "Use mdta atom for metadata.", 0, AV_OPT_TYPE_CONST, {.i64 = FF_MOV_FLAG_USE_MDTA}, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM, "movflags" }, { "skip_trailer", "Skip writing the mfra/tfra/mfro trailer for fragmented files", 0, AV_OPT_TYPE_CONST, {.i64 = FF_MOV_FLAG_SKIP_TRAILER}, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM, "movflags" }, { "negative_cts_offsets", "Use negative CTS offsets (reducing the need for edit lists)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_MOV_FLAG_NEGATIVE_CTS_OFFSETS}, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM, "movflags" }, + { "legacy_copyright", "Use legacy iTunes (c)cpy copyright atom inside ilst", 0, AV_OPT_TYPE_CONST, {.i64 = FF_MOV_FLAG_LEGACY_ILTS_CPRT}, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM, "movflags" }, FF_RTP_FLAG_OPTS(MOVMuxContext, rtp_flags), { "skip_iods", "Skip writing iods atom.", offsetof(MOVMuxContext, iods_skip), AV_OPT_TYPE_BOOL, {.i64 = 1}, 0, 1, AV_OPT_FLAG_ENCODING_PARAM}, { "iods_audio_profile", "iods audio profile atom.", offsetof(MOVMuxContext, iods_audio_profile), AV_OPT_TYPE_INT, {.i64 = -1}, -1, 255, AV_OPT_FLAG_ENCODING_PARAM}, @@ -3432,7 +3433,10 @@ static int mov_write_ilst_tag(AVIOContext *pb, MOVMuxContext *mov, } mov_write_string_metadata(s, pb, "\251cmt", "comment" , 1); mov_write_string_metadata(s, pb, "\251gen", "genre" , 1); - mov_write_string_metadata(s, pb, "\251cpy", "copyright", 1); + if (mov->flags & FF_MOV_FLAG_LEGACY_ILTS_CPRT) + mov_write_string_metadata(s, pb, "\251cpy", "copyright", 1); + else + mov_write_string_metadata(s, pb, "cprt", "copyright", 1); mov_write_string_metadata(s, pb, "\251grp", "grouping" , 1); mov_write_string_metadata(s, pb, "\251lyr", "lyrics" , 1); mov_write_string_metadata(s, pb, "desc", "description",1); diff --git a/libavformat/movenc.h b/libavformat/movenc.h index ca2a9c9722..e83a29aea2 100644 --- a/libavformat/movenc.h +++ b/libavformat/movenc.h @@ -246,6 +246,7 @@ typedef struct MOVMuxContext { #define FF_MOV_FLAG_SKIP_TRAILER (1 << 18) #define FF_MOV_FLAG_NEGATIVE_CTS_OFFSETS (1 << 19) #define FF_MOV_FLAG_FRAG_EVERY_FRAME (1 << 20) +#define FF_MOV_FLAG_LEGACY_ILTS_CPRT (1 << 21) int ff_mov_write_packet(AVFormatContext *s, AVPacket *pkt);