33 #include <stdatomic.h> 73 #if HAVE_SYS_RESOURCE_H 75 #include <sys/types.h> 76 #include <sys/resource.h> 77 #elif HAVE_GETPROCESSTIMES 80 #if HAVE_GETPROCESSMEMORYINFO 84 #if HAVE_SETCONSOLECTRLHANDLER 90 #include <sys/select.h> 95 #include <sys/ioctl.h> 164 static struct termios oldtty;
165 static int restore_tty;
169 static void free_input_threads(
void);
195 uint32_t *pal, *dst2;
203 if (r->
x < 0 || r->
x + r->
w > w || r->
y < 0 || r->
y + r->
h > h) {
205 r->
x, r->
y, r->
w, r->
h, w, h
210 dst += r->
y * dst_linesize + r->
x * 4;
212 pal = (uint32_t *)r->
data[1];
213 for (y = 0; y < r->
h; y++) {
214 dst2 = (uint32_t *)dst;
216 for (x = 0; x < r->
w; x++)
217 *(dst2++) = pal[*(src2++)];
247 int64_t
pts, end_pts;
269 "Impossible to get a blank canvas.\n");
272 dst = frame->
data [0];
274 for (i = 0; i < num_rects; i++)
299 if (pts2 <= ist2->sub2video.last_pts)
306 for (j = 0, nb_reqs = 0; j < ist2->
nb_filters; j++)
333 tcsetattr (0, TCSANOW, &oldtty);
358 ret = write(2,
"Received > 3 system signals, hard exiting\n",
359 strlen(
"Received > 3 system signals, hard exiting\n"));
365 #if HAVE_SETCONSOLECTRLHANDLER 366 static BOOL WINAPI CtrlHandler(DWORD fdwCtrlType)
373 case CTRL_BREAK_EVENT:
377 case CTRL_CLOSE_EVENT:
378 case CTRL_LOGOFF_EVENT:
379 case CTRL_SHUTDOWN_EVENT:
398 #define SIGNAL(sig, func) \ 400 action.sa_handler = func; \ 401 sigaction(sig, &action, NULL); \ 404 #define SIGNAL(sig, func) \ 410 #if defined __linux__ 411 struct sigaction action = {0};
415 sigfillset(&action.sa_mask);
418 action.sa_flags = SA_RESTART;
424 if (tcgetattr (0, &tty) == 0) {
428 tty.c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP
429 |INLCR|IGNCR|ICRNL|IXON);
430 tty.c_oflag |= OPOST;
431 tty.c_lflag &= ~(
ECHO|ECHONL|ICANON|IEXTEN);
432 tty.c_cflag &= ~(CSIZE|PARENB);
437 tcsetattr (0, TCSANOW, &tty);
449 signal(SIGPIPE, SIG_IGN);
451 #if HAVE_SETCONSOLECTRLHANDLER 452 SetConsoleCtrlHandler((PHANDLER_ROUTINE) CtrlHandler, TRUE);
469 n = select(1, &rfds,
NULL,
NULL, &tv);
478 # if HAVE_PEEKNAMEDPIPE 480 static HANDLE input_handle;
483 input_handle = GetStdHandle(STD_INPUT_HANDLE);
484 is_pipe = !GetConsoleMode(input_handle, &dw);
489 if (!PeekNamedPipe(input_handle,
NULL, 0,
NULL, &nchars,
NULL)) {
534 sizeof(frame),
NULL);
542 &sub,
sizeof(sub),
NULL);
623 free_input_threads();
649 "Error closing vstats file, loss of information possible: %s\n",
708 "bench: %8" PRIu64
" user %8" PRIu64
" sys %8" PRIu64
" real %s \n",
722 ost2->
finished |= ost == ost2 ? this_stream : others;
752 unsigned int are_we_over_size =
754 int new_size = are_we_over_size ?
761 "Too many packets buffered for output stream %d:%d.\n",
810 av_log(s,
AV_LOG_WARNING,
"Invalid DTS: %"PRId64
" PTS: %"PRId64
" in output stream %d:%d, replacing by guess\n",
823 if (pkt->
dts < max) {
827 av_log(s, loglevel,
"Non-monotonous DTS in output stream " 828 "%d:%d; previous: %"PRId64
", current: %"PRId64
"; ",
834 av_log(s, loglevel,
"changing to %"PRId64
". This may result " 835 "in incorrect timestamps in the output file.\n",
852 "pkt_pts:%s pkt_pts_time:%s pkt_dts:%s pkt_dts_time:%s size:%d\n",
953 float_pts +=
FFSIGN(float_pts) * 1.0 / (1<<17);
975 char *
error,
int error_len);
981 char error[1024] = {0};
1024 "frame_pts:%s frame_pts_time:%s time_base:%d/%d\n",
1046 "pkt_pts:%s pkt_pts_time:%s pkt_dts:%s pkt_dts_time:%s\n",
1064 int subtitle_out_max_size = 1024 * 1024;
1065 int subtitle_out_size, nb,
i;
1099 for (i = 0; i < nb; i++) {
1100 unsigned save_num_rects = sub->
num_rects;
1117 subtitle_out_max_size, sub);
1120 if (subtitle_out_size < 0) {
1127 pkt.
size = subtitle_out_size;
1147 int ret, format_video_sync;
1151 int nb_frames, nb0_frames,
i;
1152 double delta, delta0;
1166 if (frame_rate.
num > 0 && frame_rate.
den > 0)
1181 if (!next_picture) {
1216 if (delta0 < -0.6) {
1225 switch (format_video_sync) {
1237 }
else if (delta < -1.1)
1239 else if (delta > 1.1) {
1240 nb_frames =
lrintf(delta);
1242 nb0_frames =
llrintf(delta0 - 0.6);
1248 else if (delta > 0.6)
1261 nb0_frames =
FFMIN(nb0_frames, nb_frames);
1271 "*** dropping frame %d from stream %d at ts %"PRId64
"\n",
1274 if (nb_frames > (nb0_frames && ost->
last_dropped) + (nb_frames > nb0_frames)) {
1287 ost->
last_dropped = nb_frames == nb0_frames && next_picture;
1290 for (i = 0; i < nb_frames; i++) {
1292 int forced_keyframe = 0;
1298 if (i < nb0_frames && ost->last_frame) {
1301 in_picture = next_picture;
1323 forced_keyframe = 1;
1329 ff_dlog(
NULL,
"force_key_frame: n:%f n_forced:%f prev_forced_n:%f t:%f prev_forced_t:%f -> res:%f\n",
1337 forced_keyframe = 1;
1350 forced_keyframe = 1;
1353 if (forced_keyframe) {
1361 "frame_pts:%s frame_pts_time:%s time_base:%d/%d\n",
1384 "pkt_pts:%s pkt_pts_time:%s pkt_dts:%s pkt_dts_time:%s\n",
1396 "pkt_pts:%s pkt_pts_time:%s pkt_dts:%s pkt_dts_time:%s\n",
1401 frame_size = pkt.
size;
1437 return -10.0 * log10(d);
1444 double ti1,
bitrate, avg_bitrate;
1459 fprintf(
vstats_file,
"frame= %5d q= %2.1f ", frame_number,
1476 avg_bitrate = (double)(ost->
data_size * 8) / ti1 / 1000.0;
1477 fprintf(
vstats_file,
"s_size= %8.0fkB time= %0.3f br= %7.1fkbits/s avg_br= %7.1fkbits/s ",
1478 (
double)ost->
data_size / 1024, ti1, bitrate, avg_bitrate);
1542 "Error in av_buffersink_get_frame_flags(): %s\n",
av_err2str(ret));
1565 "Audio filter graph output is not normalized and encoder does not support parameter changes\n");
1584 uint64_t video_size = 0, audio_size = 0, extra_size = 0, other_size = 0;
1585 uint64_t subtitle_size = 0;
1587 float percent = -1.0;
1597 default: other_size += ost->
data_size;
break;
1606 if (data_size && total_size>0 && total_size >= data_size)
1607 percent = 100.0 * (total_size -
data_size) / data_size;
1609 av_log(
NULL,
AV_LOG_INFO,
"video:%1.0fkB audio:%1.0fkB subtitle:%1.0fkB other streams:%1.0fkB global headers:%1.0fkB muxing overhead: ",
1610 video_size / 1024.0,
1611 audio_size / 1024.0,
1612 subtitle_size / 1024.0,
1613 other_size / 1024.0,
1614 extra_size / 1024.0);
1624 uint64_t total_packets = 0, total_size = 0;
1653 total_packets, total_size);
1658 uint64_t total_packets = 0, total_size = 0;
1687 total_packets, total_size);
1689 if(video_size + data_size + audio_size + subtitle_size + extra_size == 0){
1699 static void print_report(
int is_last_report, int64_t timer_start, int64_t cur_time)
1701 AVBPrint buf, buf_script;
1706 int frame_number, vid,
i;
1709 int64_t
pts = INT64_MIN + 1;
1710 static int64_t last_time = -1;
1711 static int first_report = 1;
1712 static int qp_histogram[52];
1713 int hours, mins, secs,
us;
1714 const char *hours_sign;
1718 if (!
print_stats && !is_last_report && !progress_avio)
1721 if (!is_last_report) {
1722 if (last_time == -1) {
1723 last_time = cur_time;
1725 if (((cur_time - last_time) <
stats_period && !first_report) ||
1728 last_time = cur_time;
1731 t = (cur_time-timer_start) / 1000000.0;
1734 oc = output_files[0]->
ctx;
1737 if (total_size <= 0)
1745 ost = output_streams[
i];
1752 av_bprintf(&buf_script,
"stream_%d_%d_q=%.1f\n",
1759 fps = t > 1 ? frame_number / t : 0;
1760 av_bprintf(&buf,
"frame=%5d fps=%3.*f q=%3.1f ",
1761 frame_number, fps < 9.95, fps, q);
1762 av_bprintf(&buf_script,
"frame=%d\n", frame_number);
1764 av_bprintf(&buf_script,
"stream_%d_%d_q=%.1f\n",
1773 for (j = 0; j < 32; j++)
1779 double error, error_sum = 0;
1780 double scale, scale_sum = 0;
1782 char type[3] = {
'Y',
'U',
'V' };
1784 for (j = 0; j < 3; j++) {
1785 if (is_last_report) {
1786 error = enc->
error[j];
1787 scale = enc->
width * enc->
height * 255.0 * 255.0 * frame_number;
1789 error = ost->
error[j];
1796 p =
psnr(error / scale);
1798 av_bprintf(&buf_script,
"stream_%d_%d_psnr_%c=%2.2f\n",
1801 p =
psnr(error_sum / scale_sum);
1803 av_bprintf(&buf_script,
"stream_%d_%d_psnr_all=%2.2f\n",
1830 hours_sign = (pts < 0) ?
"-" :
"";
1832 bitrate = pts && total_size >= 0 ? total_size * 8 / (pts / 1000.0) : -1;
1833 speed = t != 0.0 ? (double)pts /
AV_TIME_BASE / t : -1;
1835 if (total_size < 0)
av_bprintf(&buf,
"size=N/A time=");
1836 else av_bprintf(&buf,
"size=%8.0fkB time=", total_size / 1024.0);
1841 hours_sign, hours, mins, secs, (100 * us) /
AV_TIME_BASE);
1848 av_bprintf(&buf,
"bitrate=%6.1fkbits/s", bitrate);
1849 av_bprintf(&buf_script,
"bitrate=%6.1fkbits/s\n", bitrate);
1852 if (total_size < 0)
av_bprintf(&buf_script,
"total_size=N/A\n");
1853 else av_bprintf(&buf_script,
"total_size=%"PRId64
"\n", total_size);
1855 av_bprintf(&buf_script,
"out_time_us=N/A\n");
1856 av_bprintf(&buf_script,
"out_time_ms=N/A\n");
1859 av_bprintf(&buf_script,
"out_time_us=%"PRId64
"\n", pts);
1860 av_bprintf(&buf_script,
"out_time_ms=%"PRId64
"\n", pts);
1861 av_bprintf(&buf_script,
"out_time=%s%02d:%02d:%02d.%06d\n",
1862 hours_sign, hours, mins, secs, us);
1875 av_bprintf(&buf_script,
"speed=%4.3gx\n", speed);
1879 const char end = is_last_report ?
'\n' :
'\r';
1881 fprintf(stderr,
"%s %c", buf.str, end);
1889 if (progress_avio) {
1891 is_last_report ?
"end" :
"continue");
1893 FFMIN(buf_script.len, buf_script.size - 1));
1896 if (is_last_report) {
1899 "Error closing progress log, loss of information possible: %s\n",
av_err2str(ret));
1940 "Finishing stream %d:%d without any data written to it.\n",
2020 pkt_size = pkt.
size;
2075 ist->
pts < comp_start :
2113 (
AVRational){1, ist->dec_ctx->sample_rate}, duration,
2116 opkt.
pts = opkt.
dts - ost_tb_start_time;
2119 opkt.
dts -= ost_tb_start_time;
2131 char layout_name[256];
2148 if (*got_output || ret<0)
2154 if (*got_output && ist) {
2179 int need_reinit,
ret,
i;
2191 need_reinit |= ifilter->
width != frame->
width ||
2210 if (need_reinit || !fg->
graph) {
2295 if (ret < 0 && ret !=
AVERROR(EAGAIN))
2322 "Failed to inject frame into filter network: %s\n",
av_err2str(ret));
2344 ret =
decode(avctx, decoded_frame, got_output, pkt);
2357 if (!*got_output || ret < 0)
2373 decoded_frame->
pts = pkt->
pts;
2376 decoded_frame->
pts = ist->
dts;
2388 return err < 0 ? err :
ret;
2395 int i,
ret = 0, err = 0;
2396 int64_t best_effort_timestamp;
2403 if (!eof && pkt && pkt->
size == 0)
2441 "video_delay is larger in decoder than demuxer %d > %d.\n" 2442 "If you want to help, upload a sample " 2443 "of this file to https://streams.videolan.org/upload/ " 2444 "and contact the ffmpeg-devel mailing list. (ffmpeg-devel@ffmpeg.org)\n",
2452 if (*got_output && ret >= 0) {
2456 av_log(NULL,
AV_LOG_DEBUG,
"Frame parameters mismatch context %d,%d,%d != %d,%d,%d\n",
2457 decoded_frame->
width,
2466 if (!*got_output || ret < 0)
2504 "frame_pts:%s frame_pts_time:%s best_effort_ts:%"PRId64
" best_effort_ts_time:%s keyframe:%d frame_type:%d time_base:%d/%d\n",
2507 best_effort_timestamp,
2521 return err < 0 ? err :
ret;
2530 &subtitle, got_output, pkt);
2534 if (ret < 0 || !*got_output) {
2546 if (end < ist->
prev_sub.subtitle.end_display_time) {
2548 "Subtitle duration reduced from %"PRId32
" to %d%s\n",
2550 end <= 0 ?
", dropping it" :
"");
2621 int eof_reached = 0;
2656 int64_t duration_dts = 0;
2657 int64_t duration_pts = 0;
2659 int decode_failed = 0;
2670 ret =
decode_video (ist, repeating ?
NULL : &avpkt, &got_output, &duration_pts, !pkt,
2672 if (!repeating || !pkt || got_output) {
2689 if (duration_pts > 0) {
2700 if (!pkt && ret >= 0)
2713 if (decode_failed) {
2796 return !eof_reached;
2808 if (!output_files[i]->header_written)
2817 avc[j] = output_files[
i]->
ctx;
2828 printf(
"SDP:\n%s\n", sdp);
2881 "%s hwaccel requested for input stream #%d:%d, " 2882 "but cannot be initialized.\n",
2907 ret = hwaccel->
init(s);
2910 "%s hwaccel requested for input stream #%d:%d, " 2911 "but cannot be initialized.\n", hwaccel->
name,
2948 snprintf(error, error_len,
"Decoder (codec %s) not found for input stream #%d:%d",
2956 #if LIBAVCODEC_VERSION_MAJOR < 60 2965 av_log(
NULL,
AV_LOG_WARNING,
"Warning using DVB subtitles for filtering and output at the same time is not fully supported, also see -compute_edt [0|1]\n");
2982 snprintf(error, error_len,
"Device setup failed for " 2983 "decoder on input stream #%d:%d : %s",
2993 "Error while opening decoder for input stream " 3016 return FFDIFFSIGN(*(
const int64_t *)a, *(
const int64_t *)b);
3035 "Could not write header for output file #%d " 3036 "(incorrect codec parameters ?): %s\n",
3105 uint32_t codec_tag = par_dst->
codec_tag;
3114 "Error setting up codec context options.\n");
3121 "Error getting reference codec parameters.\n");
3126 unsigned int codec_tag_tmp;
3166 memcpy(dst_data, sd_src->
data, sd_src->
size);
3192 (
AVRational){ par_dst->height, par_dst->width });
3194 "with stream copy may produce invalid files\n");
3216 int encoder_string_len;
3217 int format_flags = 0;
3239 encoder_string =
av_mallocz(encoder_string_len);
3240 if (!encoder_string)
3246 av_strlcpy(encoder_string,
"Lavc ", encoder_string_len);
3247 av_strlcat(encoder_string, ost->
enc->name, encoder_string_len);
3259 for (p = kf; *p; p++)
3270 for (
i = 0;
i < n;
i++) {
3271 char *next = strchr(p,
',');
3276 if (!memcmp(p,
"chapters", 8)) {
3285 "Could not allocate forced key frames array.\n");
3383 "about the input framerate is available. Falling " 3384 "back to a default value of 25fps for output stream #%d:%d. Use the -r option " 3385 "if you want a different framerate.\n",
3389 if (ost->
enc->supported_framerates && !ost->
force_fps) {
3421 "Please consider specifying a lower framerate, a different muxer or -vsync 2\n");
3498 if (!enc_ctx->
width) {
3516 char *
error,
int error_len)
3549 snprintf(error, error_len,
"Device setup failed for " 3550 "encoder on output stream #%d:%d : %s",
3556 int input_props = 0, output_props = 0;
3561 if (input_descriptor)
3563 if (output_descriptor)
3565 if (input_props && output_props && input_props != output_props) {
3567 "Subtitle encoding currently only possible from text to text " 3568 "or bitmap to bitmap");
3577 "Error while opening encoder for output stream #%d:%d - " 3578 "maybe incorrect parameters such as bit_rate, rate, width or height",
3590 " It takes bits/s as argument, not kbits/s\n");
3595 "Error initializing the output stream codec context.\n");
3609 memcpy(dst_data, sd_src->
data, sd_src->
size);
3651 {
"disposition" ,
NULL, 0,
AV_OPT_TYPE_FLAGS, { .i64 = 0 }, INT64_MIN, INT64_MAX, .unit =
"flags" },
3669 static const AVClass class = {
3675 const AVClass *pclass = &
class;
3700 InputFile *file = input_files[input_index];
3706 "New %s stream %d:%d at pos:%"PRId64
" and DTS:%ss\n",
3715 int ret = 0,
i, j, k;
3719 char error[1024] = {0};
3730 if (fg->
inputs[0]->
ist == input_streams[k])
3748 ost = output_streams[
i];
3764 if (!output_streams[
i]->stream_copy &&
3792 oc = output_files[
i]->
ctx;
3804 ist = input_streams[
i];
3811 if (nb_filtergraphs > 1)
3819 ost = output_streams[
i];
3831 if (nb_filtergraphs > 1)
3853 const char *decoder_name =
"?";
3854 const char *in_codec_name =
"?";
3855 const char *encoder_name =
"?";
3856 const char *out_codec_name =
"?";
3860 decoder_name = in_codec->
name;
3863 in_codec_name = desc->
name;
3864 if (!strcmp(decoder_name, in_codec_name))
3865 decoder_name =
"native";
3869 encoder_name = out_codec->
name;
3872 out_codec_name = desc->
name;
3873 if (!strcmp(encoder_name, out_codec_name))
3874 encoder_name =
"native";
3878 in_codec_name, decoder_name,
3879 out_codec_name, encoder_name);
3928 int64_t opts_min = INT64_MAX;
3938 "cur_dts is invalid st:%d (%d) [init:%d i_done:%d finish:%d] (this is harmless if it occurs once at the start per stream)\n",
3944 if (!ost->
finished && opts < opts_min) {
3956 if (tcgetattr(0, &tty) == 0) {
3957 if (on) tty.c_lflag |=
ECHO;
3958 else tty.c_lflag &= ~
ECHO;
3959 tcsetattr(0, TCSANOW, &tty);
3967 static int64_t last_time;
3973 last_time = cur_time;
3990 if (key ==
'c' || key ==
'C'){
3991 char buf[4096], target[64],
command[256],
arg[256] = {0};
3994 fprintf(stderr,
"\nEnter command: <target>|all <time>|-1 <command>[ <argument>]\n");
3997 while ((k =
read_key()) !=
'\n' && k !=
'\r' && i <
sizeof(buf)-1)
4002 fprintf(stderr,
"\n");
4004 (n = sscanf(buf,
"%63[^ ] %lf %255[^ ] %255[^\n]", target, &time, command, arg)) >= 3) {
4006 target, time, command, arg);
4013 fprintf(stderr,
"Command reply for stream %d: ret:%d res:\n%s", i, ret, buf);
4014 }
else if (key ==
'c') {
4015 fprintf(stderr,
"Queuing commands only on filters supporting the specific command is unsupported\n");
4020 fprintf(stderr,
"Queuing command failed with error %s\n",
av_err2str(ret));
4026 "Parse error, at least 3 arguments were expected, " 4027 "only %d given in string '%s'\n", n, buf);
4030 if (key ==
'd' || key ==
'D'){
4034 if(!debug) debug = 1;
4037 |FF_DEBUG_VIS_QP|FF_DEBUG_VIS_MB_TYPE
4046 while ((k =
read_key()) !=
'\n' && k !=
'\r' && i <
sizeof(buf)-1)
4051 fprintf(stderr,
"\n");
4052 if (k <= 0 || sscanf(buf,
"%d", &debug)!=1)
4053 fprintf(stderr,
"error parsing debug value\n");
4063 fprintf(stderr,
"debug=%d\n", debug);
4066 fprintf(stderr,
"key function\n" 4067 "? show this help\n" 4068 "+ increase verbosity\n" 4069 "- decrease verbosity\n" 4070 "c Send command to first matching filter supporting it\n" 4071 "C Send/Queue command to all matching filters\n" 4072 "D cycle through available debug modes\n" 4073 "h dump packets/hex press to cycle through the 3 states\n" 4075 "s Show QP histogram\n" 4082 static void *input_thread(
void *
arg)
4101 if (flags && ret ==
AVERROR(EAGAIN)) {
4105 "Thread message queue blocking; consider raising the " 4106 "thread_queue_size option (current value: %d)\n",
4107 f->thread_queue_size);
4112 "Unable to send packet to main thread: %s\n",
4123 static void free_input_thread(
int i)
4128 if (!f || !f->in_thread_queue)
4139 static void free_input_threads(
void)
4144 free_input_thread(i);
4147 static int init_input_thread(
int i)
4152 if (f->thread_queue_size < 0)
4154 if (!f->thread_queue_size)
4159 f->non_blocking = 1;
4161 f->thread_queue_size,
sizeof(
AVPacket));
4166 av_log(
NULL,
AV_LOG_ERROR,
"pthread_create failed: %s. Try to increase `ulimit -v` or decrease `ulimit -s`.\n", strerror(ret));
4174 static int init_input_threads(
void)
4179 ret = init_input_thread(i);
4208 if (f->thread_queue_size)
4209 return get_input_packet_mt(f, pkt);
4218 if (output_streams[i]->unavailable)
4227 input_files[i]->eagain = 0;
4229 output_streams[i]->unavailable = 0;
4240 return tmp_time_base;
4243 ret =
av_compare_ts(*duration, time_base, tmp, tmp_time_base);
4246 return tmp_time_base;
4256 int i,
ret, has_audio = 0;
4305 if (ifile->
loop > 0)
4324 int ret, thread_ret,
i, j;
4327 int disable_discontinuity_correction =
copy_ts;
4336 if (ret < 0 && ifile->
loop) {
4349 free_input_thread(file_index);
4353 thread_ret = init_input_thread(file_index);
4405 goto discard_packet;
4414 goto discard_packet;
4418 "%s: corrupt input packet in stream %d\n", is->
url, pkt.
stream_index);
4425 "next_dts:%s next_dts_time:%s next_pts:%s next_pts_time:%s pkt_pts:%s pkt_pts_time:%s pkt_dts:%s pkt_dts_time:%s off:%s off_time:%s\n",
4436 int64_t stime, stime2;
4443 int64_t new_start_time = INT64_MAX;
4486 memcpy(dst_data, src_sd->
data, src_sd->
size);
4510 "Inter stream timestamp discontinuity %"PRId64
", new offset= %"PRId64
"\n",
4536 disable_discontinuity_correction = 0;
4542 !disable_discontinuity_correction) {
4550 "timestamp discontinuity for stream #%d:%d " 4551 "(id=%d, type=%s): %"PRId64
", new offset= %"PRId64
"\n",
4581 av_log(
NULL,
AV_LOG_INFO,
"demuxer+ffmpeg -> ist_index:%d type:%s pkt_pts:%s pkt_pts_time:%s pkt_dts:%s pkt_dts_time:%s off:%s off_time:%s\n",