int width;
int height; /* Field height, not frame height */
int frame_layout; /* See MXFFrameLayout enum */
+#define MXF_TFF 1
+#define MXF_BFF 2
+ int field_dominance;
int channels;
int bits_per_sample;
- int field_dominance;
unsigned int component_depth;
unsigned int horiz_subsampling;
unsigned int vert_subsampling;
if (st->duration == -1)
st->duration = AV_NOPTS_VALUE;
st->start_time = component->start_position;
- if (material_track->edit_rate.num <= 0 || material_track->edit_rate.den <= 0) {
+ if (material_track->edit_rate.num <= 0 ||
+ material_track->edit_rate.den <= 0) {
av_log(mxf->fc, AV_LOG_WARNING,
- "invalid edit rate (%d/%d) found on stream #%d, defaulting to 25/1\n",
- material_track->edit_rate.num, material_track->edit_rate.den, st->index);
+ "Invalid edit rate (%d/%d) found on stream #%d, "
+ "defaulting to 25/1\n",
+ material_track->edit_rate.num,
+ material_track->edit_rate.den, st->index);
material_track->edit_rate = (AVRational){25, 1};
}
avpriv_set_pts_info(st, 64, material_track->edit_rate.den, material_track->edit_rate.num);
case MixedFields:
break;
case SeparateFields:
- st->codec->height *= 2; /* Turn field height into frame height. */
+ switch (descriptor->field_dominance) {
+ case MXF_TFF:
+ st->codec->field_order = AV_FIELD_TT;
+ break;
+ case MXF_BFF:
+ st->codec->field_order = AV_FIELD_BB;
+ break;
+ default:
+ avpriv_request_sample(mxf->fc,
+ "Field dominance %d support",
+ descriptor->field_dominance);
+ break;
+ }
+ /* Turn field height into frame height. */
+ st->codec->height *= 2;
break;
default:
av_log(mxf->fc, AV_LOG_INFO, "Unknown frame layout type: %d\n", descriptor->frame_layout);