From patchwork Mon Nov 27 05:42:17 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mark Reid X-Patchwork-Id: 6397 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.161.94 with SMTP id m30csp1268390jah; Sun, 26 Nov 2017 21:42:55 -0800 (PST) X-Google-Smtp-Source: AGs4zMYC1DuON3b/vbtH9vI3EQlAi0JVJ90/IS9IWdrB/6KLbQJafM6VfpYKAYWOxyiN+dbblrfA X-Received: by 10.28.66.25 with SMTP id p25mr14711704wma.154.1511761375025; Sun, 26 Nov 2017 21:42:55 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1511761374; cv=none; d=google.com; s=arc-20160816; b=Jc2B1xw1dxFIv2dZJO/v52HQkrXAhfUqLH5j+XGqCAy1iIZ1veU/zyvcSV0fM3QInv FS8TkeEmMe7Msr0O3t4N7UqjRt1uTmsoh1GOxRlFKn+QCoYkYq6EMPoasvojRfoVh5Oh wOlH0rdVHFTJe6beiFfsmTXn9xuwdglMuUqHHJQ/newWqjHRMeXmOBhLu/SZQvoZh4AJ XuZBwHPKy+9Dhv6Xq+5wQ+rxEkv13Ln4BKrDYvg5c0QlacprCLj7nKZoSgZyjLyaBdx+ A8hu5vMf/0S/2YcO0gxsihcaJ0tGUYg22FVamGxDscEoaqQJHA1m4k17d52DLJ03Qgp+ v/gQ== 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:message-id:date :to:from:dkim-signature:delivered-to:arc-authentication-results; bh=+gJ9mOP3ONloH5rczXcJG7SIGCjso5uc7ITDldYXvDc=; b=SwuawxaqO72PNNVRWPoOwC5UkdacpOCnXgQ8+3VNEB2yrO7p7rcU+1nUC6m9supjXb ufdTxLsWr9Zgu/c7uaw18WigXCVUHAaNuYJZDoI6gVi7zqyiROMP17Kx9wvFqs8l7bd9 1wYhPrVAJ/4TdXu6AL0JONeCa6hWk6XxOcS5p3n9IIL/UCnTu7MidM5X+RIhn5KmWHVL tr/nyBEsMPu7CqlD8lWMLehubqBl9jPVi4aOWS0JYquwBba+D8RPwKjHqDqnVceJnI3p HhohDBwFDOb11P+JVCLzOOvULRQtgliNvLveLfnIDS6jz2ML95Kwif7zvPQyMnGyigNl 1q2A== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=dzK9nNYT; 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=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 w21si18714063wrb.38.2017.11.26.21.42.54; Sun, 26 Nov 2017 21:42:54 -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=@gmail.com header.s=20161025 header.b=dzK9nNYT; 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=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 8B1B0689FE4; Mon, 27 Nov 2017 07:42:36 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pg0-f66.google.com (mail-pg0-f66.google.com [74.125.83.66]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 48A2D689FC6 for ; Mon, 27 Nov 2017 07:42:29 +0200 (EET) Received: by mail-pg0-f66.google.com with SMTP id m4so8277381pgc.4 for ; Sun, 26 Nov 2017 21:42:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=8WPqk8tnFwr/IBhZIOb8wL+H8vIOtMjz/TjZYc8pY0U=; b=dzK9nNYT+GLRdidY/FcZmGSGdosKwkk3ZkLlTrBT7sGKLTksQi0OR9hTx+rj/hTKay nc+AILunevudMtSNcTHQjNvYoXZa8b8EBN5Xf80t4OyvYddJ5rAHd4Fi/LJmGDeyE+9L HcDcwD0sHhdR2q2kJgmt7pMcEHT5Uq412DqiHutpgacedOKkacpcjJV2YVpOB6kIlREg Q5lB0kgqOBVO7LBR+f4OKDCfSjFNXCK53nShAXa4IWscR9WY1ri5VY3PDpWtikmJ1R45 X48zZYG2SxcXcqL+eO6QHy0zfGvI+2+MYH6N6xqy5fl93PHAUFPHbUDDeWIdFMmwYvuA /u0w== 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:in-reply-to :references; bh=8WPqk8tnFwr/IBhZIOb8wL+H8vIOtMjz/TjZYc8pY0U=; b=MCtb5g1LxpXoeE6e4YJc/QYQrq7Kh186d1/HZjRwyzX1GlQFhXsA98ikfHMdzYfrqc 8g59hPl8Q4mmuPkqnCC357I9mO6MGs7OFY28Zv6b7JRne9cR39Zvgk1LvtHeGpKpLFBW lUby+6d0AjptgxGUar772RjjLOmGqhe+VRBO/5wzpVEc5brpmrvzwBFdqqUF+9pVP8K2 2sKFcRUQs/psU6vdZUPqNTZkTwZhxjTEY+Lo2LqLhtaohVT1Na0Qn84ahlXQofArR1ro PIIJM6TiMSZbr11J/5C7zuFzdKLdadtV+FspInsZUmpCr5ZvqISkge7zmcDntbKY9Z68 LKHw== X-Gm-Message-State: AJaThX5+VSGule3mbQzBUVzBEEY4iKw6r/R5f+iNWCMjiWZqlRnZBk5E rUkICWsrEakqHhBbGRRXHcFGfA== X-Received: by 10.98.112.71 with SMTP id l68mr33968561pfc.11.1511761349269; Sun, 26 Nov 2017 21:42:29 -0800 (PST) Received: from localhost.localdomain (S0106ac2e8b9e4f8e.vc.shawcable.net. [174.7.100.154]) by smtp.gmail.com with ESMTPSA id y1sm42378352pge.27.2017.11.26.21.42.27 (version=TLS1 cipher=AES128-SHA bits=128/128); Sun, 26 Nov 2017 21:42:28 -0800 (PST) From: Mark Reid To: ffmpeg-devel@ffmpeg.org Date: Sun, 26 Nov 2017 21:42:17 -0800 Message-Id: <20171127054219.37859-3-mindmark@gmail.com> X-Mailer: git-send-email 2.13.6 (Apple Git-96) In-Reply-To: <20171127054219.37859-1-mindmark@gmail.com> References: <20171127054219.37859-1-mindmark@gmail.com> Subject: [FFmpeg-devel] [PATCH 2/4] avformat/mxfenc: use track count to generate component instance uuid 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: Mark Reid MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" --- libavformat/mxf.h | 1 - libavformat/mxfenc.c | 45 +++++++++++++++++++++++++---------------- tests/ref/fate/copy-trac4914 | 2 +- tests/ref/fate/time_base | 2 +- tests/ref/lavf/mxf | 6 +++--- tests/ref/lavf/mxf_d10 | 2 +- tests/ref/lavf/mxf_dv25 | 2 +- tests/ref/lavf/mxf_dvcpro50 | 2 +- tests/ref/lavf/mxf_opatom | 2 +- tests/ref/lavf/mxf_opatom_audio | 2 +- 10 files changed, 38 insertions(+), 28 deletions(-) diff --git a/libavformat/mxf.h b/libavformat/mxf.h index f3db1f939b..2d5b44943b 100644 --- a/libavformat/mxf.h +++ b/libavformat/mxf.h @@ -45,7 +45,6 @@ enum MXFMetadataSetType { SubDescriptor, IndexTableSegment, EssenceContainerData, - TypeBottom,// add metadata type before this EssenceGroup, TaggedValue, }; diff --git a/libavformat/mxfenc.c b/libavformat/mxfenc.c index ed6ecbf541..d573586fe4 100644 --- a/libavformat/mxfenc.c +++ b/libavformat/mxfenc.c @@ -105,6 +105,7 @@ typedef struct MXFPackage { char *name; enum MXFMetadataSetType type; int instance; + int uuid_offset; } MXFPackage; enum ULIndex { @@ -846,6 +847,10 @@ static void mxf_write_track(AVFormatContext *s, AVStream *st, MXFPackage *packag MXFContext *mxf = s->priv_data; AVIOContext *pb = s->pb; MXFStreamContext *sc = st->priv_data; + int instance = package->uuid_offset; + + if (st != mxf->timecode_track) + instance += st->index + 1; mxf_write_metadata_key(pb, 0x013b00); PRINT_KEY(s, "track key", pb->buf_ptr - 16); @@ -853,7 +858,7 @@ static void mxf_write_track(AVFormatContext *s, AVStream *st, MXFPackage *packag // write track uid mxf_write_local_tag(pb, 16, 0x3C0A); - mxf_write_uuid(pb, package->type == MaterialPackage ? Track : Track + TypeBottom, st->index); + mxf_write_uuid(pb, Track, instance); PRINT_KEY(s, "track uid", pb->buf_ptr - 16); // write track id @@ -884,7 +889,7 @@ static void mxf_write_track(AVFormatContext *s, AVStream *st, MXFPackage *packag // write sequence refs mxf_write_local_tag(pb, 16, 0x4803); - mxf_write_uuid(pb, package->type == MaterialPackage ? Sequence: Sequence + TypeBottom, st->index); + mxf_write_uuid(pb, Sequence, instance); } static const uint8_t smpte_12m_timecode_track_data_ul[] = { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x01,0x03,0x02,0x01,0x01,0x00,0x00,0x00 }; @@ -918,13 +923,17 @@ static void mxf_write_sequence(AVFormatContext *s, AVStream *st, MXFPackage *pac MXFContext *mxf = s->priv_data; AVIOContext *pb = s->pb; enum MXFMetadataSetType component; + int instance = package->uuid_offset; + + if (st != mxf->timecode_track) + instance += st->index + 1; mxf_write_metadata_key(pb, 0x010f00); PRINT_KEY(s, "sequence key", pb->buf_ptr - 16); klv_encode_ber_length(pb, 80); mxf_write_local_tag(pb, 16, 0x3C0A); - mxf_write_uuid(pb, package->type == MaterialPackage ? Sequence: Sequence + TypeBottom, st->index); + mxf_write_uuid(pb, Sequence, instance); PRINT_KEY(s, "sequence uid", pb->buf_ptr - 16); mxf_write_common_fields(s, st); @@ -936,9 +945,8 @@ static void mxf_write_sequence(AVFormatContext *s, AVStream *st, MXFPackage *pac component = TimecodeComponent; else component = SourceClip; - if (package->type == SourcePackage) - component += TypeBottom; - mxf_write_uuid(pb, component, st->index); + + mxf_write_uuid(pb, component, instance); } static void mxf_write_timecode_component(AVFormatContext *s, AVStream *st, MXFPackage *package) @@ -951,8 +959,7 @@ static void mxf_write_timecode_component(AVFormatContext *s, AVStream *st, MXFPa // UID mxf_write_local_tag(pb, 16, 0x3C0A); - mxf_write_uuid(pb, package->type == MaterialPackage ? TimecodeComponent : - TimecodeComponent + TypeBottom, st->index); + mxf_write_uuid(pb, TimecodeComponent, package->uuid_offset); mxf_write_common_fields(s, st); @@ -973,6 +980,7 @@ static void mxf_write_structural_component(AVFormatContext *s, AVStream *st, MXF { AVIOContext *pb = s->pb; int i; + int instance = package->uuid_offset + st->index + 1; mxf_write_metadata_key(pb, 0x011100); PRINT_KEY(s, "sturctural component key", pb->buf_ptr - 16); @@ -980,7 +988,7 @@ static void mxf_write_structural_component(AVFormatContext *s, AVStream *st, MXF // write uid mxf_write_local_tag(pb, 16, 0x3C0A); - mxf_write_uuid(pb, package->type == MaterialPackage ? SourceClip: SourceClip + TypeBottom, st->index); + mxf_write_uuid(pb, SourceClip, instance); PRINT_KEY(s, "structural component uid", pb->buf_ptr - 16); mxf_write_common_fields(s, st); @@ -1329,7 +1337,7 @@ static int mxf_write_user_comments(AVFormatContext *s, const AVDictionary *m) return count; } -static void mxf_write_package(AVFormatContext *s, MXFPackage *package) +static int mxf_write_package(AVFormatContext *s, MXFPackage *package) { MXFContext *mxf = s->priv_data; AVIOContext *pb = s->pb; @@ -1357,7 +1365,7 @@ static void mxf_write_package(AVFormatContext *s, MXFPackage *package) // write package umid mxf_write_local_tag(pb, 32, 0x4401); - mxf_write_umid(s, package->type == SourcePackage); + mxf_write_umid(s, package->instance); PRINT_KEY(s, "package umid second part", pb->buf_ptr - 16); // package name @@ -1375,10 +1383,9 @@ static void mxf_write_package(AVFormatContext *s, MXFPackage *package) // write track refs mxf_write_local_tag(pb, track_count*16 + 8, 0x4403); mxf_write_refs_count(pb, track_count); - mxf_write_uuid(pb, package->type == MaterialPackage ? Track : - Track + TypeBottom, -1); // timecode track + mxf_write_uuid(pb, Track, package->uuid_offset); // timecode track for (i = 0; i < s->nb_streams; i++) - mxf_write_uuid(pb, package->type == MaterialPackage ? Track : Track + TypeBottom, i); + mxf_write_uuid(pb, Track, package->uuid_offset + i + 1); // write user comment refs if (mxf->store_user_comments) { @@ -1414,6 +1421,7 @@ static void mxf_write_package(AVFormatContext *s, MXFPackage *package) mxf_essence_container_uls[sc->index].write_desc(s, st); } } + return track_count; } static int mxf_write_essence_container_data(AVFormatContext *s) @@ -1443,11 +1451,12 @@ static int mxf_write_header_metadata_sets(AVFormatContext *s) AVDictionaryEntry *entry = NULL; AVStream *st = NULL; int i; - + int track_count = 0; MXFPackage packages[2] = {}; int package_count = 2; packages[0].type = MaterialPackage; packages[1].type = SourcePackage; + packages[1].instance = 1; if (entry = av_dict_get(s->metadata, "material_package_name", NULL, 0)) packages[0].name = entry->value; @@ -1468,8 +1477,10 @@ static int mxf_write_header_metadata_sets(AVFormatContext *s) mxf_write_preface(s); mxf_write_identification(s); mxf_write_content_storage(s, packages, package_count); - for (i = 0; i < package_count; i++) - mxf_write_package(s, &packages[i]); + for (i = 0; i < package_count; i++) { + packages[i].uuid_offset = track_count; + track_count += mxf_write_package(s, &packages[i]); + } mxf_write_essence_container_data(s); return 0; } diff --git a/tests/ref/fate/copy-trac4914 b/tests/ref/fate/copy-trac4914 index e0864a0035..a8f287fafa 100644 --- a/tests/ref/fate/copy-trac4914 +++ b/tests/ref/fate/copy-trac4914 @@ -1,4 +1,4 @@ -d51f6bcc96885a2ce8517ae8c774f610 *tests/data/fate/copy-trac4914.mxf +05fdc4a6e28abb2c26e96224682d2684 *tests/data/fate/copy-trac4914.mxf 560697 tests/data/fate/copy-trac4914.mxf #tb 0: 1001/30000 #media_type 0: video diff --git a/tests/ref/fate/time_base b/tests/ref/fate/time_base index 7923556b35..4dd14084d3 100644 --- a/tests/ref/fate/time_base +++ b/tests/ref/fate/time_base @@ -1 +1 @@ -d26a35b141551b36c5b8bd716451cfcb +f97551f884df5ab709c5869c66c7b9bc diff --git a/tests/ref/lavf/mxf b/tests/ref/lavf/mxf index b9c37334a9..7318447ecb 100644 --- a/tests/ref/lavf/mxf +++ b/tests/ref/lavf/mxf @@ -1,9 +1,9 @@ -1c06a9d69b6e309579784db5ecb0b69f *./tests/data/lavf/lavf.mxf +d4140129463dec64bdb4a7d7ad1b0c82 *./tests/data/lavf/lavf.mxf 525369 ./tests/data/lavf/lavf.mxf ./tests/data/lavf/lavf.mxf CRC=0x8dddfaab -50b4f9ca0493e6d83f4c52dc3aa2b7a5 *./tests/data/lavf/lavf.mxf +a27bb8cd5e185ea13b0a8daa4eb221cd *./tests/data/lavf/lavf.mxf 560697 ./tests/data/lavf/lavf.mxf ./tests/data/lavf/lavf.mxf CRC=0xf21b1b48 -4b71b154ae37364c8028cb50850a54c5 *./tests/data/lavf/lavf.mxf +395bf0047c97ceca96935357166b94c7 *./tests/data/lavf/lavf.mxf 525369 ./tests/data/lavf/lavf.mxf ./tests/data/lavf/lavf.mxf CRC=0x8dddfaab diff --git a/tests/ref/lavf/mxf_d10 b/tests/ref/lavf/mxf_d10 index 134db876d5..2384d427b0 100644 --- a/tests/ref/lavf/mxf_d10 +++ b/tests/ref/lavf/mxf_d10 @@ -1,3 +1,3 @@ -73c0cb416548c33d0651c59519a8f7e2 *./tests/data/lavf/lavf.mxf_d10 +f4694941b0cd5b5e3c91064d84dbd345 *./tests/data/lavf/lavf.mxf_d10 5330989 ./tests/data/lavf/lavf.mxf_d10 ./tests/data/lavf/lavf.mxf_d10 CRC=0x6c74d488 diff --git a/tests/ref/lavf/mxf_dv25 b/tests/ref/lavf/mxf_dv25 index 85094828d1..e836b14240 100644 --- a/tests/ref/lavf/mxf_dv25 +++ b/tests/ref/lavf/mxf_dv25 @@ -1,3 +1,3 @@ -1871bd11947924116776201f24fd0adf *./tests/data/lavf/lavf.mxf_dv25 +1ca8143bf6cf322fd39f6e856959d502 *./tests/data/lavf/lavf.mxf_dv25 3833389 ./tests/data/lavf/lavf.mxf_dv25 ./tests/data/lavf/lavf.mxf_dv25 CRC=0xbdaf7f52 diff --git a/tests/ref/lavf/mxf_dvcpro50 b/tests/ref/lavf/mxf_dvcpro50 index 1d0cf79996..bb3d6b928a 100644 --- a/tests/ref/lavf/mxf_dvcpro50 +++ b/tests/ref/lavf/mxf_dvcpro50 @@ -1,3 +1,3 @@ -6c9cb62911ac16c3b55f0ad0b052c05b *./tests/data/lavf/lavf.mxf_dvcpro50 +987fd4b2abb36433fba0e35f4092efc6 *./tests/data/lavf/lavf.mxf_dvcpro50 7430189 ./tests/data/lavf/lavf.mxf_dvcpro50 ./tests/data/lavf/lavf.mxf_dvcpro50 CRC=0xe3bbe4b4 diff --git a/tests/ref/lavf/mxf_opatom b/tests/ref/lavf/mxf_opatom index ea1190c06a..1cc612e627 100644 --- a/tests/ref/lavf/mxf_opatom +++ b/tests/ref/lavf/mxf_opatom @@ -1,3 +1,3 @@ -962c2cd582340f8961a8283636093abf *./tests/data/lavf/lavf.mxf_opatom +b8fe60f7457b83709f33357d04c8db0c *./tests/data/lavf/lavf.mxf_opatom 4717113 ./tests/data/lavf/lavf.mxf_opatom ./tests/data/lavf/lavf.mxf_opatom CRC=0xf55aa22a diff --git a/tests/ref/lavf/mxf_opatom_audio b/tests/ref/lavf/mxf_opatom_audio index 953df9094f..deed55e526 100644 --- a/tests/ref/lavf/mxf_opatom_audio +++ b/tests/ref/lavf/mxf_opatom_audio @@ -1,3 +1,3 @@ -d4ad5a0faf410a9d9e99b3328143e89d *./tests/data/lavf/lavf.mxf_opatom_audio +e7da52bd591e6eddb4e1af381a4e5bd4 *./tests/data/lavf/lavf.mxf_opatom_audio 101945 ./tests/data/lavf/lavf.mxf_opatom_audio ./tests/data/lavf/lavf.mxf_opatom_audio CRC=0xd155c6ff