Lines Matching defs:descriptor
260 MXFDescriptor *descriptor; /* only one */
1271 static void mxf_read_pixel_layout(AVIOContext *pb, MXFDescriptor *descriptor)
1288 ff_mxf_decode_pixel_layout(layout, &descriptor->pix_fmt);
1293 MXFDescriptor *descriptor = arg;
1298 return mxf_read_strong_ref_array(pb, &descriptor->file_descriptors_refs,
1299 &descriptor->file_descriptors_count);
1301 descriptor->duration = avio_rb64(pb);
1304 avio_read(pb, descriptor->essence_container_ul, 16);
1307 avio_read(pb, descriptor->codec_ul, 16);
1310 descriptor->linked_track_id = avio_rb32(pb);
1313 avio_read(pb, descriptor->essence_codec_ul, 16);
1316 descriptor->width = avio_rb32(pb);
1319 descriptor->height = avio_rb32(pb);
1322 descriptor->frame_layout = avio_r8(pb);
1329 descriptor->video_line_map[0] = avio_rb32(pb);
1331 descriptor->video_line_map[0] = 0;
1333 descriptor->video_line_map[1] = avio_rb32(pb);
1335 descriptor->video_line_map[1] = 0;
1340 descriptor->aspect_ratio.num = avio_rb32(pb);
1341 descriptor->aspect_ratio.den = avio_rb32(pb);
1344 avio_read(pb, descriptor->color_trc_ul, 16);
1347 descriptor->field_dominance = avio_r8(pb);
1350 avio_read(pb, descriptor->color_primaries_ul, 16);
1353 avio_read(pb, descriptor->color_space_ul, 16);
1356 descriptor->component_depth = avio_rb32(pb);
1359 descriptor->horiz_subsampling = avio_rb32(pb);
1362 descriptor->black_ref_level = avio_rb32(pb);
1365 descriptor->white_ref_level = avio_rb32(pb);
1368 descriptor->color_range = avio_rb32(pb);
1371 descriptor->vert_subsampling = avio_rb32(pb);
1374 descriptor->sample_rate.num = avio_rb32(pb);
1375 descriptor->sample_rate.den = avio_rb32(pb);
1378 avio_read(pb, descriptor->essence_codec_ul, 16);
1381 descriptor->channels = avio_rb32(pb);
1384 descriptor->bits_per_sample = avio_rb32(pb);
1387 mxf_read_pixel_layout(pb, descriptor);
1392 if (descriptor->extradata)
1394 av_free(descriptor->extradata);
1395 descriptor->extradata_size = 0;
1396 descriptor->extradata = av_malloc(size);
1397 if (!descriptor->extradata)
1399 descriptor->extradata_size = size;
1400 avio_read(pb, descriptor->extradata, size);
1406 descriptor->pix_fmt = AV_PIX_FMT_XYZ12;
1409 if (!descriptor->mastering) {
1410 descriptor->mastering = av_mastering_display_metadata_alloc();
1411 if (!descriptor->mastering)
1417 descriptor->mastering->display_primaries[i][0] = av_make_q(avio_rb16(pb), FF_MXF_MASTERING_CHROMA_DEN);
1418 descriptor->mastering->display_primaries[i][1] = av_make_q(avio_rb16(pb), FF_MXF_MASTERING_CHROMA_DEN);
1421 if (descriptor->mastering->white_point[0].den != 0)
1422 descriptor->mastering->has_primaries = 1;
1425 descriptor->mastering->white_point[0] = av_make_q(avio_rb16(pb), FF_MXF_MASTERING_CHROMA_DEN);
1426 descriptor->mastering->white_point[1] = av_make_q(avio_rb16(pb), FF_MXF_MASTERING_CHROMA_DEN);
1428 if (descriptor->mastering->display_primaries[0][0].den != 0)
1429 descriptor->mastering->has_primaries = 1;
1432 descriptor->mastering->max_luminance = av_make_q(avio_rb32(pb), FF_MXF_MASTERING_LUMA_DEN);
1434 if (descriptor->mastering->min_luminance.den != 0)
1435 descriptor->mastering->has_luminance = 1;
1438 descriptor->mastering->min_luminance = av_make_q(avio_rb32(pb), FF_MXF_MASTERING_LUMA_DEN);
1440 if (descriptor->mastering->max_luminance.den != 0)
1441 descriptor->mastering->has_luminance = 1;
1445 if (!descriptor->coll) {
1446 descriptor->coll = av_content_light_metadata_alloc(&descriptor->coll_size);
1447 if (!descriptor->coll)
1451 descriptor->coll->MaxCLL = avio_rb16(pb);
1454 descriptor->coll->MaxFALL = avio_rb16(pb);
1459 return mxf_read_strong_ref_array(pb, &descriptor->sub_descriptors_refs, &descriptor->sub_descriptors_count);
2132 static int mxf_is_intra_only(MXFDescriptor *descriptor)
2135 &descriptor->essence_container_ul)->id != AV_CODEC_ID_NONE ||
2137 &descriptor->essence_codec_ul)->id != AV_CODEC_ID_NONE;
2212 static MXFDescriptor* mxf_resolve_multidescriptor(MXFContext *mxf, MXFDescriptor *descriptor, int track_id)
2217 if (!descriptor)
2220 if (descriptor->meta.type == MultipleDescriptor) {
2221 for (i = 0; i < descriptor->file_descriptors_count; i++) {
2222 file_descriptor = mxf_resolve_strong_ref(mxf, &descriptor->file_descriptors_refs[i], Descriptor);
2225 av_log(mxf->fc, AV_LOG_ERROR, "could not resolve file descriptor strong ref\n");
2232 } else if (descriptor->meta.type == Descriptor)
2233 return descriptor;
2242 MXFDescriptor *descriptor = NULL;
2258 descriptor = mxf_resolve_strong_ref(mxf, &package->descriptor_ref, Descriptor);
2259 if (descriptor)
2413 static enum AVColorRange mxf_get_color_range(MXFContext *mxf, MXFDescriptor *descriptor)
2415 if (descriptor->black_ref_level || descriptor->white_ref_level || descriptor->color_range) {
2417 if (!descriptor->component_depth)
2419 if (descriptor->black_ref_level == 0 && descriptor->component_depth < 31 &&
2420 descriptor->white_ref_level == ((1<<descriptor->component_depth) - 1) &&
2421 (descriptor->color_range == (1<<descriptor->component_depth) ||
2422 descriptor->color_range == ((1<<descriptor->component_depth) - 1)))
2424 if (descriptor->component_depth >= 8 && descriptor->component_depth < 31 &&
2425 descriptor->black_ref_level == (1 <<(descriptor->component_depth - 4)) &&
2426 descriptor->white_ref_level == (235<<(descriptor->component_depth - 8)) &&
2427 descriptor->color_range == ((14<<(descriptor->component_depth - 4)) + 1))
2430 descriptor->color_range, descriptor->black_ref_level,
2431 descriptor->white_ref_level, descriptor->component_depth);
2468 static int parse_mca_labels(MXFContext *mxf, MXFTrack *source_track, MXFDescriptor *descriptor, AVStream *st)
2477 for (int i = 0; i < descriptor->sub_descriptors_count; i++) {
2480 MXFMCASubDescriptor *label = mxf_resolve_strong_ref(mxf, &descriptor->sub_descriptors_refs[i], AudioChannelLabelSubDescriptor);
2488 if (target_channel == 0 && descriptor->channels == 1)
2490 if (target_channel <= 0 || target_channel > descriptor->channels) {
2543 for (int i = 0; i < descriptor->channels; i++) {
2565 av_assert0(descriptor->channels == av_popcount64(channel_layout));
2601 MXFDescriptor *descriptor = NULL;
2721 source_package->descriptor = mxf_resolve_strong_ref(mxf, &source_package->descriptor_ref, AnyType);
2722 descriptor = mxf_resolve_multidescriptor(mxf, source_package->descriptor, source_track->track_id);
2726 if (descriptor && descriptor->duration != AV_NOPTS_VALUE)
2727 source_track->original_duration = st->duration = FFMIN(descriptor->duration, component->duration);
2753 if (!descriptor) {
2754 av_log(mxf->fc, AV_LOG_INFO, "source track %d: stream %d, no descriptor found\n", source_track->track_id, st->index);
2757 PRINT_KEY(mxf->fc, "essence codec ul", descriptor->essence_codec_ul);
2758 PRINT_KEY(mxf->fc, "essence container ul", descriptor->essence_container_ul);
2759 essence_container_ul = &descriptor->essence_container_ul;
2777 codec_ul = mxf_get_codec_ul(ff_mxf_codec_uls, &descriptor->essence_codec_ul);
2780 codec_ul = mxf_get_codec_ul(ff_mxf_codec_uls, &descriptor->codec_ul);
2788 descriptor->essence_codec_ul[k]);
2803 source_track->intra_only = mxf_is_intra_only(descriptor);
2807 st->codecpar->width = descriptor->width;
2808 st->codecpar->height = descriptor->height; /* Field height, not frame height */
2809 switch (descriptor->frame_layout) {
2825 descriptor->video_line_map[0], descriptor->video_line_map[1],
2826 descriptor->field_dominance);
2827 if ((descriptor->video_line_map[0] > 0) && (descriptor->video_line_map[1] > 0)) {
2834 if ((descriptor->video_line_map[0] + descriptor->video_line_map[1]) % 2) {
2835 switch (descriptor->field_dominance) {
2846 descriptor->field_dominance);
2849 switch (descriptor->field_dominance) {
2860 descriptor->field_dominance);
2868 av_log(mxf->fc, AV_LOG_INFO, "Unknown frame layout type: %d\n", descriptor->frame_layout);
2872 switch (descriptor->essence_codec_ul[14]) {
2883 st->codecpar->format = descriptor->pix_fmt;
2886 &descriptor->essence_codec_ul);
2890 &descriptor->essence_codec_ul)->id;
2894 if (descriptor->horiz_subsampling == 2 &&
2895 descriptor->vert_subsampling == 1 &&
2896 descriptor->component_depth == 8) {
2910 if (descriptor->aspect_ratio.num && descriptor->aspect_ratio.den)
2911 sti->display_aspect_ratio = descriptor->aspect_ratio;
2912 st->codecpar->color_range = mxf_get_color_range(mxf, descriptor);
2913 st->codecpar->color_primaries = mxf_get_codec_ul(ff_mxf_color_primaries_uls, &descriptor->color_primaries_ul)->id;
2914 st->codecpar->color_trc = mxf_get_codec_ul(ff_mxf_color_trc_uls, &descriptor->color_trc_ul)->id;
2915 st->codecpar->color_space = mxf_get_codec_ul(ff_mxf_color_space_uls, &descriptor->color_space_ul)->id;
2916 if (descriptor->mastering) {
2918 (uint8_t *)descriptor->mastering,
2919 sizeof(*descriptor->mastering));
2922 descriptor->mastering = NULL;
2924 if (descriptor->coll) {
2926 (uint8_t *)descriptor->coll,
2927 descriptor->coll_size);
2930 descriptor->coll = NULL;
2937 st->codecpar->ch_layout.nb_channels = descriptor->channels;
2939 if (descriptor->sample_rate.den > 0) {
2940 st->codecpar->sample_rate = descriptor->sample_rate.num / descriptor->sample_rate.den;
2941 avpriv_set_pts_info(st, 64, descriptor->sample_rate.den, descriptor->sample_rate.num);
2945 descriptor->sample_rate.num, descriptor->sample_rate.den,
2958 if (descriptor->bits_per_sample > 16 && descriptor->bits_per_sample <= 24)
2960 else if (descriptor->bits_per_sample == 32)
2963 if (descriptor->bits_per_sample > 16 && descriptor->bits_per_sample <= 24)
2965 else if (descriptor->bits_per_sample == 32)
2972 if (descriptor->channels <= 0 || descriptor->channels >= FF_SANE_NB_CHANNELS) {
2973 av_log(mxf->fc, AV_LOG_ERROR, "Invalid number of channels %d, must be less than %d\n", descriptor->channels, FF_SANE_NB_CHANNELS);
2977 ret = parse_mca_labels(mxf, source_track, descriptor, st);
2996 if (descriptor->extradata) {
2997 if (!ff_alloc_extradata(st->codecpar, descriptor->extradata_size)) {
2998 memcpy(st->codecpar->extradata, descriptor->extradata, descriptor->extradata_size);
3002 &descriptor->essence_codec_ul)->id;