Lines Matching refs:cat
116 ConcatContext *cat = avf->priv_data;
124 if (cat->safe && !safe_filename(filename)) {
142 if (cat->nb_files >= *nb_files_alloc) {
145 if (n <= cat->nb_files || n > SIZE_MAX / sizeof(*cat->files) ||
146 !(new_files = av_realloc(cat->files, n * sizeof(*cat->files))))
148 cat->files = new_files;
152 file = &cat->files[cat->nb_files++];
201 ConcatContext *cat = avf->priv_data;
202 AVStream *st = cat->avf->streams[idx];
203 ConcatStream *cs = &cat->cur_file->streams[idx];
208 if (cat->auto_convert && st->codecpar->codec_id == AV_CODEC_ID_H264) {
213 av_log(cat->avf, AV_LOG_INFO,
243 ConcatContext *cat = avf->priv_data;
247 for (i = cat->cur_file->nb_streams; i < cat->avf->nb_streams; i++) {
254 if ((ret = copy_stream_props(st, cat->avf->streams[i])) < 0)
256 cat->cur_file->streams[i].out_stream_index = i;
263 ConcatContext *cat = avf->priv_data;
267 for (i = cat->cur_file->nb_streams; i < cat->avf->nb_streams; i++) {
268 st = cat->avf->streams[i];
276 cat->cur_file->streams[i].out_stream_index = j;
285 ConcatContext *cat = avf->priv_data;
289 if (cat->cur_file->nb_streams >= cat->avf->nb_streams)
291 map = av_realloc(cat->cur_file->streams,
292 cat->avf->nb_streams * sizeof(*map));
295 cat->cur_file->streams = map;
296 memset(map + cat->cur_file->nb_streams, 0,
297 (cat->avf->nb_streams - cat->cur_file->nb_streams) * sizeof(*map));
299 for (i = cat->cur_file->nb_streams; i < cat->avf->nb_streams; i++) {
304 switch (cat->stream_match_mode) {
316 cat->cur_file->nb_streams = cat->avf->nb_streams;
335 ConcatContext *cat = avf->priv_data;
336 ConcatFile *file = &cat->files[fileno];
340 if (cat->avf)
341 avformat_close_input(&cat->avf);
343 cat->avf = avformat_alloc_context();
344 if (!cat->avf)
347 cat->avf->flags |= avf->flags & ~AVFMT_FLAG_CUSTOM_IO;
348 cat->avf->interrupt_callback = avf->interrupt_callback;
350 if ((ret = ff_copy_whiteblacklists(cat->avf, avf)) < 0)
357 if ((ret = avformat_open_input(&cat->avf, file->url, NULL, &options)) < 0 ||
358 (ret = avformat_find_stream_info(cat->avf, NULL)) < 0) {
361 avformat_close_input(&cat->avf);
369 cat->cur_file = file;
371 cat->files[fileno - 1].start_time +
372 cat->files[fileno - 1].duration;
373 file->file_start_time = (cat->avf->start_time == AV_NOPTS_VALUE) ? 0 : cat->avf->start_time;
375 file->duration = get_best_effort_duration(file, cat->avf);
377 if (cat->segment_time_metadata) {
386 if ((ret = avformat_seek_file(cat->avf, -1, INT64_MIN, file->inpoint, file->inpoint, 0)) < 0)
394 ConcatContext *cat = avf->priv_data;
397 for (i = 0; i < cat->nb_files; i++) {
398 av_freep(&cat->files[i].url);
399 for (j = 0; j < cat->files[i].nb_streams; j++) {
400 if (cat->files[i].streams[j].bsf)
401 av_bsf_free(&cat->files[i].streams[j].bsf);
403 av_freep(&cat->files[i].streams);
404 av_dict_free(&cat->files[i].metadata);
405 av_dict_free(&cat->files[i].options);
407 if (cat->avf)
408 avformat_close_input(&cat->avf);
409 av_freep(&cat->files);
460 ConcatContext *cat = avf->priv_data;
492 if ((dir->flags & NEEDS_UNSAFE) && cat->safe) {
496 if ((dir->flags & NEEDS_FILE) && !cat->nb_files) {
649 ConcatContext *cat = avf->priv_data;
657 if (!cat->nb_files) {
662 for (i = 0; i < cat->nb_files; i++) {
663 if (cat->files[i].start_time == AV_NOPTS_VALUE)
664 cat->files[i].start_time = time;
666 time = cat->files[i].start_time;
667 if (cat->files[i].user_duration == AV_NOPTS_VALUE) {
668 if (cat->files[i].inpoint == AV_NOPTS_VALUE || cat->files[i].outpoint == AV_NOPTS_VALUE ||
669 cat->files[i].outpoint - (uint64_t)cat->files[i].inpoint != av_sat_sub64(cat->files[i].outpoint, cat->files[i].inpoint)
672 cat->files[i].user_duration = cat->files[i].outpoint - cat->files[i].inpoint;
674 cat->files[i].duration = cat->files[i].user_duration;
675 time += cat->files[i].user_duration;
677 if (i == cat->nb_files) {
679 cat->seekable = 1;
682 cat->stream_match_mode = avf->nb_streams ? MATCH_EXACT_ID :
692 ConcatContext *cat = avf->priv_data;
693 unsigned fileno = cat->cur_file - cat->files;
695 cat->cur_file->duration = get_best_effort_duration(cat->cur_file, cat->avf);
697 if (++fileno >= cat->nb_files) {
698 cat->eof = 1;
729 static int packet_after_outpoint(ConcatContext *cat, AVPacket *pkt)
731 if (cat->cur_file->outpoint != AV_NOPTS_VALUE && pkt->dts != AV_NOPTS_VALUE) {
732 return av_compare_ts(pkt->dts, cat->avf->streams[pkt->stream_index]->time_base,
733 cat->cur_file->outpoint, AV_TIME_BASE_Q) >= 0;
740 ConcatContext *cat = avf->priv_data;
747 if (cat->eof)
750 if (!cat->avf)
754 ret = av_read_frame(cat->avf, pkt);
765 if (packet_after_outpoint(cat, pkt)) {
771 cs = &cat->cur_file->streams[pkt->stream_index];
781 st = cat->avf->streams[pkt->stream_index];
784 (unsigned)(cat->cur_file - cat->files), pkt->stream_index,
788 delta = av_rescale_q(cat->cur_file->start_time - cat->cur_file->file_inpoint,
790 cat->avf->streams[pkt->stream_index]->time_base);
798 if (cat->cur_file->metadata) {
800 char* packed_metadata = av_packet_pack_dictionary(cat->cur_file->metadata, &metadata_len);
811 if (cat->cur_file->duration == AV_NOPTS_VALUE && sti->cur_dts != AV_NOPTS_VALUE) {
813 if (cat->cur_file->next_dts == AV_NOPTS_VALUE || next_dts > cat->cur_file->next_dts) {
814 cat->cur_file->next_dts = next_dts;
825 ConcatContext *cat = avf->priv_data;
826 int64_t t0 = cat->cur_file->start_time - cat->cur_file->file_inpoint;
832 if (stream >= cat->avf->nb_streams)
834 ff_rescale_interval(AV_TIME_BASE_Q, cat->avf->streams[stream]->time_base,
837 return avformat_seek_file(cat->avf, stream, min_ts, ts, max_ts, flags);
843 ConcatContext *cat = avf->priv_data;
854 right = cat->nb_files;
859 else if (!cat->seekable)
864 if (ts < cat->files[mid].start_time)
870 if (cat->cur_file != &cat->files[left]) {
874 cat->avf = cur_avf;
879 left < cat->nb_files - 1 &&
880 cat->files[left + 1].start_time < max_ts) {
881 if (cat->cur_file == &cat->files[left])
882 cat->avf = NULL;
893 ConcatContext *cat = avf->priv_data;
894 ConcatFile *cur_file_saved = cat->cur_file;
895 AVFormatContext *cur_avf_saved = cat->avf;
900 cat->avf = NULL;
902 if (cat->cur_file != cur_file_saved) {
903 if (cat->avf)
904 avformat_close_input(&cat->avf);
906 cat->avf = cur_avf_saved;
907 cat->cur_file = cur_file_saved;
909 if (cat->cur_file != cur_file_saved) {
912 cat->eof = 0;