Lines Matching refs:track
309 uint64_t track;
681 { MATROSKA_ID_CUETRACK, EBML_UINT, 0, 0, offsetof(MatroskaIndexPos, track) },
1646 av_log(matroska->ctx, AV_LOG_ERROR, "Invalid track number %"PRIu64"\n", num);
1651 MatroskaTrack *track)
1653 MatroskaTrackEncoding *encodings = track->encodings.elem;
1869 MatroskaTrack *track = matroska->tracks.elem;
1872 if (track[j].uid == tags[i].target.trackuid &&
1873 track[j].stream) {
1875 &track[j].stream->metadata, NULL);
1881 "The tags at index %d refer to a non-existent track "
1990 MatroskaTrack *track = matroska_find_track_by_num(matroska,
1991 pos[j].track);
1992 if (track && track->stream)
1993 av_add_index_entry(track->stream,
2048 MatroskaTrack *track,
2051 AVStream *st = track->stream;
2052 uint8_t *p = track->codec_priv.data;
2053 int size = track->codec_priv.size;
2057 track->codec_priv.size = 0;
2061 track->codec_priv.size = 8 + FLAC_STREAMINFO_SIZE;
2063 p += track->codec_priv.size;
2064 size -= track->codec_priv.size;
2154 static int mkv_parse_video_color(AVStream *st, const MatroskaTrack *track) {
2155 const MatroskaTrackVideoColor *color = track->video.color.elem;
2159 if (!track->video.color.nb_elem)
2276 static int mkv_parse_video_projection(AVStream *st, const MatroskaTrack *track,
2280 const MatroskaTrackVideoProjection *mkv_projection = &track->video.projection;
2293 switch (track->video.projection.type) {
2297 if (track->video.projection.private.size == 20) {
2310 } else if (track->video.projection.private.size != 0) {
2321 if (track->video.projection.private.size < 4) {
2324 } else if (track->video.projection.private.size == 12) {
2341 track->video.projection.type);
2351 spherical->yaw = (int32_t) (track->video.projection.yaw * (1 << 16));
2352 spherical->pitch = (int32_t) (track->video.projection.pitch * (1 << 16));
2353 spherical->roll = (int32_t) (track->video.projection.roll * (1 << 16));
2372 static int mkv_parse_dvcc_dvvc(AVFormatContext *s, AVStream *st, const MatroskaTrack *track,
2378 static int mkv_parse_block_addition_mappings(AVFormatContext *s, AVStream *st, const MatroskaTrack *track)
2380 const EbmlList *mappings_list = &track->block_addition_mappings;
2390 if ((ret = mkv_parse_dvcc_dvvc(s, st, track, &mapping->extradata)) < 0)
2404 static int get_qt_codec(MatroskaTrack *track, uint32_t *fourcc, enum AVCodecID *codec_id)
2408 codec_tags = track->type == MATROSKA_TRACK_TYPE_VIDEO ?
2414 if (ff_codec_get_id(codec_tags, AV_RL32(track->codec_priv.data))) {
2415 int ret = av_buffer_realloc(&track->codec_priv.buf,
2416 track->codec_priv.size + 4 + AV_INPUT_BUFFER_PADDING_SIZE);
2420 track->codec_priv.data = track->codec_priv.buf->data;
2421 memmove(track->codec_priv.data + 4, track->codec_priv.data, track->codec_priv.size);
2422 track->codec_priv.size += 4;
2423 AV_WB32(track->codec_priv.data, track->codec_priv.size);
2426 *fourcc = AV_RL32(track->codec_priv.data + 4);
2440 MatroskaTrack *track = &tracks[i];
2442 EbmlList *encodings_list = &track->encodings;
2455 if (track->type != MATROSKA_TRACK_TYPE_VIDEO &&
2456 track->type != MATROSKA_TRACK_TYPE_AUDIO &&
2457 track->type != MATROSKA_TRACK_TYPE_SUBTITLE &&
2458 track->type != MATROSKA_TRACK_TYPE_METADATA) {
2460 "Unknown or unsupported track type %"PRIu64"\n",
2461 track->type);
2464 if (!track->codec_id)
2467 if ( track->type == MATROSKA_TRACK_TYPE_AUDIO && track->codec_id[0] != 'A'
2468 || track->type == MATROSKA_TRACK_TYPE_VIDEO && track->codec_id[0] != 'V'
2469 || track->type == MATROSKA_TRACK_TYPE_SUBTITLE && track->codec_id[0] != 'D' && track->codec_id[0] != 'S'
2470 || track->type == MATROSKA_TRACK_TYPE_METADATA && track->codec_id[0] != 'D' && track->codec_id[0] != 'S'
2472 av_log(matroska->ctx, AV_LOG_INFO, "Inconsistent track type\n");
2476 if (track->audio.samplerate < 0 || track->audio.samplerate > INT_MAX ||
2477 isnan(track->audio.samplerate)) {
2480 track->audio.samplerate);
2481 track->audio.samplerate = 8000;
2484 if (track->type == MATROSKA_TRACK_TYPE_VIDEO) {
2485 if (!track->default_duration && track->video.frame_rate > 0) {
2486 double default_duration = 1000000000 / track->video.frame_rate;
2490 track->video.frame_rate);
2492 track->default_duration = default_duration;
2495 if (track->video.display_width == -1)
2496 track->video.display_width = track->video.pixel_width;
2497 if (track->video.display_height == -1)
2498 track->video.display_height = track->video.pixel_height;
2499 if (track->video.color_space.size == 4)
2500 fourcc = AV_RL32(track->video.color_space.data);
2501 } else if (track->type == MATROSKA_TRACK_TYPE_AUDIO) {
2502 if (!track->audio.out_samplerate)
2503 track->audio.out_samplerate = track->audio.samplerate;
2540 } else if (track->codec_priv.size && encodings[0].scope & 2) {
2541 uint8_t *codec_priv = track->codec_priv.data;
2542 int ret = matroska_decode_buffer(&track->codec_priv.data,
2543 &track->codec_priv.size,
2544 track);
2546 track->codec_priv.data = NULL;
2547 track->codec_priv.size = 0;
2552 if (codec_priv != track->codec_priv.data) {
2553 av_buffer_unref(&track->codec_priv.buf);
2554 if (track->codec_priv.data) {
2555 track->codec_priv.buf = av_buffer_create(track->codec_priv.data,
2556 track->codec_priv.size + AV_INPUT_BUFFER_PADDING_SIZE,
2558 if (!track->codec_priv.buf) {
2559 av_freep(&track->codec_priv.data);
2560 track->codec_priv.size = 0;
2567 track->needs_decoding = encodings && !encodings[0].type &&
2574 if (av_strstart(track->codec_id, ff_mkv_codec_tags[j].str, NULL)) {
2580 st = track->stream = avformat_new_stream(s, NULL);
2593 if (!strcmp(track->codec_id, "V_MS/VFW/FOURCC") &&
2594 track->codec_priv.size >= 40 &&
2595 track->codec_priv.data) {
2596 track->ms_compat = 1;
2597 bit_depth = AV_RL16(track->codec_priv.data + 14);
2598 fourcc = AV_RL32(track->codec_priv.data + 16);
2605 } else if (!strcmp(track->codec_id, "A_MS/ACM") &&
2606 track->codec_priv.size >= 14 &&
2607 track->codec_priv.data) {
2609 ffio_init_context(&b, track->codec_priv.data,
2610 track->codec_priv.size,
2613 track->codec_priv.size, 0);
2618 extradata_offset = FFMIN(track->codec_priv.size, 18);
2619 } else if (!strcmp(track->codec_id, "A_QUICKTIME")
2621 && (track->codec_priv.size >= 32)
2622 && (track->codec_priv.data)) {
2624 int ret = get_qt_codec(track, &fourcc, &codec_id);
2627 sample_size = AV_RB16(track->codec_priv.data + 26);
2641 } else if (!strcmp(track->codec_id, "V_QUICKTIME") &&
2642 (track->codec_priv.size >= 21) &&
2643 (track->codec_priv.data)) {
2644 int ret = get_qt_codec(track, &fourcc, &codec_id);
2647 if (codec_id == AV_CODEC_ID_NONE && AV_RL32(track->codec_priv.data+4) == AV_RL32("SMI ")) {
2654 if (track->codec_priv.size >= 86) {
2655 bit_depth = AV_RB16(track->codec_priv.data + 82);
2656 ffio_init_context(&b, track->codec_priv.data,
2657 track->codec_priv.size,
2659 if (ff_get_qtpalette(codec_id, &b.pub, track->palette)) {
2661 track->has_palette = 1;
2665 switch (track->audio.bitdepth) {
2677 switch (track->audio.bitdepth) {
2689 track->audio.bitdepth == 64) {
2691 } else if (codec_id == AV_CODEC_ID_AAC && !track->codec_priv.size) {
2692 int profile = matroska_aac_profile(track->codec_id);
2693 int sri = matroska_aac_sri(track->audio.samplerate);
2698 extradata[1] = ((sri & 0x01) << 7) | (track->audio.channels << 3);
2699 if (strstr(track->codec_id, "SBR")) {
2700 sri = matroska_aac_sri(track->audio.out_samplerate);
2707 } else if (codec_id == AV_CODEC_ID_ALAC && track->codec_priv.size && track->codec_priv.size < INT_MAX - 12 - AV_INPUT_BUFFER_PADDING_SIZE) {
2708 /* Only ALAC's magic cookie is stored in Matroska's track headers.
2711 extradata_size = 12 + track->codec_priv.size;
2719 memcpy(&extradata[12], track->codec_priv.data,
2720 track->codec_priv.size);
2723 if (track->audio.channels > UINT16_MAX ||
2724 track->audio.bitdepth > UINT16_MAX) {
2727 " or bitdepth %"PRIu64". Skipping track.\n",
2728 track->audio.channels, track->audio.bitdepth);
2734 if (track->audio.out_samplerate < 0 || track->audio.out_samplerate > INT_MAX)
2743 bytestream_put_le16(&ptr, track->audio.channels);
2744 bytestream_put_le16(&ptr, track->audio.bitdepth);
2745 bytestream_put_le32(&ptr, track->audio.out_samplerate);
2747 track->audio.out_samplerate,
2755 track->audio.out_samplerate = 8000;
2756 track->audio.channels = 1;
2761 && track->codec_priv.data) {
2762 const uint8_t *ptr = track->codec_priv.data;
2765 if (track->codec_priv.size < 46)
2769 track->audio.coded_framesize = bytestream_get_be32(&ptr);
2771 track->audio.sub_packet_h = bytestream_get_be16(&ptr);
2772 track->audio.frame_size = bytestream_get_be16(&ptr);
2773 track->audio.sub_packet_size = bytestream_get_be16(&ptr);
2774 if (track->audio.coded_framesize <= 0 ||
2775 track->audio.sub_packet_h <= 0 ||
2776 track->audio.frame_size <= 0)
2780 if (track->audio.sub_packet_h & 1 || 2 * track->audio.frame_size
2781 != (int64_t)track->audio.sub_packet_h * track->audio.coded_framesize)
2783 st->codecpar->block_align = track->audio.coded_framesize;
2784 track->codec_priv.size = 0;
2790 track->audio.sub_packet_size = ff_sipr_subpk_size[flavor];
2792 } else if (track->audio.sub_packet_size <= 0 ||
2793 track->audio.frame_size % track->audio.sub_packet_size)
2795 st->codecpar->block_align = track->audio.sub_packet_size;
2798 track->audio.buf = av_malloc_array(track->audio.sub_packet_h,
2799 track->audio.frame_size);
2800 if (!track->audio.buf)
2802 } else if (codec_id == AV_CODEC_ID_FLAC && track->codec_priv.size) {
2803 ret = matroska_parse_flac(s, track, &extradata_offset);
2806 } else if (codec_id == AV_CODEC_ID_WAVPACK && track->codec_priv.size < 2) {
2814 } else if (codec_id == AV_CODEC_ID_PRORES && track->codec_priv.size == 4) {
2815 fourcc = AV_RL32(track->codec_priv.data);
2816 } else if (codec_id == AV_CODEC_ID_VP9 && track->codec_priv.size) {
2819 track->codec_priv.size = 0;
2821 track->codec_priv.size -= extradata_offset;
2825 "Unknown/unsupported AVCodecID %s.\n", track->codec_id);
2827 if (track->time_scale < 0.01) {
2830 track->time_scale);
2831 track->time_scale = 1.0;
2833 avpriv_set_pts_info(st, 64, matroska->time_scale * track->time_scale,
2836 /* convert the delay from ns to the track timebase */
2837 track->codec_delay_in_track_tb = av_rescale_q(track->codec_delay,
2843 if (strcmp(track->language, "und"))
2844 av_dict_set(&st->metadata, "language", track->language, 0);
2845 av_dict_set(&st->metadata, "title", track->name, 0);
2847 if (track->flag_default)
2849 if (track->flag_forced)
2851 if (track->flag_comment)
2853 if (track->flag_hearingimpaired)
2855 if (track->flag_visualimpaired)
2857 if (track->flag_original.count > 0)
2858 st->disposition |= track->flag_original.el.u ? AV_DISPOSITION_ORIGINAL
2865 } else if (track->codec_priv.data && track->codec_priv.size > 0) {
2866 if (ff_alloc_extradata(st->codecpar, track->codec_priv.size))
2869 track->codec_priv.data + extradata_offset,
2870 track->codec_priv.size);
2874 if (track->type == MATROSKA_TRACK_TYPE_VIDEO) {
2875 MatroskaTrackPlane *planes = track->operation.combine_planes.elem;
2883 st->codecpar->width = track->video.pixel_width;
2884 st->codecpar->height = track->video.pixel_height;
2886 if (track->video.interlaced == MATROSKA_VIDEO_INTERLACE_FLAG_INTERLACED)
2887 st->codecpar->field_order = mkv_field_order(matroska, track->video.field_order);
2888 else if (track->video.interlaced == MATROSKA_VIDEO_INTERLACE_FLAG_PROGRESSIVE)
2891 if (track->video.stereo_mode && track->video.stereo_mode < MATROSKA_VIDEO_STEREOMODE_TYPE_NB)
2892 mkv_stereo_mode_display_mul(track->video.stereo_mode, &display_width_mul, &display_height_mul);
2894 if (track->video.display_unit < MATROSKA_VIDEO_DISPLAYUNIT_UNKNOWN) {
2895 if (track->video.display_width && track->video.display_height &&
2896 st->codecpar->height < INT64_MAX / track->video.display_width / display_width_mul &&
2897 st->codecpar->width < INT64_MAX / track->video.display_height / display_height_mul)
2900 st->codecpar->height * track->video.display_width * display_width_mul,
2901 st->codecpar->width * track->video.display_height * display_height_mul,
2907 if (track->default_duration) {
2908 int div = track->default_duration <= INT64_MAX ? 1 : 2;
2910 1000000000 / div, track->default_duration / div, 30000);
2919 if (track->video.stereo_mode && track->video.stereo_mode < MATROSKA_VIDEO_STEREOMODE_TYPE_NB)
2920 av_dict_set(&st->metadata, "stereo_mode", ff_matroska_video_stereo_mode[track->video.stereo_mode], 0);
2923 if (track->video.alpha_mode)
2926 /* if we have virtual track, mark the real tracks */
2927 for (j=0; j < track->operation.combine_planes.nb_elem; j++) {
2941 if (track->video.stereo_mode < MATROSKA_VIDEO_STEREOMODE_TYPE_NB &&
2942 track->video.stereo_mode != 10 && track->video.stereo_mode != 12) {
2943 int ret = ff_mkv_stereo3d_conv(st, track->video.stereo_mode);
2948 ret = mkv_parse_video_color(st, track);
2951 ret = mkv_parse_video_projection(st, track, matroska->ctx);
2954 } else if (track->type == MATROSKA_TRACK_TYPE_AUDIO) {
2957 st->codecpar->sample_rate = track->audio.out_samplerate;
2961 st->codecpar->ch_layout.nb_channels = track->audio.channels;
2964 st->codecpar->bits_per_coded_sample = track->audio.bitdepth;
2971 if (track->codec_delay > 0) {
2972 st->codecpar->initial_padding = av_rescale_q(track->codec_delay,
2977 if (track->seek_preroll > 0) {
2978 st->codecpar->seek_preroll = av_rescale_q(track->seek_preroll,
2985 if (!strcmp(track->codec_id, "D_WEBVTT/CAPTIONS")) {
2987 } else if (!strcmp(track->codec_id, "D_WEBVTT/DESCRIPTIONS")) {
2989 } else if (!strcmp(track->codec_id, "D_WEBVTT/METADATA")) {
2992 } else if (track->type == MATROSKA_TRACK_TYPE_SUBTITLE) {
2995 if (track->flag_textdescriptions)
2999 ret = mkv_parse_block_addition_mappings(s, st, track);
3166 MatroskaTrack *track;
3169 track = &tracks[pkt->stream_index];
3170 if (track->has_palette) {
3175 memcpy(pal, track->palette, AVPALETTE_SIZE);
3177 track->has_palette = 0;
3290 MatroskaTrack *track, AVStream *st,
3295 const int sps = track->audio.sub_packet_size;
3296 const int cfs = track->audio.coded_framesize;
3297 const int h = track->audio.sub_packet_h;
3298 const int w = track->audio.frame_size;
3299 int y = track->audio.sub_packet_cnt;
3302 if (!track->audio.pkt_cnt) {
3303 if (track->audio.sub_packet_cnt == 0)
3304 track->audio.buf_timecode = timecode;
3312 memcpy(track->audio.buf + x * 2 * w + y * cfs,
3320 memcpy(track->audio.buf + y * w, data, w);
3328 memcpy(track->audio.buf +
3333 if (++track->audio.sub_packet_cnt >= h) {
3335 ff_rm_reorder_sipr_data(track->audio.buf, h, w);
3336 track->audio.sub_packet_cnt = 0;
3337 track->audio.pkt_cnt = h * w / a;
3341 while (track->audio.pkt_cnt) {
3350 track->audio.buf + a * (h * w / a - track->audio.pkt_cnt--),
3352 pkt->pts = track->audio.buf_timecode;
3353 track->audio.buf_timecode = AV_NOPTS_VALUE;
3367 static int matroska_parse_wavpack(MatroskaTrack *track,
3381 av_assert1(track->stream->codecpar->extradata_size >= 2);
3382 ver = AV_RL16(track->stream->codecpar->extradata);
3426 AV_WL16(dst + offset + 10, 0); // track/index_no
3451 static int matroska_parse_prores(MatroskaTrack *track,
3473 MatroskaTrack *track,
3588 MatroskaTrack *track, AVStream *st,
3600 res = matroska_parse_wavpack(track, &pkt_data, &pkt_size);
3613 res = matroska_parse_prores(track, &pkt_data, &pkt_size);
3673 if (track->ms_compat)
3702 MatroskaTrack *track;
3721 track = matroska_find_track_by_num(matroska, num);
3722 if (!track || size < 3)
3725 if (!(st = track->stream)) {
3746 uint64_t timecode_cluster_in_track_tb = (double) cluster_time / track->time_scale;
3747 timecode = timecode_cluster_in_track_tb + block_time - track->codec_delay_in_track_tb;
3748 if (track->type == MATROSKA_TRACK_TYPE_SUBTITLE &&
3749 timecode < track->end_timecode)
3759 track->type != MATROSKA_TRACK_TYPE_SUBTITLE) {
3780 trust_default_duration = track->default_duration != 0;
3781 if (track->audio.samplerate == 8000 && trust_default_duration) {
3784 if (track->audio.samplerate != st->codecpar->sample_rate || !st->codecpar->frame_size)
3790 block_duration = track->default_duration * laces / matroska->time_scale;
3793 track->end_timecode =
3794 FFMAX(track->end_timecode, timecode + block_duration);
3801 if (track->needs_decoding) {
3802 res = matroska_decode_buffer(&out_data, &out_size, track);
3812 if (track->audio.buf) {
3813 res = matroska_parse_rm_audio(matroska, track, st,
3821 res = matroska_parse_webvtt(matroska, track, st,
3830 res = matroska_parse_frame(matroska, track, st, buf, out_data,
4375 av_log(s, AV_LOG_ERROR, "No track found\n");
4396 // track number