mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-13 21:28:01 +02:00
-itsscale to scale timestamps
fixes issue511 Originally committed as revision 14226 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
88c5cadc2a
commit
8833f375f9
26
ffmpeg.c
26
ffmpeg.c
@ -85,6 +85,7 @@ static const OptionDef options[];
|
|||||||
|
|
||||||
static AVFormatContext *input_files[MAX_FILES];
|
static AVFormatContext *input_files[MAX_FILES];
|
||||||
static int64_t input_files_ts_offset[MAX_FILES];
|
static int64_t input_files_ts_offset[MAX_FILES];
|
||||||
|
static double input_files_ts_scale[MAX_FILES][MAX_STREAMS];
|
||||||
static int nb_input_files = 0;
|
static int nb_input_files = 0;
|
||||||
|
|
||||||
static AVFormatContext *output_files[MAX_FILES];
|
static AVFormatContext *output_files[MAX_FILES];
|
||||||
@ -2053,6 +2054,13 @@ static int av_encode(AVFormatContext **output_files,
|
|||||||
if (pkt.pts != AV_NOPTS_VALUE)
|
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_ts_offset[ist->file_index], AV_TIME_BASE_Q, ist->st->time_base);
|
||||||
|
|
||||||
|
if(input_files_ts_scale[file_index][pkt.stream_index]){
|
||||||
|
if(pkt.pts != AV_NOPTS_VALUE)
|
||||||
|
pkt.pts *= input_files_ts_scale[file_index][pkt.stream_index];
|
||||||
|
if(pkt.dts != AV_NOPTS_VALUE)
|
||||||
|
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_ts_offset[ist->file_index], ist->st->codec->codec_type);
|
||||||
if (pkt.dts != AV_NOPTS_VALUE && ist->next_pts != AV_NOPTS_VALUE) {
|
if (pkt.dts != AV_NOPTS_VALUE && ist->next_pts != AV_NOPTS_VALUE) {
|
||||||
int64_t pkt_dts= av_rescale_q(pkt.dts, ist->st->time_base, AV_TIME_BASE_Q);
|
int64_t pkt_dts= av_rescale_q(pkt.dts, ist->st->time_base, AV_TIME_BASE_Q);
|
||||||
@ -2646,6 +2654,23 @@ static void opt_map_meta_data(const char *arg)
|
|||||||
m->in_file = strtol(p, &p, 0);
|
m->in_file = strtol(p, &p, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void opt_input_ts_scale(const char *arg)
|
||||||
|
{
|
||||||
|
unsigned int stream;
|
||||||
|
double scale;
|
||||||
|
char *p;
|
||||||
|
|
||||||
|
stream = strtol(arg, &p, 0);
|
||||||
|
if (*p)
|
||||||
|
p++;
|
||||||
|
scale= strtod(p, &p);
|
||||||
|
|
||||||
|
if(stream >= MAX_STREAMS)
|
||||||
|
av_exit(1);
|
||||||
|
|
||||||
|
input_files_ts_scale[nb_input_files][stream]= scale;
|
||||||
|
}
|
||||||
|
|
||||||
static int opt_recording_time(const char *opt, const char *arg)
|
static int opt_recording_time(const char *opt, const char *arg)
|
||||||
{
|
{
|
||||||
recording_time = parse_time_or_die(opt, arg, 1);
|
recording_time = parse_time_or_die(opt, arg, 1);
|
||||||
@ -3675,6 +3700,7 @@ static const OptionDef options[] = {
|
|||||||
{ "fs", HAS_ARG | OPT_INT64, {(void*)&limit_filesize}, "set the limit file size in bytes", "limit_size" }, //
|
{ "fs", HAS_ARG | OPT_INT64, {(void*)&limit_filesize}, "set the limit file size in bytes", "limit_size" }, //
|
||||||
{ "ss", OPT_FUNC2 | HAS_ARG, {(void*)opt_start_time}, "set the start time offset", "time_off" },
|
{ "ss", OPT_FUNC2 | HAS_ARG, {(void*)opt_start_time}, "set the start time offset", "time_off" },
|
||||||
{ "itsoffset", OPT_FUNC2 | HAS_ARG, {(void*)opt_input_ts_offset}, "set the input ts offset", "time_off" },
|
{ "itsoffset", OPT_FUNC2 | HAS_ARG, {(void*)opt_input_ts_offset}, "set the input ts offset", "time_off" },
|
||||||
|
{ "itsscale", HAS_ARG, {(void*)opt_input_ts_scale}, "set the input ts scale", "stream:scale" },
|
||||||
{ "title", HAS_ARG | OPT_STRING, {(void*)&str_title}, "set the title", "string" },
|
{ "title", HAS_ARG | OPT_STRING, {(void*)&str_title}, "set the title", "string" },
|
||||||
{ "timestamp", OPT_FUNC2 | HAS_ARG, {(void*)&opt_rec_timestamp}, "set the timestamp", "time" },
|
{ "timestamp", OPT_FUNC2 | HAS_ARG, {(void*)&opt_rec_timestamp}, "set the timestamp", "time" },
|
||||||
{ "author", HAS_ARG | OPT_STRING, {(void*)&str_author}, "set the author", "string" },
|
{ "author", HAS_ARG | OPT_STRING, {(void*)&str_author}, "set the author", "string" },
|
||||||
|
Loading…
Reference in New Issue
Block a user