From patchwork Wed Jul 4 18:35:07 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Baptiste Coudurier X-Patchwork-Id: 9608 Delivered-To: ffmpegpatchwork@gmail.com Received: by 2002:a02:104:0:0:0:0:0 with SMTP id c4-v6csp1078869jad; Wed, 4 Jul 2018 11:36:01 -0700 (PDT) X-Google-Smtp-Source: AAOMgpdQ7OzfYcBTNBq7oiOzj3+puMIcuP5VsBSlpT7lRSQlW/VektMDC2b4tb0avO1Ea7Q934RJ X-Received: by 2002:adf:e590:: with SMTP id l16-v6mr2211362wrm.190.1530729361132; Wed, 04 Jul 2018 11:36:01 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1530729361; cv=none; d=google.com; s=arc-20160816; b=D6L3Zo2XbLi1spWExYakqUdJuuu/nTsJI5GBZm6JidTPlhiYvj4CC3QoBIwrnQRcks C5AJRMSkIhA/RysIvPH2NRqxHApKphAboiZhrVe95jWysbFd0PyQXcpW8+Nk1KDwiJ8z ODAaVRZsd/NfCOsp7hKAON69jbHbr7WOc5lJxqHvHYzsPglaM/ZdkKzlQQb1KwpXYVYr 6lwOFZb3sA++kevZzb0K0KfJa6xc/MOVvbP5CBdHnchaeWsqlGFt2bnkWlEAijKSYv/P 82qnyy7+lj3nje1YdW1ULe8PlMmaukDnD+FTMOQI3WjDbIIFAFlk08zZppl1YJ3ZTI8Y cnsA== 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:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:message-id:date:to:from:dkim-signature :delivered-to:arc-authentication-results; bh=qevi4/zQTOW6jQBHpf1OL3wPwOjISCDEviq6P0WnQ1w=; b=qwOHXuGf7g3yAfHodLros1sOI7fJUtL0FJX/dUs4+9JjjfgvSmtaOFNd2RZJzwYGaL ufSkkKFEyH/uV4TUklMN1DBNmQMbZty4yY47zFxoE8VvHVeKeS8ujcj3kHN3/mwhupth zTPLR+QWauz5mca5qxmBxOV5kOe/U9YD9zh/sqHbe9+zVCtiBeIDgOwQdqi6JopmS935 6/gEwi3dmtnQxXD2eVvoDAqYhv0DSHgw+inqaE7O74VdFOci/SpeEAxXplnUIhcDYS46 IUsCshflwZNlRMMnHDmZ6G+AUwkwYHpUqqOY769X69M9/NIcP8K6x7KcHUVLFD95RKLV /VBg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=o2fSLsJG; 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=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id a185-v6si3282173wmc.113.2018.07.04.11.36.00; Wed, 04 Jul 2018 11:36:01 -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; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=o2fSLsJG; 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=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 055CA68AB2D; Wed, 4 Jul 2018 21:35:20 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pf0-f170.google.com (mail-pf0-f170.google.com [209.85.192.170]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 7F85968AAEF for ; Wed, 4 Jul 2018 21:35:17 +0300 (EEST) Received: by mail-pf0-f170.google.com with SMTP id s21-v6so3256226pfm.6 for ; Wed, 04 Jul 2018 11:35:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id; bh=bZ1J7OxZA2ICM2e8d2sVayTw2kvvHna+mo/Wy4S4IzE=; b=o2fSLsJGonbb1qQIHlqX9NA6kkdcLUUq0SYaPGVgGwaZNBdqLvLZKgfdamZMVDj/GC mB+ZP31S0O06AXqu3AcKt2bv7cJnmojGOz9K+sB+gL4vgnr9An3wNVagbxlWRtpxjTrB q+XR2xr4woR4RqX8TnwxKh6tB4Pm1wt9c3GT1xd0JzGekOG/eCTlogXhQ+iCaLus0hsU zyJjJUD8+UsfvuMH6yzvI0OdTY1Urppqw1SdHwnludOiNeIPbmLxExnbqomwgybkNbfq hU9PehgSy5t0gqEIl4V9UORWxPjxvFa2Mv52KgH4ed/Djstj2yZ1KeGpWU85V89+42z4 K8zw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id; bh=bZ1J7OxZA2ICM2e8d2sVayTw2kvvHna+mo/Wy4S4IzE=; b=SJ2yKNBQRIqfh02cVFY/JnkZrlApo9RHhhMxscd0S3N6v0xu00QiCTD7Ee5SIMgM07 PW802OYzw02FscOnsYBHfV4oDt4H9HavMK7j8YCC4Q+pGcNIsJb+HDO/Sz7iCBZ8eZ3E Eh2IANoDu74Csjms0F3f3krpGjislp3vYd+pa8G9WabUx6mAjibbDTmPDfgIe4bWiRqr OSAaMI5WEWbPzMHKxtsqSyq+W56Jvq0Lxpt/hr+15723agZc/FXLBadSiyurpovXz+aQ DfCF63B9yQ02qqgHHqkipI4MWzA61zbYoCppgp5xU8CT8OxM6p0D/cw9BKDUDQYBpLMU vDGw== X-Gm-Message-State: APt69E1+YZ3iqAV9ORrPpVb110yeXdtD5wPkxLHRvPmKMwreofAp1uLH N9LaRvo1ALcAAaD+zQ5SmsDjXA== X-Received: by 2002:a65:6104:: with SMTP id z4-v6mr2820672pgu.361.1530729320258; Wed, 04 Jul 2018 11:35:20 -0700 (PDT) Received: from localhost.localdomain (cpe-104-173-251-254.socal.res.rr.com. [104.173.251.254]) by smtp.gmail.com with ESMTPSA id v126-v6sm8591239pgv.39.2018.07.04.11.35.19 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 04 Jul 2018 11:35:19 -0700 (PDT) From: Baptiste Coudurier To: ffmpeg-devel@ffmpeg.org Date: Wed, 4 Jul 2018 11:35:07 -0700 Message-Id: <20180704183514.71654-5-baptiste.coudurier@gmail.com> X-Mailer: git-send-email 2.17.0 (Apple Git-106) Subject: [FFmpeg-devel] [PATCH 05/12] avformat/mxfenc: correctly set content package rate in system element 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 MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" --- libavformat/mxf.c | 17 +++++++++++++++++ libavformat/mxf.h | 2 ++ libavformat/mxfenc.c | 4 +++- tests/ref/lavf/mxf | 2 +- 4 files changed, 23 insertions(+), 2 deletions(-) diff --git a/libavformat/mxf.c b/libavformat/mxf.c index c8b57f7f0b..8376a2b9bf 100644 --- a/libavformat/mxf.c +++ b/libavformat/mxf.c @@ -171,3 +171,20 @@ const MXFSamplesPerFrame *ff_mxf_get_samples_per_frame(AVFormatContext *s, return &mxf_spf[idx]; } + +static const int mxf_content_package_rates[] = { + 3, 2, 7, 13, 4, 10, 12, +}; + +int ff_mxf_get_content_package_rate(AVRational time_base) +{ + int idx = av_find_nearest_q_idx(time_base, mxf_time_base); + AVRational diff = av_sub_q(time_base, mxf_time_base[idx]); + + diff.num = FFABS(diff.num); + + if (av_cmp_q(diff, (AVRational){1, 1000}) >= 0) + return -1; + + return mxf_content_package_rates[idx]; +} diff --git a/libavformat/mxf.h b/libavformat/mxf.h index f6e75919c5..4394450dea 100644 --- a/libavformat/mxf.h +++ b/libavformat/mxf.h @@ -93,6 +93,8 @@ extern const MXFCodecUL ff_mxf_codec_tag_uls[]; int ff_mxf_decode_pixel_layout(const char pixel_layout[16], enum AVPixelFormat *pix_fmt); const MXFSamplesPerFrame *ff_mxf_get_samples_per_frame(AVFormatContext *s, AVRational time_base); +int ff_mxf_get_content_package_rate(AVRational time_base); + #define PRIxUID \ "%02x.%02x.%02x.%02x." \ diff --git a/libavformat/mxfenc.c b/libavformat/mxfenc.c index d13ddaff6d..1f272ce6e5 100644 --- a/libavformat/mxfenc.c +++ b/libavformat/mxfenc.c @@ -386,6 +386,7 @@ typedef struct MXFContext { AVStream *timecode_track; int timecode_base; ///< rounded time code base (25 or 30) int edit_unit_byte_count; ///< fixed edit unit byte count + int content_package_rate; ///< content package rate in system element, see SMPTE 326M uint64_t body_offset; uint32_t instance_number; uint8_t umid[16]; ///< unique material identifier @@ -2411,6 +2412,7 @@ static int mxf_write_header(AVFormatContext *s) tbc.den, tbc.num); return AVERROR(EINVAL); } + mxf->content_package_rate = ff_mxf_get_content_package_rate(tbc); mxf->time_base = spf->time_base; rate = av_inv_q(mxf->time_base); avpriv_set_pts_info(st, 64, mxf->time_base.num, mxf->time_base.den); @@ -2579,7 +2581,7 @@ static void mxf_write_system_item(AVFormatContext *s) avio_write(pb, system_metadata_pack_key, 16); klv_encode_ber4_length(pb, 57); avio_w8(pb, 0x5c); // UL, user date/time stamp, picture and sound item present - avio_w8(pb, 0x04); // content package rate + avio_w8(pb, mxf->content_package_rate); // content package rate avio_w8(pb, 0x00); // content package type avio_wb16(pb, 0x00); // channel handle avio_wb16(pb, (mxf->tc.start + frame) & 0xFFFF); // continuity count, supposed to overflow diff --git a/tests/ref/lavf/mxf b/tests/ref/lavf/mxf index 1971e25fdf..81d21704d9 100644 --- a/tests/ref/lavf/mxf +++ b/tests/ref/lavf/mxf @@ -1,7 +1,7 @@ 649009e3d3d62eb3b6c56334d057cc4d *./tests/data/lavf/lavf.mxf 526393 ./tests/data/lavf/lavf.mxf ./tests/data/lavf/lavf.mxf CRC=0x8dddfaab -1ab46fe6d07dc9eeb457772096f3a7db *./tests/data/lavf/lavf.mxf +5756c5f9bdb9718b91bfbf588afec189 *./tests/data/lavf/lavf.mxf 561721 ./tests/data/lavf/lavf.mxf ./tests/data/lavf/lavf.mxf CRC=0xf21b1b48 02bf8f0cd8951a49e277306691cb1538 *./tests/data/lavf/lavf.mxf