Am 2021-06-28 21:58, schrieb emco...@ffastrans.com:
Am 2021-06-28 03:00, schrieb Marton Balint:
On Sun, 27 Jun 2021, emco...@ffastrans.com wrote:

Am 2021-06-27 20:12, schrieb Marton Balint:
Why? I though it is enough if you store the partition number in the
metadata set, that way you should be able to compare if the existing
metadata set is better than the current one when adding a new metadata
set. Or am I missing something?

OK, i just had a try on this but honestly i don't know how this could work without a very deep change of the whole mxfdec.c. The problem is that i cannot just add a field to the struct MXFMetadataSet as this points to raw data which has been read from the mxf file. I could add a field but if i initialize the value, i will automatically destroy the original raw data which was read from the mxf file.

See the attached patch, that is what I had in mind. Or is it overkill?
Can you test it with your dataset and see if it makes any difference?

Thanks,
Marton
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

Tested your patch pleasure, thanks for the support! The "score
approach" seems to work in practice exactly as my previous patch, the
only thing i fear about is that it is a little harder now to foresee
which metadata source is taken from a users perspective but i also
think it is now more compliant than it was before.

Using my test fileset which contains 4.476 mxf files (not all unique,
maybe half is duplicates and most focus on xdcamhd and D10), we have
90 differences between ffprobe before your patch and after your patch.
All of the differences are only in files that have openincomplete
header. Most of the differences just changes the duration from a
guessed one to the analyzed one:

All STREAMS (NEW - OLD):
      "duration_ts": 3000,              "duration_ts": 3099,
      "duration": "120.000000",         "duration": "123.960000",
FORMAT      (NEW - OLD):
    "duration": "120.000000",           "duration": "123.969813",
    "bit_rate": "61178142",             "bit_rate": "59219070",

Exception one Op1b self contained file, where the "old" version did
not spit out a "duration" value at all, so it was not even calculated
from bitrate, it was just missing in the format section and set to 0
in the stream section.
Exception two, there were 4 files (3 were samples from IRT and 1 a
real world file from old omneon version) where the startc OLD was 0
and the new one was the MP starttimecode from MP, so perfect.
So the conclusion is that of course your version had the same effect
on my testfileset than my patch version, so thats nice.

Also, the FATE samples i shared will still work and can be used for this patch.
Attached a patch for adding only the fate samples. Note that these
Fate tests of course fail when the patch for mxfdec.c is not applied.
https://we.tl/t-MVmyG2mZHq

Thanks a lot!
-emcodem
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

Unfortunately the wetransfer link for the fate samples expired, so i thought it might be a good idea to resend it as link to gdrive:
https://drive.google.com/file/d/1yXTdS9RfOsduzg49vBLEshdmIzdaVQfd/view?usp=sharing

Also attached the 2 patches: 1 from cus for mxfdec.c and one from myself for the corresponding fate samples. After applying the mxfdec.c patch, fate will pass with the currently existing tests but the files in the zip must be uploaded to the fate suite before applying my corresponding patch of course (otherwise the files don't exist).

It would be cool if someone found the time and wants to apply this.

Thanks!
-emcodem
From 499a41f0db6cfda746fd8751d4e55e910f495687 Mon Sep 17 00:00:00 2001
From: emcodem <emco...@ffastrans.com>
Date: Mon, 28 Jun 2021 21:54:54 +0200
Subject: [PATCH 1/1] mxf Fate tests for openincomplete and truncated

---
 tests/fate/mxf.mak                        |  10 +
 tests/ref/fate/mxf-probe-xdcamhd-oit      | 442 ++++++++++++++++++++++
 tests/ref/fate/mxf-probe-xdcamhd-tcfooter | 442 ++++++++++++++++++++++
 3 files changed, 894 insertions(+)
 create mode 100644 tests/ref/fate/mxf-probe-xdcamhd-oit
 create mode 100644 tests/ref/fate/mxf-probe-xdcamhd-tcfooter

diff --git a/tests/fate/mxf.mak b/tests/fate/mxf.mak
index 3a1096176f..1b7be46c64 100644
--- a/tests/fate/mxf.mak
+++ b/tests/fate/mxf.mak
@@ -37,6 +37,16 @@ FATE_MXF_PROBE-$(call ENCDEC2, PRORES, PCM_S24LE, MXF) += fate-mxf-probe-applehd
 fate-mxf-probe-applehdr10: SRC = $(TARGET_SAMPLES)/mxf/Meridian-Apple_ProResProxy-HDR10.mxf
 fate-mxf-probe-applehdr10: CMD = run $(PROBE_FORMAT_STREAMS_COMMAND) -i "$(SRC)" | sed -e "s/yuv422p10../yuv422p10/"
 
+# openincomplete Header, truncated
+FATE_MXF_PROBE-$(call ENCDEC2, MPEG2VIDEO, PCM_S16LE, MXF) += fate-mxf-probe-xdcamhd-oit
+fate-mxf-probe-xdcamhd-oit: SRC = $(TARGET_SAMPLES)/mxf/omneon_6.4.1.0.1_xdcam_truncated.mxf
+fate-mxf-probe-xdcamhd-oit: CMD = run $(PROBE_FORMAT_STREAMS_COMMAND) -i "$(SRC)"
+
+# openincomplete Header, starttc in header 0 but Footer MP 10:11:17:21, SP 10:11:17:17
+FATE_MXF_PROBE-$(call ENCDEC2, MPEG2VIDEO, PCM_S24LE, MXF) += fate-mxf-probe-xdcamhd-tcfooter
+fate-mxf-probe-xdcamhd-tcfooter: SRC = $(TARGET_SAMPLES)/mxf/omneon_8.3.0.0_xdcam_startc_footer.mxf
+fate-mxf-probe-xdcamhd-tcfooter: CMD = run $(PROBE_FORMAT_STREAMS_COMMAND) -i "$(SRC)"
+
 FATE_MXF_REEL_NAME-$(call ENCDEC2, MPEG2VIDEO, PCM_S16LE, MXF) += fate-mxf-reel_name
 fate-mxf-reel_name: $(SAMPLES)/mxf/Sony-00001.mxf
 fate-mxf-reel_name: CMD = md5 -y -i $(TARGET_SAMPLES)/mxf/Sony-00001.mxf  -c copy -timecode 00:00:00:00 -metadata "reel_name=test_reel" -fflags +bitexact -f mxf
diff --git a/tests/ref/fate/mxf-probe-xdcamhd-oit b/tests/ref/fate/mxf-probe-xdcamhd-oit
new file mode 100644
index 0000000000..040a4e0fba
--- /dev/null
+++ b/tests/ref/fate/mxf-probe-xdcamhd-oit
@@ -0,0 +1,442 @@
+[STREAM]
+index=0
+codec_name=mpeg2video
+profile=0
+codec_type=video
+codec_tag_string=[0][0][0][0]
+codec_tag=0x0000
+width=1920
+height=1080
+coded_width=0
+coded_height=0
+closed_captions=0
+has_b_frames=1
+sample_aspect_ratio=1:1
+display_aspect_ratio=16:9
+pix_fmt=yuv422p
+level=2
+color_range=tv
+color_space=unknown
+color_transfer=bt709
+color_primaries=unknown
+chroma_location=topleft
+field_order=tt
+refs=1
+id=N/A
+r_frame_rate=25/1
+avg_frame_rate=25/1
+time_base=1/25
+start_pts=0
+start_time=0.000000
+duration_ts=6
+duration=0.240000
+bit_rate=50000000
+max_bit_rate=N/A
+bits_per_raw_sample=N/A
+nb_frames=N/A
+nb_read_frames=N/A
+nb_read_packets=N/A
+DISPOSITION:default=0
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=0
+DISPOSITION:still_image=0
+TAG:file_package_umid=0x060A2B340101010501010D2313003E792039C0579AD9E111BAFB00D028113D2C
+[SIDE_DATA]
+side_data_type=CPB properties
+max_bitrate=50000000
+min_bitrate=0
+avg_bitrate=0
+buffer_size=12484608
+vbv_delay=-1
+[/SIDE_DATA]
+[/STREAM]
+[STREAM]
+index=1
+codec_name=pcm_s24le
+profile=unknown
+codec_type=audio
+codec_tag_string=[0][0][0][0]
+codec_tag=0x0000
+sample_fmt=s32
+sample_rate=48000
+channels=1
+channel_layout=unknown
+bits_per_sample=24
+id=N/A
+r_frame_rate=0/0
+avg_frame_rate=0/0
+time_base=1/48000
+start_pts=0
+start_time=0.000000
+duration_ts=11596
+duration=0.241583
+bit_rate=1152000
+max_bit_rate=N/A
+bits_per_raw_sample=24
+nb_frames=N/A
+nb_read_frames=N/A
+nb_read_packets=N/A
+DISPOSITION:default=0
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=0
+DISPOSITION:still_image=0
+TAG:file_package_umid=0x060A2B340101010501010D2313003E792039C0579AD9E111BAFB00D028113D2C
+[/STREAM]
+[STREAM]
+index=2
+codec_name=pcm_s24le
+profile=unknown
+codec_type=audio
+codec_tag_string=[0][0][0][0]
+codec_tag=0x0000
+sample_fmt=s32
+sample_rate=48000
+channels=1
+channel_layout=unknown
+bits_per_sample=24
+id=N/A
+r_frame_rate=0/0
+avg_frame_rate=0/0
+time_base=1/48000
+start_pts=0
+start_time=0.000000
+duration_ts=11596
+duration=0.241583
+bit_rate=1152000
+max_bit_rate=N/A
+bits_per_raw_sample=24
+nb_frames=N/A
+nb_read_frames=N/A
+nb_read_packets=N/A
+DISPOSITION:default=0
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=0
+DISPOSITION:still_image=0
+TAG:file_package_umid=0x060A2B340101010501010D2313003E792039C0579AD9E111BAFB00D028113D2C
+[/STREAM]
+[STREAM]
+index=3
+codec_name=pcm_s24le
+profile=unknown
+codec_type=audio
+codec_tag_string=[0][0][0][0]
+codec_tag=0x0000
+sample_fmt=s32
+sample_rate=48000
+channels=1
+channel_layout=unknown
+bits_per_sample=24
+id=N/A
+r_frame_rate=0/0
+avg_frame_rate=0/0
+time_base=1/48000
+start_pts=0
+start_time=0.000000
+duration_ts=11596
+duration=0.241583
+bit_rate=1152000
+max_bit_rate=N/A
+bits_per_raw_sample=24
+nb_frames=N/A
+nb_read_frames=N/A
+nb_read_packets=N/A
+DISPOSITION:default=0
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=0
+DISPOSITION:still_image=0
+TAG:file_package_umid=0x060A2B340101010501010D2313003E792039C0579AD9E111BAFB00D028113D2C
+[/STREAM]
+[STREAM]
+index=4
+codec_name=pcm_s24le
+profile=unknown
+codec_type=audio
+codec_tag_string=[0][0][0][0]
+codec_tag=0x0000
+sample_fmt=s32
+sample_rate=48000
+channels=1
+channel_layout=unknown
+bits_per_sample=24
+id=N/A
+r_frame_rate=0/0
+avg_frame_rate=0/0
+time_base=1/48000
+start_pts=0
+start_time=0.000000
+duration_ts=11596
+duration=0.241583
+bit_rate=1152000
+max_bit_rate=N/A
+bits_per_raw_sample=24
+nb_frames=N/A
+nb_read_frames=N/A
+nb_read_packets=N/A
+DISPOSITION:default=0
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=0
+DISPOSITION:still_image=0
+TAG:file_package_umid=0x060A2B340101010501010D2313003E792039C0579AD9E111BAFB00D028113D2C
+[/STREAM]
+[STREAM]
+index=5
+codec_name=pcm_s24le
+profile=unknown
+codec_type=audio
+codec_tag_string=[0][0][0][0]
+codec_tag=0x0000
+sample_fmt=s32
+sample_rate=48000
+channels=1
+channel_layout=unknown
+bits_per_sample=24
+id=N/A
+r_frame_rate=0/0
+avg_frame_rate=0/0
+time_base=1/48000
+start_pts=0
+start_time=0.000000
+duration_ts=11596
+duration=0.241583
+bit_rate=1152000
+max_bit_rate=N/A
+bits_per_raw_sample=24
+nb_frames=N/A
+nb_read_frames=N/A
+nb_read_packets=N/A
+DISPOSITION:default=0
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=0
+DISPOSITION:still_image=0
+TAG:file_package_umid=0x060A2B340101010501010D2313003E792039C0579AD9E111BAFB00D028113D2C
+[/STREAM]
+[STREAM]
+index=6
+codec_name=pcm_s24le
+profile=unknown
+codec_type=audio
+codec_tag_string=[0][0][0][0]
+codec_tag=0x0000
+sample_fmt=s32
+sample_rate=48000
+channels=1
+channel_layout=unknown
+bits_per_sample=24
+id=N/A
+r_frame_rate=0/0
+avg_frame_rate=0/0
+time_base=1/48000
+start_pts=0
+start_time=0.000000
+duration_ts=11596
+duration=0.241583
+bit_rate=1152000
+max_bit_rate=N/A
+bits_per_raw_sample=24
+nb_frames=N/A
+nb_read_frames=N/A
+nb_read_packets=N/A
+DISPOSITION:default=0
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=0
+DISPOSITION:still_image=0
+TAG:file_package_umid=0x060A2B340101010501010D2313003E792039C0579AD9E111BAFB00D028113D2C
+[/STREAM]
+[STREAM]
+index=7
+codec_name=pcm_s24le
+profile=unknown
+codec_type=audio
+codec_tag_string=[0][0][0][0]
+codec_tag=0x0000
+sample_fmt=s32
+sample_rate=48000
+channels=1
+channel_layout=unknown
+bits_per_sample=24
+id=N/A
+r_frame_rate=0/0
+avg_frame_rate=0/0
+time_base=1/48000
+start_pts=0
+start_time=0.000000
+duration_ts=11596
+duration=0.241583
+bit_rate=1152000
+max_bit_rate=N/A
+bits_per_raw_sample=24
+nb_frames=N/A
+nb_read_frames=N/A
+nb_read_packets=N/A
+DISPOSITION:default=0
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=0
+DISPOSITION:still_image=0
+TAG:file_package_umid=0x060A2B340101010501010D2313003E792039C0579AD9E111BAFB00D028113D2C
+[/STREAM]
+[STREAM]
+index=8
+codec_name=pcm_s24le
+profile=unknown
+codec_type=audio
+codec_tag_string=[0][0][0][0]
+codec_tag=0x0000
+sample_fmt=s32
+sample_rate=48000
+channels=1
+channel_layout=unknown
+bits_per_sample=24
+id=N/A
+r_frame_rate=0/0
+avg_frame_rate=0/0
+time_base=1/48000
+start_pts=0
+start_time=0.000000
+duration_ts=11596
+duration=0.241583
+bit_rate=1152000
+max_bit_rate=N/A
+bits_per_raw_sample=24
+nb_frames=N/A
+nb_read_frames=N/A
+nb_read_packets=N/A
+DISPOSITION:default=0
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=0
+DISPOSITION:still_image=0
+TAG:file_package_umid=0x060A2B340101010501010D2313003E792039C0579AD9E111BAFB00D028113D2C
+[/STREAM]
+[FORMAT]
+format_name=mxf
+duration=0.241583
+bit_rate=59674662
+TAG:operational_pattern_ul=060e2b34.04010101.0d010201.01010900
+TAG:uid=8033c057-9ad9-e111-aa7e-00d028113d2c
+TAG:generation_uid=9433c057-9ad9-e111-96cf-00d028113d2c
+TAG:company_name=Omneon Inc.
+TAG:product_name=Omneon Media Subsystem
+TAG:modification_date=2012-07-29T16:27:51.820000Z
+TAG:product_version=6.4.1.0.release
+TAG:product_version_num=6.4.1.0.1
+TAG:application_platform=Omneon Media Api (mqx)    
+TAG:product_uid=00000000-0000-0010-8000-050e0b010602
+TAG:material_package_umid=0x060A2B340101010501010D2313001BDF4438C0579AD9E1119C8800D028113D2C
+TAG:timecode=18:27:53:21
+[/FORMAT]
diff --git a/tests/ref/fate/mxf-probe-xdcamhd-tcfooter b/tests/ref/fate/mxf-probe-xdcamhd-tcfooter
new file mode 100644
index 0000000000..710cf616b5
--- /dev/null
+++ b/tests/ref/fate/mxf-probe-xdcamhd-tcfooter
@@ -0,0 +1,442 @@
+[STREAM]
+index=0
+codec_name=mpeg2video
+profile=0
+codec_type=video
+codec_tag_string=[0][0][0][0]
+codec_tag=0x0000
+width=1920
+height=1080
+coded_width=0
+coded_height=0
+closed_captions=0
+has_b_frames=1
+sample_aspect_ratio=1:1
+display_aspect_ratio=16:9
+pix_fmt=yuv422p
+level=2
+color_range=tv
+color_space=bt709
+color_transfer=bt709
+color_primaries=bt709
+chroma_location=topleft
+field_order=tt
+refs=1
+id=N/A
+r_frame_rate=25/1
+avg_frame_rate=25/1
+time_base=1/25
+start_pts=0
+start_time=0.000000
+duration_ts=13
+duration=0.520000
+bit_rate=50000000
+max_bit_rate=N/A
+bits_per_raw_sample=N/A
+nb_frames=N/A
+nb_read_frames=N/A
+nb_read_packets=N/A
+DISPOSITION:default=0
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=0
+DISPOSITION:still_image=0
+TAG:file_package_umid=0x060A2B340101010501010D231300114B920EA7CA8BBF1B1EAC7100D028113D5C
+[SIDE_DATA]
+side_data_type=CPB properties
+max_bitrate=50000000
+min_bitrate=0
+avg_bitrate=0
+buffer_size=17825792
+vbv_delay=-1
+[/SIDE_DATA]
+[/STREAM]
+[STREAM]
+index=1
+codec_name=pcm_s24le
+profile=unknown
+codec_type=audio
+codec_tag_string=[0][0][0][0]
+codec_tag=0x0000
+sample_fmt=s32
+sample_rate=48000
+channels=1
+channel_layout=unknown
+bits_per_sample=24
+id=N/A
+r_frame_rate=0/0
+avg_frame_rate=0/0
+time_base=1/48000
+start_pts=0
+start_time=0.000000
+duration_ts=24960
+duration=0.520000
+bit_rate=1152000
+max_bit_rate=N/A
+bits_per_raw_sample=24
+nb_frames=N/A
+nb_read_frames=N/A
+nb_read_packets=N/A
+DISPOSITION:default=0
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=0
+DISPOSITION:still_image=0
+TAG:file_package_umid=0x060A2B340101010501010D231300114B920EA7CA8BBF1B1EAC7100D028113D5C
+[/STREAM]
+[STREAM]
+index=2
+codec_name=pcm_s24le
+profile=unknown
+codec_type=audio
+codec_tag_string=[0][0][0][0]
+codec_tag=0x0000
+sample_fmt=s32
+sample_rate=48000
+channels=1
+channel_layout=unknown
+bits_per_sample=24
+id=N/A
+r_frame_rate=0/0
+avg_frame_rate=0/0
+time_base=1/48000
+start_pts=0
+start_time=0.000000
+duration_ts=24960
+duration=0.520000
+bit_rate=1152000
+max_bit_rate=N/A
+bits_per_raw_sample=24
+nb_frames=N/A
+nb_read_frames=N/A
+nb_read_packets=N/A
+DISPOSITION:default=0
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=0
+DISPOSITION:still_image=0
+TAG:file_package_umid=0x060A2B340101010501010D231300114B920EA7CA8BBF1B1EAC7100D028113D5C
+[/STREAM]
+[STREAM]
+index=3
+codec_name=pcm_s24le
+profile=unknown
+codec_type=audio
+codec_tag_string=[0][0][0][0]
+codec_tag=0x0000
+sample_fmt=s32
+sample_rate=48000
+channels=1
+channel_layout=unknown
+bits_per_sample=24
+id=N/A
+r_frame_rate=0/0
+avg_frame_rate=0/0
+time_base=1/48000
+start_pts=0
+start_time=0.000000
+duration_ts=24960
+duration=0.520000
+bit_rate=1152000
+max_bit_rate=N/A
+bits_per_raw_sample=24
+nb_frames=N/A
+nb_read_frames=N/A
+nb_read_packets=N/A
+DISPOSITION:default=0
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=0
+DISPOSITION:still_image=0
+TAG:file_package_umid=0x060A2B340101010501010D231300114B920EA7CA8BBF1B1EAC7100D028113D5C
+[/STREAM]
+[STREAM]
+index=4
+codec_name=pcm_s24le
+profile=unknown
+codec_type=audio
+codec_tag_string=[0][0][0][0]
+codec_tag=0x0000
+sample_fmt=s32
+sample_rate=48000
+channels=1
+channel_layout=unknown
+bits_per_sample=24
+id=N/A
+r_frame_rate=0/0
+avg_frame_rate=0/0
+time_base=1/48000
+start_pts=0
+start_time=0.000000
+duration_ts=24960
+duration=0.520000
+bit_rate=1152000
+max_bit_rate=N/A
+bits_per_raw_sample=24
+nb_frames=N/A
+nb_read_frames=N/A
+nb_read_packets=N/A
+DISPOSITION:default=0
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=0
+DISPOSITION:still_image=0
+TAG:file_package_umid=0x060A2B340101010501010D231300114B920EA7CA8BBF1B1EAC7100D028113D5C
+[/STREAM]
+[STREAM]
+index=5
+codec_name=pcm_s24le
+profile=unknown
+codec_type=audio
+codec_tag_string=[0][0][0][0]
+codec_tag=0x0000
+sample_fmt=s32
+sample_rate=48000
+channels=1
+channel_layout=unknown
+bits_per_sample=24
+id=N/A
+r_frame_rate=0/0
+avg_frame_rate=0/0
+time_base=1/48000
+start_pts=0
+start_time=0.000000
+duration_ts=24960
+duration=0.520000
+bit_rate=1152000
+max_bit_rate=N/A
+bits_per_raw_sample=24
+nb_frames=N/A
+nb_read_frames=N/A
+nb_read_packets=N/A
+DISPOSITION:default=0
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=0
+DISPOSITION:still_image=0
+TAG:file_package_umid=0x060A2B340101010501010D231300114B920EA7CA8BBF1B1EAC7100D028113D5C
+[/STREAM]
+[STREAM]
+index=6
+codec_name=pcm_s24le
+profile=unknown
+codec_type=audio
+codec_tag_string=[0][0][0][0]
+codec_tag=0x0000
+sample_fmt=s32
+sample_rate=48000
+channels=1
+channel_layout=unknown
+bits_per_sample=24
+id=N/A
+r_frame_rate=0/0
+avg_frame_rate=0/0
+time_base=1/48000
+start_pts=0
+start_time=0.000000
+duration_ts=24960
+duration=0.520000
+bit_rate=1152000
+max_bit_rate=N/A
+bits_per_raw_sample=24
+nb_frames=N/A
+nb_read_frames=N/A
+nb_read_packets=N/A
+DISPOSITION:default=0
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=0
+DISPOSITION:still_image=0
+TAG:file_package_umid=0x060A2B340101010501010D231300114B920EA7CA8BBF1B1EAC7100D028113D5C
+[/STREAM]
+[STREAM]
+index=7
+codec_name=pcm_s24le
+profile=unknown
+codec_type=audio
+codec_tag_string=[0][0][0][0]
+codec_tag=0x0000
+sample_fmt=s32
+sample_rate=48000
+channels=1
+channel_layout=unknown
+bits_per_sample=24
+id=N/A
+r_frame_rate=0/0
+avg_frame_rate=0/0
+time_base=1/48000
+start_pts=0
+start_time=0.000000
+duration_ts=24960
+duration=0.520000
+bit_rate=1152000
+max_bit_rate=N/A
+bits_per_raw_sample=24
+nb_frames=N/A
+nb_read_frames=N/A
+nb_read_packets=N/A
+DISPOSITION:default=0
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=0
+DISPOSITION:still_image=0
+TAG:file_package_umid=0x060A2B340101010501010D231300114B920EA7CA8BBF1B1EAC7100D028113D5C
+[/STREAM]
+[STREAM]
+index=8
+codec_name=pcm_s24le
+profile=unknown
+codec_type=audio
+codec_tag_string=[0][0][0][0]
+codec_tag=0x0000
+sample_fmt=s32
+sample_rate=48000
+channels=1
+channel_layout=unknown
+bits_per_sample=24
+id=N/A
+r_frame_rate=0/0
+avg_frame_rate=0/0
+time_base=1/48000
+start_pts=0
+start_time=0.000000
+duration_ts=24960
+duration=0.520000
+bit_rate=1152000
+max_bit_rate=N/A
+bits_per_raw_sample=24
+nb_frames=N/A
+nb_read_frames=N/A
+nb_read_packets=N/A
+DISPOSITION:default=0
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=0
+DISPOSITION:still_image=0
+TAG:file_package_umid=0x060A2B340101010501010D231300114B920EA7CA8BBF1B1EAC7100D028113D5C
+[/STREAM]
+[FORMAT]
+format_name=mxf
+duration=0.520000
+bit_rate=82212369
+TAG:operational_pattern_ul=060e2b34.04010101.0d010201.01010900
+TAG:application_platform=Omneon Media Api (mqx)    
+TAG:uid=6e0aa7ca-8bbf-1b1e-a5b4-00d028113d5c
+TAG:generation_uid=780aa7ca-8bbf-1b1e-93f8-00d028113d5c
+TAG:company_name=Omneon Inc.
+TAG:product_name=Omneon Media Subsystem
+TAG:modification_date=2021-05-28T08:07:48.620000Z
+TAG:product_version=8.3.0.0.release
+TAG:product_version_num=8.3.0.0.1
+TAG:product_uid=00000000-0000-1000-8000-050e0b010602
+TAG:material_package_umid=0x060A2B340101010501010D2313009472DE0DA7CA8BBF1B1EB07100D028113D5C
+TAG:timecode=10:11:17:21
+[/FORMAT]
-- 
2.17.1

From 7e4118232882ab8a72091d42e3660a63c0b53f1c Mon Sep 17 00:00:00 2001
From: Marton Balint <c...@passwd.hu>
Date: Sun, 27 Jun 2021 22:59:49 +0200
Subject: [PATCH] avformat/mxfdec: prefer footer and complete partitions for
 metadata

Also do not store inferior metadata with the same UID.

Signed-off-by: Marton Balint <c...@passwd.hu>
---
 libavformat/mxfdec.c | 51 ++++++++++++++++++++++++++++++++++++++++----
 1 file changed, 47 insertions(+), 4 deletions(-)

diff --git a/libavformat/mxfdec.c b/libavformat/mxfdec.c
index 3bf480a3a6..9e8730e9b5 100644
--- a/libavformat/mxfdec.c
+++ b/libavformat/mxfdec.c
@@ -108,12 +108,14 @@ typedef struct MXFPartition {
 
 typedef struct MXFCryptoContext {
     UID uid;
+    MXFPartition *partition;
     enum MXFMetadataSetType type;
     UID source_container_ul;
 } MXFCryptoContext;
 
 typedef struct MXFStructuralComponent {
     UID uid;
+    MXFPartition *partition;
     enum MXFMetadataSetType type;
     UID source_package_ul;
     UID source_package_uid;
@@ -125,6 +127,7 @@ typedef struct MXFStructuralComponent {
 
 typedef struct MXFSequence {
     UID uid;
+    MXFPartition *partition;
     enum MXFMetadataSetType type;
     UID data_definition_ul;
     UID *structural_components_refs;
@@ -135,6 +138,7 @@ typedef struct MXFSequence {
 
 typedef struct MXFTimecodeComponent {
     UID uid;
+    MXFPartition *partition;
     enum MXFMetadataSetType type;
     int drop_frame;
     int start_frame;
@@ -144,12 +148,14 @@ typedef struct MXFTimecodeComponent {
 
 typedef struct {
     UID uid;
+    MXFPartition *partition;
     enum MXFMetadataSetType type;
     UID input_segment_ref;
 } MXFPulldownComponent;
 
 typedef struct {
     UID uid;
+    MXFPartition *partition;
     enum MXFMetadataSetType type;
     UID *structural_components_refs;
     int structural_components_count;
@@ -158,6 +164,7 @@ typedef struct {
 
 typedef struct {
     UID uid;
+    MXFPartition *partition;
     enum MXFMetadataSetType type;
     char *name;
     char *value;
@@ -165,6 +172,7 @@ typedef struct {
 
 typedef struct {
     UID uid;
+    MXFPartition *partition;
     enum MXFMetadataSetType type;
     MXFSequence *sequence; /* mandatory, and only one */
     UID sequence_ref;
@@ -183,6 +191,7 @@ typedef struct {
 
 typedef struct MXFDescriptor {
     UID uid;
+    MXFPartition *partition;
     enum MXFMetadataSetType type;
     UID essence_container_ul;
     UID essence_codec_ul;
@@ -222,6 +231,7 @@ typedef struct MXFDescriptor {
 
 typedef struct MXFIndexTableSegment {
     UID uid;
+    MXFPartition *partition;
     enum MXFMetadataSetType type;
     int edit_unit_byte_count;
     int index_sid;
@@ -237,6 +247,7 @@ typedef struct MXFIndexTableSegment {
 
 typedef struct MXFPackage {
     UID uid;
+    MXFPartition *partition;
     enum MXFMetadataSetType type;
     UID package_uid;
     UID package_ul;
@@ -251,6 +262,7 @@ typedef struct MXFPackage {
 
 typedef struct MXFEssenceContainerData {
     UID uid;
+    MXFPartition *partition;
     enum MXFMetadataSetType type;
     UID package_uid;
     UID package_ul;
@@ -260,6 +272,7 @@ typedef struct MXFEssenceContainerData {
 
 typedef struct MXFMetadataSet {
     UID uid;
+    MXFPartition *partition;
     enum MXFMetadataSetType type;
 } MXFMetadataSet;
 
@@ -844,10 +857,39 @@ static int mxf_read_partition_pack(void *arg, AVIOContext *pb, int tag, int size
     return 0;
 }
 
+static int partition_score(MXFPartition *p)
+{
+    if (p->type == Footer)
+        return 5;
+    if (p->complete)
+        return 4;
+    if (p->closed)
+        return 3;
+    return 1;
+}
+
 static int mxf_add_metadata_set(MXFContext *mxf, MXFMetadataSet **metadata_set)
 {
     MXFMetadataSet **tmp;
-
+    MXFPartition *new_p = (*metadata_set)->partition;
+    enum MXFMetadataSetType type = (*metadata_set)->type;
+
+    // Index Table is special because it might be added manually without
+    // partition and we iterate thorugh all instances of them. Also some files
+    // use the same Instance UID for different index tables...
+    if (type != IndexTableSegment) {
+        for (int i = 0; i < mxf->metadata_sets_count; i++) {
+            if (!memcmp((*metadata_set)->uid, mxf->metadata_sets[i]->uid, 16) && type == mxf->metadata_sets[i]->type) {
+                MXFPartition *old_p = mxf->metadata_sets[i]->partition;
+                int old_s = partition_score(old_p);
+                int new_s = partition_score(new_p);
+                if (old_s > new_s || old_s == new_s && old_p->this_partition > new_p->this_partition) {
+                     mxf_free_metadataset(metadata_set, 1);
+                     return 0;
+                }
+            }
+        }
+    }
     tmp = av_realloc_array(mxf->metadata_sets, mxf->metadata_sets_count + 1, sizeof(*mxf->metadata_sets));
     if (!tmp) {
         mxf_free_metadataset(metadata_set, 1);
@@ -1402,7 +1444,7 @@ static void *mxf_resolve_strong_ref(MXFContext *mxf, UID *strong_ref, enum MXFMe
 
     if (!strong_ref)
         return NULL;
-    for (i = 0; i < mxf->metadata_sets_count; i++) {
+    for (i = mxf->metadata_sets_count - 1; i >= 0; i--) {
         if (!memcmp(*strong_ref, mxf->metadata_sets[i]->uid, 16) &&
             (type == AnyType || mxf->metadata_sets[i]->type == type)) {
             return mxf->metadata_sets[i];
@@ -2871,9 +2913,10 @@ static const MXFMetadataReadTableEntry mxf_metadata_read_table[] = {
     { { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, NULL, 0, AnyType },
 };
 
-static int mxf_metadataset_init(MXFMetadataSet *ctx, enum MXFMetadataSetType type)
+static int mxf_metadataset_init(MXFMetadataSet *ctx, enum MXFMetadataSetType type, MXFPartition *partition)
 {
     ctx->type = type;
+    ctx->partition = partition;
     switch (type){
     case MultipleDescriptor:
     case Descriptor:
@@ -2898,7 +2941,7 @@ static int mxf_read_local_tags(MXFContext *mxf, KLVPacket *klv, MXFMetadataReadF
         if (!meta)
             return AVERROR(ENOMEM);
         ctx  = meta;
-        mxf_metadataset_init(meta, type);
+        mxf_metadataset_init(meta, type, mxf->current_partition);
     } else {
         meta = NULL;
         ctx  = mxf;
-- 
2.26.2

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to