| @@ -107,7 +107,6 @@ static const OptionDef options[]; | |||
| #define FFM_PACKET_SIZE 4096 //XXX a duplicate of the line in ffm.h | |||
| static const char *last_asked_format = NULL; | |||
| static int64_t input_files_ts_offset[MAX_FILES]; | |||
| static double *input_files_ts_scale[MAX_FILES] = {NULL}; | |||
| static int nb_input_files_ts_scale[MAX_FILES] = {0}; | |||
| @@ -329,6 +328,7 @@ typedef struct InputFile { | |||
| int eof_reached; /* true if eof reached */ | |||
| int ist_index; /* index of first stream in ist_table */ | |||
| int buffer_size; /* current total buffer size */ | |||
| int64_t ts_offset; | |||
| } InputFile; | |||
| static InputStream *input_streams = NULL; | |||
| @@ -1671,7 +1671,7 @@ static int output_packet(InputStream *ist, int ist_index, | |||
| os = output_files[ost->file_index]; | |||
| /* set the input output pts pairs */ | |||
| //ost->sync_ipts = (double)(ist->pts + input_files_ts_offset[ist->file_index] - start_time)/ AV_TIME_BASE; | |||
| //ost->sync_ipts = (double)(ist->pts + input_files[ist->file_index].ts_offset - start_time)/ AV_TIME_BASE; | |||
| if (ost->encoding_needed) { | |||
| av_assert0(ist->decoding_needed); | |||
| @@ -1882,7 +1882,7 @@ static int copy_chapters(int infile, int outfile) | |||
| for (i = 0; i < is->nb_chapters; i++) { | |||
| AVChapter *in_ch = is->chapters[i], *out_ch; | |||
| int64_t ts_off = av_rescale_q(start_time - input_files_ts_offset[infile], | |||
| int64_t ts_off = av_rescale_q(start_time - input_files[infile].ts_offset, | |||
| AV_TIME_BASE_Q, in_ch->time_base); | |||
| int64_t rt = (recording_time == INT64_MAX) ? INT64_MAX : | |||
| av_rescale_q(recording_time, AV_TIME_BASE_Q, in_ch->time_base); | |||
| @@ -2613,9 +2613,9 @@ static int transcode(AVFormatContext **output_files, | |||
| goto discard_packet; | |||
| if (pkt.dts != AV_NOPTS_VALUE) | |||
| pkt.dts += av_rescale_q(input_files_ts_offset[ist->file_index], AV_TIME_BASE_Q, ist->st->time_base); | |||
| pkt.dts += av_rescale_q(input_files[ist->file_index].ts_offset, AV_TIME_BASE_Q, ist->st->time_base); | |||
| if (pkt.pts != AV_NOPTS_VALUE) | |||
| pkt.pts += av_rescale_q(input_files_ts_offset[ist->file_index], AV_TIME_BASE_Q, ist->st->time_base); | |||
| pkt.pts += av_rescale_q(input_files[ist->file_index].ts_offset, AV_TIME_BASE_Q, ist->st->time_base); | |||
| if (pkt.stream_index < nb_input_files_ts_scale[file_index] | |||
| && input_files_ts_scale[file_index][pkt.stream_index]){ | |||
| @@ -2625,15 +2625,16 @@ static int transcode(AVFormatContext **output_files, | |||
| pkt.dts *= input_files_ts_scale[file_index][pkt.stream_index]; | |||
| } | |||
| // fprintf(stderr, "next:%"PRId64" dts:%"PRId64" off:%"PRId64" %d\n", ist->next_pts, pkt.dts, input_files_ts_offset[ist->file_index], ist->st->codec->codec_type); | |||
| // fprintf(stderr, "next:%"PRId64" dts:%"PRId64" off:%"PRId64" %d\n", ist->next_pts, pkt.dts, input_files[ist->file_index].ts_offset, ist->st->codec->codec_type); | |||
| if (pkt.dts != AV_NOPTS_VALUE && ist->next_pts != AV_NOPTS_VALUE | |||
| && (is->iformat->flags & AVFMT_TS_DISCONT)) { | |||
| int64_t pkt_dts= av_rescale_q(pkt.dts, ist->st->time_base, AV_TIME_BASE_Q); | |||
| int64_t delta= pkt_dts - ist->next_pts; | |||
| if((FFABS(delta) > 1LL*dts_delta_threshold*AV_TIME_BASE || pkt_dts+1<ist->pts)&& !copy_ts){ | |||
| input_files_ts_offset[ist->file_index]-= delta; | |||
| input_files[ist->file_index].ts_offset -= delta; | |||
| if (verbose > 2) | |||
| fprintf(stderr, "timestamp discontinuity %"PRId64", new offset= %"PRId64"\n", delta, input_files_ts_offset[ist->file_index]); | |||
| fprintf(stderr, "timestamp discontinuity %"PRId64", new offset= %"PRId64"\n", | |||
| delta, input_files[ist->file_index].ts_offset); | |||
| pkt.dts-= av_rescale_q(delta, AV_TIME_BASE_Q, ist->st->time_base); | |||
| if(pkt.pts != AV_NOPTS_VALUE) | |||
| pkt.pts-= av_rescale_q(delta, AV_TIME_BASE_Q, ist->st->time_base); | |||
| @@ -3357,7 +3358,6 @@ static int opt_input_file(const char *opt, const char *filename) | |||
| } | |||
| } | |||
| input_files_ts_offset[nb_input_files] = input_ts_offset - (copy_ts ? 0 : timestamp); | |||
| /* dump the file content */ | |||
| if (verbose >= 0) | |||
| av_dump_format(ic, nb_input_files, filename, 0); | |||
| @@ -3365,6 +3365,7 @@ static int opt_input_file(const char *opt, const char *filename) | |||
| input_files = grow_array(input_files, sizeof(*input_files), &nb_input_files, nb_input_files + 1); | |||
| input_files[nb_input_files - 1].ctx = ic; | |||
| input_files[nb_input_files - 1].ist_index = nb_input_streams - ic->nb_streams; | |||
| input_files[nb_input_files - 1].ts_offset = input_ts_offset - (copy_ts ? 0 : timestamp); | |||
| frame_rate = (AVRational){0, 0}; | |||
| frame_pix_fmt = PIX_FMT_NONE; | |||