Lines Matching defs:track

356                                        IMFVirtualTrackPlaybackCtx *track,
364 IMFVirtualTrackResourcePlaybackCtx *track_resource = track->resources + resource_index;
411 * - the current timestamp within the virtual track
415 av_sub_q(track->current_timestamp, track_resource->ts_offset),
419 AVRATIONAL_ARG(st->time_base), AVRATIONAL_ARG(track->current_timestamp));
448 IMFVirtualTrackPlaybackCtx *track)
467 if (track->resource_count > INT32_MAX - track_file_resource->base.repeat_count
468 || (track->resource_count + track_file_resource->base.repeat_count)
471 tmp = av_fast_realloc(track->resources,
472 &track->resources_alloc_sz,
473 (track->resource_count + track_file_resource->base.repeat_count)
477 track->resources = tmp;
485 vt_ctx.start_time = track->duration;
489 vt_ctx.end_time = av_add_q(track->duration,
493 track->resources[track->resource_count++] = vt_ctx;
494 track->duration = vt_ctx.end_time;
500 static void imf_virtual_track_playback_context_deinit(IMFVirtualTrackPlaybackCtx *track)
502 for (uint32_t i = 0; i < track->resource_count; i++)
503 avformat_close_input(&track->resources[i].ctx);
505 av_freep(&track->resources);
513 IMFVirtualTrackPlaybackCtx *track = NULL;
517 if (!(track = av_mallocz(sizeof(IMFVirtualTrackPlaybackCtx))))
519 track->current_resource_index = -1;
520 track->index = track_index;
521 track->duration = av_make_q(0, 1);
529 if ((ret = open_track_file_resource(s, &virtual_track->resources[i], track)) != 0) {
532 "Could not open image track resource " AV_PRI_URN_UUID "\n",
538 track->current_timestamp = av_make_q(0, track->duration.den);
550 c->tracks[c->track_count++] = track;
555 imf_virtual_track_playback_context_deinit(track);
556 av_free(track);
569 /* Open the first resource of the track to get stream information */
574 av_log(s, AV_LOG_DEBUG, "Open the first resource of track %d\n", c->tracks[i]->index);
607 av_log(s, AV_LOG_ERROR, "Could not open image track " AV_PRI_URN_UUID "\n",
615 av_log(s, AV_LOG_ERROR, "Could not open audio track " AV_PRI_URN_UUID "\n",
687 IMFVirtualTrackPlaybackCtx *track;
691 av_log(s, AV_LOG_TRACE, "Compare track %d timestamp " AVRATIONAL_FORMAT
699 track = c->tracks[i - 1];
700 minimum_timestamp = track->current_timestamp;
704 av_log(s, AV_LOG_DEBUG, "Found next track to read: %d (timestamp: %lf / %lf)\n",
705 track->index, av_q2d(track->current_timestamp), av_q2d(minimum_timestamp));
706 return track;
709 static int get_resource_context_for_timestamp(AVFormatContext *s, IMFVirtualTrackPlaybackCtx *track, IMFVirtualTrackResourcePlaybackCtx **resource)
713 if (av_cmp_q(track->current_timestamp, track->duration) >= 0) {
714 av_log(s, AV_LOG_DEBUG, "Reached the end of the virtual track\n");
720 "Looking for track %d resource for timestamp = %lf / %lf\n",
721 track->index,
722 av_q2d(track->current_timestamp),
723 av_q2d(track->duration));
724 for (uint32_t i = 0; i < track->resource_count; i++) {
726 if (av_cmp_q(track->resources[i].end_time, track->current_timestamp) > 0) {
727 av_log(s, AV_LOG_DEBUG, "Found resource %d in track %d to read at timestamp %lf: "
729 i, track->index, av_q2d(track->current_timestamp),
730 track->resources[i].resource->base.entry_point,
731 track->resources[i].resource->base.duration,
732 AVRATIONAL_ARG(track->resources[i].resource->base.edit_rate));
734 if (track->current_resource_index != i) {
737 av_log(s, AV_LOG_TRACE, "Switch resource on track %d: re-open context\n",
738 track->index);
740 ret = open_track_resource_context(s, track, i);
743 if (track->current_resource_index > 0)
744 avformat_close_input(&track->resources[track->current_resource_index].ctx);
745 track->current_resource_index = i;
748 *resource = track->resources + track->current_resource_index;
753 av_log(s, AV_LOG_ERROR, "Could not find IMF track resource to read\n");
761 IMFVirtualTrackPlaybackCtx *track;
766 track = get_next_track_with_minimum_timestamp(s);
768 ret = get_resource_context_for_timestamp(s, track, &resource);
787 pkt->stream_index = track->index;
805 /* advance the track timestamp by the packet duration */
807 next_timestamp = av_add_q(track->current_timestamp,
819 av_sub_q(resource->end_time, track->current_timestamp),
868 track->current_timestamp = next_timestamp;
949 /* set the dts of each stream and temporal offset of each track */