Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions libavformat/mxfdec.c
Original file line number Diff line number Diff line change
Expand Up @@ -2140,6 +2140,13 @@ static int mxf_compute_index_tables(MXFContext *mxf)
return ret;
}

static int mxf_is_st_422(const UID *essence_container_ul) {
static const uint8_t st_422_essence_container_ul[] = { 0x06,0x0e,0x2b,0x34,0x04,0x01,0x01,0x07,0x0d,0x01,0x03,0x01,0x02,0x0c };

return essence_container_ul && mxf_match_uid(*essence_container_ul, st_422_essence_container_ul,
sizeof(st_422_essence_container_ul));
}

static int mxf_is_intra_only(MXFDescriptor *descriptor)
{
return mxf_get_codec_ul(mxf_intra_only_essence_container_uls,
Expand Down Expand Up @@ -2892,6 +2899,24 @@ static int mxf_parse_structural_metadata(MXFContext *mxf)
av_log(mxf->fc, AV_LOG_INFO, "Unknown frame layout type: %d\n", descriptor->frame_layout);
}

if (mxf_is_st_422(essence_container_ul)) {
switch ((*essence_container_ul)[14]) {
case 2: /* Cn: Clip- wrapped Picture Element */
case 3: /* I1: Interlaced Frame, 1 field/KLV */
case 4: /* I2: Interlaced Frame, 2 fields/KLV */
case 6: /* P1: Frame- wrapped Picture Element */
st->avg_frame_rate = source_track->edit_rate;
st->r_frame_rate = st->avg_frame_rate;
break;
case 5: /* F1: Field-wrapped Picture Element */
st->avg_frame_rate = av_mul_q(av_make_q(2, 1), source_track->edit_rate);
st->r_frame_rate = st->avg_frame_rate;
break;
default:
break;
}
}

if (st->codecpar->codec_id == AV_CODEC_ID_PRORES) {
switch (descriptor->essence_codec_ul[14]) {
case 1: st->codecpar->codec_tag = MKTAG('a','p','c','o'); break;
Expand Down
4 changes: 4 additions & 0 deletions tests/fate/mxf.mak
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,10 @@ FATE_MXF_PROBE-$(call ENCDEC, DNXHD, MXF) += fate-mxf-probe-dnxhd
fate-mxf-probe-dnxhd: SRC = $(TARGET_SAMPLES)/mxf/multiple_components.mxf
fate-mxf-probe-dnxhd: CMD = run $(PROBE_FORMAT_STREAMS_COMMAND) -i "$(SRC)"

FATE_MXF_PROBE-$(call ENCDEC, JPEG2000, MXF) += fate-mxf-probe-j2k
fate-mxf-probe-j2k: SRC = $(TARGET_SAMPLES)/imf/countdown/countdown-small.mxf
fate-mxf-probe-j2k: CMD = run $(PROBE_FORMAT_STREAMS_COMMAND) -i "$(SRC)"

FATE_MXF_PROBE-$(call ENCDEC2, DVVIDEO, PCM_S16LE, MXF) += fate-mxf-probe-dv25
fate-mxf-probe-dv25: SRC = $(TARGET_SAMPLES)/mxf/Avid-00005.mxf
fate-mxf-probe-dv25: CMD = run $(PROBE_FORMAT_STREAMS_COMMAND) -i "$(SRC)"
Expand Down
78 changes: 78 additions & 0 deletions tests/ref/fate/mxf-probe-j2k
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
[STREAM]
index=0
codec_name=jpeg2000
profile=1798
codec_type=video
codec_tag_string=[0][0][0][0]
codec_tag=0x0000
width=640
height=360
coded_width=640
coded_height=360
closed_captions=0
film_grain=0
has_b_frames=0
sample_aspect_ratio=1:1
display_aspect_ratio=16:9
pix_fmt=rgb48le
level=-99
color_range=unknown
color_space=unknown
color_transfer=bt709
color_primaries=bt709
chroma_location=unspecified
field_order=progressive
refs=1
id=N/A
r_frame_rate=24/1
avg_frame_rate=24/1
time_base=1/24
start_pts=0
start_time=0.000000
duration_ts=24
duration=1.000000
bit_rate=N/A
max_bit_rate=N/A
bits_per_raw_sample=16
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=0x060A2B340101010501010F201300000035E05073878E4B2FB69D2369F25ADFC9
TAG:file_package_name=File Package: SMPTE ST 422 / ST 2067-5 frame wrapping of JPEG 2000 codestreams
TAG:track_name=Image Track
[/STREAM]
[FORMAT]
format_name=mxf
duration=1.000000
bit_rate=577792
TAG:operational_pattern_ul=060e2b34.04010101.0d010201.01010100
TAG:uid=f1994e51-a844-49e4-9459-1ddd622eb65d
TAG:generation_uid=1be151ac-cc95-4314-b09f-7420eda9932b
TAG:company_name=Sandflow Consulting LLC
TAG:product_name=dcdm2imf
TAG:product_version_num=0.0.0.0.0
TAG:product_version=1.0-beta1
TAG:product_uid=927fc4d1-89a3-4f88-88bb-d363ed33084a
TAG:modification_date=2022-01-07T22:05:01.000000Z
TAG:toolkit_version_num=2.10.38.27240.1
TAG:application_platform=win32
TAG:material_package_umid=0x060A2B340101010501010F201300000072BAF0557DA749308C14738BCD4FA116
TAG:material_package_name=Material Package
[/FORMAT]