Go to the documentation of this file.
   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> 
  163 static struct termios oldtty;
 
  164 static int restore_tty;
 
  168 static void free_input_threads(
void);
 
  194     uint32_t *pal, *dst2;
 
  202     if (
r->x < 0 || 
r->x + 
r->w > 
w || 
r->y < 0 || 
r->y + 
r->h > 
h) {
 
  204             r->x, 
r->y, 
r->w, 
r->h, 
w, 
h 
  209     dst += 
r->y * dst_linesize + 
r->x * 4;
 
  211     pal = (uint32_t *)
r->data[1];
 
  212     for (y = 0; y < 
r->h; y++) {
 
  213         dst2 = (uint32_t *)dst;
 
  215         for (x = 0; x < 
r->w; x++)
 
  216             *(dst2++) = pal[*(src2++)];
 
  218         src += 
r->linesize[0];
 
  246     int64_t 
pts, end_pts;
 
  263                "Impossible to get a blank canvas.\n");
 
  266     dst          = 
frame->data    [0];
 
  267     dst_linesize = 
frame->linesize[0];
 
  268     for (
i = 0; 
i < num_rects; 
i++)
 
  292         if (pts2 <= ist2->sub2video.last_pts)
 
  297         for (j = 0, nb_reqs = 0; j < ist2->
nb_filters; j++)
 
  324         tcsetattr (0, TCSANOW, &oldtty);
 
  348         ret = write(2, 
"Received > 3 system signals, hard exiting\n",
 
  349                     strlen(
"Received > 3 system signals, hard exiting\n"));
 
  355 #if HAVE_SETCONSOLECTRLHANDLER 
  356 static BOOL WINAPI CtrlHandler(
DWORD fdwCtrlType)
 
  363     case CTRL_BREAK_EVENT:
 
  367     case CTRL_CLOSE_EVENT:
 
  368     case CTRL_LOGOFF_EVENT:
 
  369     case CTRL_SHUTDOWN_EVENT:
 
  392         if (tcgetattr (0, &tty) == 0) {
 
  396             tty.c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP
 
  397                              |INLCR|IGNCR|ICRNL|IXON);
 
  398             tty.c_oflag |= OPOST;
 
  399             tty.c_lflag &= ~(
ECHO|ECHONL|ICANON|IEXTEN);
 
  400             tty.c_cflag &= ~(CSIZE|PARENB);
 
  405             tcsetattr (0, TCSANOW, &tty);
 
  417     signal(SIGPIPE, SIG_IGN); 
 
  419 #if HAVE_SETCONSOLECTRLHANDLER 
  420     SetConsoleCtrlHandler((PHANDLER_ROUTINE) CtrlHandler, 
TRUE);
 
  446 #    if HAVE_PEEKNAMEDPIPE 
  448     static HANDLE input_handle;
 
  451         input_handle = GetStdHandle(STD_INPUT_HANDLE);
 
  452         is_pipe = !GetConsoleMode(input_handle, &dw);
 
  457         if (!PeekNamedPipe(input_handle, 
NULL, 0, 
NULL, &nchars, 
NULL)) {
 
  507                                          &sub, 
sizeof(sub), 
NULL);
 
  553         for (j = 0; j < 
ost->nb_bitstream_filters; j++)
 
  567         ost->audio_channels_mapped = 0;
 
  575         if (
ost->muxing_queue) {
 
  587     free_input_threads();
 
  613                    "Error closing vstats file, loss of information possible: %s\n",
 
  672                    "bench: %8" PRIu64 
" user %8" PRIu64 
" sys %8" PRIu64 
" real %s \n",
 
  686         ost2->
finished |= 
ost == ost2 ? this_stream : others;
 
  705         if (
ost->frame_number >= 
ost->max_frames) {
 
  717                                  ost->max_muxing_queue_size);
 
  720                        "Too many packets buffered for output stream %d:%d.\n",
 
  754         if (
ost->frame_rate.num && 
ost->is_cfr) {
 
  768             av_log(
s, 
AV_LOG_WARNING, 
"Invalid DTS: %"PRId64
" PTS: %"PRId64
" in output stream %d:%d, replacing by guess\n",
 
  783                 av_log(
s, loglevel, 
"Non-monotonous DTS in output stream " 
  784                        "%d:%d; previous: %"PRId64
", current: %"PRId64
"; ",
 
  790                 av_log(
s, loglevel, 
"changing to %"PRId64
". This may result " 
  791                        "in incorrect timestamps in the output file.\n",
 
  802     ost->packets_written++;
 
  808                 "pkt_pts:%s pkt_pts_time:%s pkt_dts:%s pkt_dts_time:%s size:%d\n",
 
  853     if (
ost->nb_bitstream_filters) {
 
  875             if (idx < ost->nb_bitstream_filters) {
 
  892                "packet for stream #%d:%d.\n", 
ost->file_index, 
ost->
index);
 
  928     ost->samples_encoded += 
frame->nb_samples;
 
  929     ost->frames_encoded++;
 
  935                "frame_pts:%s frame_pts_time:%s time_base:%d/%d\n",
 
  957                    "pkt_pts:%s pkt_pts_time:%s pkt_dts:%s pkt_dts_time:%s\n",
 
  975     int subtitle_out_max_size = 1024 * 1024;
 
  976     int subtitle_out_size, nb, 
i;
 
 1010     for (
i = 0; 
i < nb; 
i++) {
 
 1011         unsigned save_num_rects = sub->
num_rects;
 
 1025         ost->frames_encoded++;
 
 1028                                                     subtitle_out_max_size, sub);
 
 1031         if (subtitle_out_size < 0) {
 
 1059     int ret, format_video_sync;
 
 1064     int nb_frames, nb0_frames, 
i;
 
 1065     double delta, delta0;
 
 1071     if (
ost->source_index >= 0)
 
 1075     if (frame_rate.
num > 0 && frame_rate.
den > 0)
 
 1081     if (!
ost->filters_script &&
 
 1090     if (!next_picture) {
 
 1092         nb0_frames = nb_frames = 
mid_pred(
ost->last_nb0_frames[0],
 
 1093                                           ost->last_nb0_frames[1],
 
 1094                                           ost->last_nb0_frames[2]);
 
 1096         delta0 = sync_ipts - 
ost->sync_opts; 
 
 1125             if (delta0 < -0.6) {
 
 1129             sync_ipts = 
ost->sync_opts;
 
 1134         switch (format_video_sync) {
 
 1136             if (
ost->frame_number == 0 && delta0 >= 0.5) {
 
 1146             } 
else if (
delta < -1.1)
 
 1148             else if (
delta > 1.1) {
 
 1151                     nb0_frames = 
lrintf(delta0 - 0.6);
 
 1157             else if (
delta > 0.6)
 
 1169     nb_frames = 
FFMIN(nb_frames, 
ost->max_frames - 
ost->frame_number);
 
 1170     nb0_frames = 
FFMIN(nb0_frames, nb_frames);
 
 1172     memmove(
ost->last_nb0_frames + 1,
 
 1173             ost->last_nb0_frames,
 
 1175     ost->last_nb0_frames[0] = nb0_frames;
 
 1177     if (nb0_frames == 0 && 
ost->last_dropped) {
 
 1180                "*** dropping frame %d from stream %d at ts %"PRId64
"\n",
 
 1183     if (nb_frames > (nb0_frames && 
ost->last_dropped) + (nb_frames > nb0_frames)) {
 
 1189         nb_frames_dup += nb_frames - (nb0_frames && 
ost->last_dropped) - (nb_frames > nb0_frames);
 
 1196     ost->last_dropped = nb_frames == nb0_frames && next_picture;
 
 1199     for (
i = 0; 
i < nb_frames; 
i++) {
 
 1201         int forced_keyframe = 0;
 
 1207         if (i < nb0_frames && ost->last_frame) {
 
 1208             in_picture = 
ost->last_frame;
 
 1210             in_picture = next_picture;
 
 1215         in_picture->
pts = 
ost->sync_opts;
 
 1221             ost->top_field_first >= 0)
 
 1237             ost->forced_kf_ref_pts = in_picture->
pts;
 
 1241         if (
ost->forced_kf_index < 
ost->forced_kf_count &&
 
 1242             in_picture->
pts >= 
ost->forced_kf_pts[
ost->forced_kf_index]) {
 
 1243             ost->forced_kf_index++;
 
 1244             forced_keyframe = 1;
 
 1245         } 
else if (
ost->forced_keyframes_pexpr) {
 
 1247             ost->forced_keyframes_expr_const_values[
FKF_T] = pts_time;
 
 1249                                ost->forced_keyframes_expr_const_values, 
NULL);
 
 1250             ff_dlog(
NULL, 
"force_key_frame: n:%f n_forced:%f prev_forced_n:%f t:%f prev_forced_t:%f -> res:%f\n",
 
 1251                     ost->forced_keyframes_expr_const_values[
FKF_N],
 
 1254                     ost->forced_keyframes_expr_const_values[
FKF_T],
 
 1258                 forced_keyframe = 1;
 
 1260                     ost->forced_keyframes_expr_const_values[
FKF_N];
 
 1262                     ost->forced_keyframes_expr_const_values[
FKF_T];
 
 1266             ost->forced_keyframes_expr_const_values[
FKF_N] += 1;
 
 1267         } 
else if (   
ost->forced_keyframes
 
 1268                    && !strncmp(
ost->forced_keyframes, 
"source", 6)
 
 1270             forced_keyframe = 1;
 
 1273         if (forced_keyframe) {
 
 1281                    "frame_pts:%s frame_pts_time:%s time_base:%d/%d\n",
 
 1286         ost->frames_encoded++;
 
 1304                        "pkt_pts:%s pkt_pts_time:%s pkt_dts:%s pkt_dts_time:%s\n",
 
 1316                     "pkt_pts:%s pkt_pts_time:%s pkt_dts:%s pkt_dts_time:%s\n",
 
 1335         ost->frame_number++;
 
 1341     if (!
ost->last_frame)
 
 1344     if (next_picture && 
ost->last_frame)
 
 1357     return -10.0 * log10(d);
 
 1364     double ti1, 
bitrate, avg_bitrate;
 
 1379             fprintf(
vstats_file, 
"frame= %5d q= %2.1f ", frame_number,
 
 1396         avg_bitrate = (double)(
ost->data_size * 8) / ti1 / 1000.0;
 
 1397         fprintf(
vstats_file, 
"s_size= %8.0fkB time= %0.3f br= %7.1fkbits/s avg_br= %7.1fkbits/s ",
 
 1398                (
double)
ost->data_size / 1024, ti1, 
bitrate, avg_bitrate);
 
 1437         if (!
ost->filter || !
ost->filter->graph->graph)
 
 1441         if (!
ost->initialized) {
 
 1442             char error[1024] = 
"";
 
 1454         filtered_frame = 
ost->filtered_frame;
 
 1463                            "Error in av_buffersink_get_frame_flags(): %s\n", 
av_err2str(
ret));
 
 1470             if (
ost->finished) {
 
 1486                 float_pts += 
FFSIGN(float_pts) * 1.0 / (1<<17);
 
 1488                 filtered_frame->
pts =
 
 1495                 if (!
ost->frame_aspect_ratio.num)
 
 1511                            "Audio filter graph output is not normalized and encoder does not support parameter changes\n");
 
 1530     uint64_t video_size = 0, audio_size = 0, extra_size = 0, other_size = 0;
 
 1531     uint64_t subtitle_size = 0;
 
 1532     uint64_t data_size = 0;
 
 1533     float percent = -1.0;
 
 1539         switch (
ost->enc_ctx->codec_type) {
 
 1543             default:                 other_size += 
ost->data_size; 
break;
 
 1545         extra_size += 
ost->enc_ctx->extradata_size;
 
 1546         data_size  += 
ost->data_size;
 
 1552     if (data_size && total_size>0 && total_size >= data_size)
 
 1553         percent = 100.0 * (total_size - data_size) / data_size;
 
 1555     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: ",
 
 1556            video_size / 1024.0,
 
 1557            audio_size / 1024.0,
 
 1558            subtitle_size / 1024.0,
 
 1559            other_size / 1024.0,
 
 1560            extra_size / 1024.0);
 
 1570         uint64_t total_packets = 0, total_size = 0;
 
 1575         for (j = 0; j < 
f->nb_streams; j++) {
 
 1599                total_packets, total_size);
 
 1604         uint64_t total_packets = 0, total_size = 0;
 
 1613             total_size    += 
ost->data_size;
 
 1614             total_packets += 
ost->packets_written;
 
 1618             if (
ost->encoding_needed) {
 
 1620                        ost->frames_encoded);
 
 1627                    ost->packets_written, 
ost->data_size);
 
 1633                total_packets, total_size);
 
 1635     if(video_size + data_size + audio_size + subtitle_size + extra_size == 0){
 
 1645 static void print_report(
int is_last_report, int64_t timer_start, int64_t cur_time)
 
 1647     AVBPrint 
buf, buf_script;
 
 1652     int frame_number, vid, 
i;
 
 1655     int64_t 
pts = INT64_MIN + 1;
 
 1656     static int64_t last_time = -1;
 
 1657     static int qp_histogram[52];
 
 1658     int hours, mins, secs, 
us;
 
 1659     const char *hours_sign;
 
 1666     if (!is_last_report) {
 
 1667         if (last_time == -1) {
 
 1668             last_time = cur_time;
 
 1671         if ((cur_time - last_time) < 500000)
 
 1673         last_time = cur_time;
 
 1676     t = (cur_time-timer_start) / 1000000.0;
 
 1682     if (total_size <= 0) 
 
 1692         if (!
ost->stream_copy)
 
 1697             av_bprintf(&buf_script, 
"stream_%d_%d_q=%.1f\n",
 
 1703             frame_number = 
ost->frame_number;
 
 1704             fps = t > 1 ? frame_number / t : 0;
 
 1706                      frame_number, fps < 9.95, fps, q);
 
 1707             av_bprintf(&buf_script, 
"frame=%d\n", frame_number);
 
 1709             av_bprintf(&buf_script, 
"stream_%d_%d_q=%.1f\n",
 
 1718                 for (j = 0; j < 32; j++)
 
 1724                 double error, error_sum = 0;
 
 1725                 double scale, scale_sum = 0;
 
 1727                 char type[3] = { 
'Y',
'U',
'V' };
 
 1729                 for (j = 0; j < 3; j++) {
 
 1730                     if (is_last_report) {
 
 1732                         scale = enc->
width * enc->
height * 255.0 * 255.0 * frame_number;
 
 1743                     av_bprintf(&buf_script, 
"stream_%d_%d_psnr_%c=%2.2f\n",
 
 1746                 p = 
psnr(error_sum / scale_sum);
 
 1748                 av_bprintf(&buf_script, 
"stream_%d_%d_psnr_all=%2.2f\n",
 
 1767     hours_sign = (
pts < 0) ? 
"-" : 
"";
 
 1769     bitrate = 
pts && total_size >= 0 ? total_size * 8 / (
pts / 1000.0) : -1;
 
 1773     else                av_bprintf(&
buf, 
"size=%8.0fkB time=", total_size / 1024.0);
 
 1789     if (total_size < 0) 
av_bprintf(&buf_script, 
"total_size=N/A\n");
 
 1790     else                av_bprintf(&buf_script, 
"total_size=%"PRId64
"\n", total_size);
 
 1792         av_bprintf(&buf_script, 
"out_time_us=N/A\n");
 
 1793         av_bprintf(&buf_script, 
"out_time_ms=N/A\n");
 
 1798         av_bprintf(&buf_script, 
"out_time=%s%02d:%02d:%02d.%06d\n",
 
 1799                    hours_sign, hours, mins, secs, 
us);
 
 1812         av_bprintf(&buf_script, 
"speed=%4.3gx\n", speed);
 
 1816         const char end = is_last_report ? 
'\n' : 
'\r';
 
 1818             fprintf(stderr, 
"%s    %c", 
buf.str, 
end);
 
 1828                    is_last_report ? 
"end" : 
"continue");
 
 1830                    FFMIN(buf_script.len, buf_script.size - 1));
 
 1833         if (is_last_report) {
 
 1836                        "Error closing progress log, loss of information possible: %s\n", 
av_err2str(
ret));
 
 1866         if (!
ost->encoding_needed)
 
 1871         if (!
ost->initialized) {
 
 1873             char error[1024] = 
"";
 
 1876                    "Finishing stream %d:%d without any data written to it.\n",
 
 1981     if (
ost->source_index != ist_index)
 
 2010         !
ost->copy_initial_nonkeyframes)
 
 2013     if (!
ost->frame_number && !
ost->copy_prior_start) {
 
 2018             ist->
pts < comp_start :
 
 2029     if (
f->recording_time != INT64_MAX) {
 
 2052     opkt.
dts -= ost_tb_start_time;
 
 2060                                                ost->mux_timebase) - ost_tb_start_time;
 
 2085         char layout_name[256];
 
 2102     if (*got_output || 
ret<0)
 
 2108     if (*got_output && ist) {
 
 2133     int need_reinit, 
ret, 
i;
 
 2145         need_reinit |= ifilter->
width  != 
frame->width ||
 
 2164     if (need_reinit || !fg->
graph) {
 
 2264         if (i < ist->nb_filters - 1) {
 
 2276                    "Failed to inject frame into filter network: %s\n", 
av_err2str(
ret));
 
 2311     if (!*got_output || 
ret < 0)
 
 2330         decoded_frame->
pts = ist->
dts;
 
 2342     return err < 0 ? err : 
ret;
 
 2349     int i, 
ret = 0, err = 0;
 
 2350     int64_t best_effort_timestamp;
 
 2395                    "video_delay is larger in decoder than demuxer %d > %d.\n" 
 2396                    "If you want to help, upload a sample " 
 2397                    "of this file to ftp://upload.ffmpeg.org/incoming/ " 
 2398                    "and contact the ffmpeg-devel mailing list. (ffmpeg-devel@ffmpeg.org)\n",
 
 2406     if (*got_output && 
ret >= 0) {
 
 2411                 decoded_frame->
width,
 
 2420     if (!*got_output || 
ret < 0)
 
 2458                "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",
 
 2461                best_effort_timestamp,
 
 2475     return err < 0 ? err : 
ret;
 
 2484                                           &subtitle, got_output, 
pkt);
 
 2488     if (
ret < 0 || !*got_output) {
 
 2500             if (end < ist->prev_sub.subtitle.end_display_time) {
 
 2502                        "Subtitle duration reduced from %"PRId32
" to %d%s\n",
 
 2504                        end <= 0 ? 
", dropping it" : 
"");
 
 2575     int eof_reached = 0;
 
 2610         int64_t duration_dts = 0;
 
 2611         int64_t duration_pts = 0;
 
 2613         int decode_failed = 0;
 
 2626             if (!repeating || !
pkt || got_output) {
 
 2643                 if (duration_pts > 0) {
 
 2667             if (decode_failed) {
 
 2750     return !eof_reached;
 
 2782         printf(
"SDP:\n%s\n", sdp);
 
 2835                            "%s hwaccel requested for input stream #%d:%d, " 
 2836                            "but cannot be initialized.\n",
 
 2864                        "%s hwaccel requested for input stream #%d:%d, " 
 2865                        "but cannot be initialized.\n", hwaccel->
name,
 
 2873             if (!
s->hw_frames_ctx)
 
 2902             snprintf(
error, error_len, 
"Decoder (codec %s) not found for input stream #%d:%d",
 
 2917                 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");
 
 2935                      "decoder on input stream #%d:%d : %s",
 
 2945                      "Error while opening decoder for input stream " 
 2961     if (
ost->source_index >= 0)
 
 2968     return FFDIFFSIGN(*(
const int64_t *)
a, *(
const int64_t *)
b);
 
 2978         if (!
ost->initialized)
 
 2987                "Could not write header for output file #%d " 
 2988                "(incorrect codec parameters ?): %s\n",
 
 3023     if (!
ost->nb_bitstream_filters)
 
 3026     for (
i = 0; 
i < 
ost->nb_bitstream_filters; 
i++) {
 
 3039                    ost->bsf_ctx[
i]->filter->name);
 
 3044     ctx = 
ost->bsf_ctx[
ost->nb_bitstream_filters - 1];
 
 3062     uint32_t codec_tag = par_dst->
codec_tag;
 
 3071                "Error setting up codec context options.\n");
 
 3078                "Error getting reference codec parameters.\n");
 
 3083         unsigned int codec_tag_tmp;
 
 3096     if (!
ost->frame_rate.num)
 
 3123             memcpy(dst_data, sd_src->
data, sd_src->
size);
 
 3127     if (
ost->rotate_overridden) {
 
 3146         if (
ost->frame_aspect_ratio.num) { 
 
 3149                          (
AVRational){ par_dst->height, par_dst->width });
 
 3151                    "with stream copy may produce invalid files\n");
 
 3173     int encoder_string_len;
 
 3174     int format_flags = 0;
 
 3196     encoder_string     = 
av_mallocz(encoder_string_len);
 
 3197     if (!encoder_string)
 
 3203         av_strlcpy(encoder_string, 
"Lavc ", encoder_string_len);
 
 3204     av_strlcat(encoder_string, 
ost->enc->name, encoder_string_len);
 
 3216     for (p = kf; *p; p++)
 
 3227     for (
i = 0; 
i < 
n; 
i++) {
 
 3228         char *next = strchr(p, 
',');
 
 3233         if (!memcmp(p, 
"chapters", 8)) {
 
 3242                        "Could not allocate forced key frames array.\n");
 
 3269     ost->forced_kf_pts   = 
pts;
 
 3278     if (
ost->enc_timebase.num > 0) {
 
 3283     if (
ost->enc_timebase.num < 0) {
 
 3330         if (!
ost->frame_rate.num)
 
 3332         if (ist && !
ost->frame_rate.num)
 
 3334         if (ist && !
ost->frame_rate.num)
 
 3336         if (ist && !
ost->frame_rate.num) {
 
 3340                    "about the input framerate is available. Falling " 
 3341                    "back to a default value of 25fps for output stream #%d:%d. Use the -r option " 
 3342                    "if you want a different framerate.\n",
 
 3346         if (
ost->enc->supported_framerates && !
ost->force_fps) {
 
 3348             ost->frame_rate = 
ost->enc->supported_framerates[idx];
 
 3353                       ost->frame_rate.num, 
ost->frame_rate.den, 65535);
 
 3378                                        "Please consider specifying a lower framerate, a different muxer or -vsync 2\n");
 
 3380         for (j = 0; j < 
ost->forced_kf_count; j++)
 
 3388             ost->frame_aspect_ratio.num ? 
 
 3408         if (
ost->top_field_first == 0) {
 
 3410         } 
else if (
ost->top_field_first == 1) {
 
 3414         if (
ost->forced_keyframes) {
 
 3415             if (!strncmp(
ost->forced_keyframes, 
"expr:", 5)) {
 
 3420                            "Invalid force_key_frames expression '%s'\n", 
ost->forced_keyframes+5);
 
 3423                 ost->forced_keyframes_expr_const_values[
FKF_N] = 0;
 
 3430             } 
else if(strncmp(
ost->forced_keyframes, 
"source", 6)) {
 
 3437         if (!enc_ctx->
width) {
 
 3458     if (
ost->encoding_needed) {
 
 3472             if (!
ost->enc_ctx->subtitle_header)
 
 3489             if (!
ost->enc_ctx->hw_frames_ctx)
 
 3495                          "encoder on output stream #%d:%d : %s",
 
 3501             int input_props = 0, output_props = 0;
 
 3506             if (input_descriptor)
 
 3508             if (output_descriptor)
 
 3510             if (input_props && output_props && input_props != output_props) {
 
 3512                          "Subtitle encoding currently only possible from text to text " 
 3513                          "or bitmap to bitmap");
 
 3522                      "Error while opening encoder for output stream #%d:%d - " 
 3523                      "maybe incorrect parameters such as bit_rate, rate, width or height",
 
 3530                                             ost->enc_ctx->frame_size);
 
 3532         if (
ost->enc_ctx->bit_rate && 
ost->enc_ctx->bit_rate < 1000 &&
 
 3535                                          " It takes bits/s as argument, not kbits/s\n");
 
 3540                    "Error initializing the output stream codec context.\n");
 
 3550         if (
ost->enc_ctx->nb_coded_side_data) {
 
 3553             for (
i = 0; 
i < 
ost->enc_ctx->nb_coded_side_data; 
i++) {
 
 3560                 memcpy(dst_data, sd_src->
data, sd_src->
size);
 
 3592         ost->st->codec->codec= 
ost->enc_ctx->codec;
 
 3593     } 
else if (
ost->stream_copy) {
 
 3602             { 
"disposition"         , 
NULL, 0, 
AV_OPT_TYPE_FLAGS, { .i64 = 0 }, INT64_MIN, INT64_MAX, .unit = 
"flags" },
 
 3620         static const AVClass class = {
 
 3626         const AVClass *pclass = &
class;
 
 3640     ost->initialized = 1;
 
 3657            "New %s stream %d:%d at pos:%"PRId64
" and DTS:%ss\n",
 
 3666     int ret = 0, 
i, j, k;
 
 3670     char error[1024] = {0};
 
 3690         if (
ifile->rate_emu)
 
 3691             for (j = 0; j < 
ifile->nb_streams; j++)
 
 3719         for (j = 0; j < 
ifile->ctx->nb_programs; j++) {
 
 3763         if (
ost->attachment_filename) {
 
 3788                    ost->sync_ist->file_index,
 
 3790         if (
ost->stream_copy)
 
 3795             const char *decoder_name   = 
"?";
 
 3796             const char *in_codec_name  = 
"?";
 
 3797             const char *encoder_name   = 
"?";
 
 3798             const char *out_codec_name = 
"?";
 
 3802                 decoder_name  = in_codec->
name;
 
 3805                     in_codec_name = 
desc->name;
 
 3806                 if (!strcmp(decoder_name, in_codec_name))
 
 3807                     decoder_name = 
"native";
 
 3811                 encoder_name   = out_codec->
name;
 
 3814                     out_codec_name = 
desc->name;
 
 3815                 if (!strcmp(encoder_name, out_codec_name))
 
 3816                     encoder_name = 
"native";
 
 3820                    in_codec_name, decoder_name,
 
 3821                    out_codec_name, encoder_name);
 
 3846         if (
ost->finished ||
 
 3849         if (
ost->frame_number >= 
ost->max_frames) {
 
 3870     int64_t opts_min = INT64_MAX;
 
 3880                 "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",
 
 3883         if (!
ost->initialized && !
ost->inputs_done)
 
 3886         if (!
ost->finished && 
opts < opts_min) {
 
 3898     if (tcgetattr(0, &tty) == 0) {
 
 3899         if (
on) tty.c_lflag |= 
ECHO;
 
 3900         else    tty.c_lflag &= ~
ECHO;
 
 3901         tcsetattr(0, TCSANOW, &tty);
 
 3909     static int64_t last_time;
 
 3915         last_time = cur_time;
 
 3932     if (
key == 
'c' || 
key == 
'C'){
 
 3936         fprintf(stderr, 
"\nEnter command: <target>|all <time>|-1 <command>[ <argument>]\n");
 
 3939         while ((k = 
read_key()) != 
'\n' && k != 
'\r' && 
i < 
sizeof(
buf)-1)
 
 3944         fprintf(stderr, 
"\n");
 
 3946             (
n = sscanf(
buf, 
"%63[^ ] %lf %255[^ ] %255[^\n]", target, &time, 
command, 
arg)) >= 3) {
 
 3955                         fprintf(stderr, 
"Command reply for stream %d: ret:%d res:\n%s", 
i, 
ret, 
buf);
 
 3956                     } 
else if (
key == 
'c') {
 
 3957                         fprintf(stderr, 
"Queuing commands only on filters supporting the specific command is unsupported\n");
 
 3962                             fprintf(stderr, 
"Queuing command failed with error %s\n", 
av_err2str(
ret));
 
 3968                    "Parse error, at least 3 arguments were expected, " 
 3969                    "only %d given in string '%s'\n", 
n, 
buf);
 
 3972     if (
key == 
'd' || 
key == 
'D'){
 
 3976             if(!debug) debug = 1;
 
 3979                                              |FF_DEBUG_VIS_QP|FF_DEBUG_VIS_MB_TYPE
 
 3988             while ((k = 
read_key()) != 
'\n' && k != 
'\r' && 
i < 
sizeof(
buf)-1)
 
 3993             fprintf(stderr, 
"\n");
 
 3994             if (k <= 0 || sscanf(
buf, 
"%d", &debug)!=1)
 
 3995                 fprintf(stderr,
"error parsing debug value\n");
 
 4002             ost->enc_ctx->debug = debug;
 
 4005         fprintf(stderr,
"debug=%d\n", debug);
 
 4008         fprintf(stderr, 
"key    function\n" 
 4009                         "?      show this help\n" 
 4010                         "+      increase verbosity\n" 
 4011                         "-      decrease verbosity\n" 
 4012                         "c      Send command to first matching filter supporting it\n" 
 4013                         "C      Send/Queue command to all matching filters\n" 
 4014                         "D      cycle through available debug modes\n" 
 4015                         "h      dump packets/hex press to cycle through the 3 states\n" 
 4017                         "s      Show QP histogram\n" 
 4024 static void *input_thread(
void *
arg)
 
 4047                    "Thread message queue blocking; consider raising the " 
 4048                    "thread_queue_size option (current value: %d)\n",
 
 4049                    f->thread_queue_size);
 
 4054                        "Unable to send packet to main thread: %s\n",
 
 4065 static void free_input_thread(
int i)
 
 4070     if (!
f || !
f->in_thread_queue)
 
 4081 static void free_input_threads(
void)
 
 4086         free_input_thread(
i);
 
 4089 static int init_input_thread(
int i)
 
 4097     if (
f->ctx->pb ? !
f->ctx->pb->seekable :
 
 4098         strcmp(
f->ctx->iformat->name, 
"lavfi"))
 
 4099         f->non_blocking = 1;
 
 4101                                         f->thread_queue_size, 
sizeof(
AVPacket));
 
 4106         av_log(
NULL, 
AV_LOG_ERROR, 
"pthread_create failed: %s. Try to increase `ulimit -v` or decrease `ulimit -s`.\n", strerror(
ret));
 
 4114 static int init_input_threads(
void)
 
 4119         ret = init_input_thread(
i);
 
 4138         for (
i = 0; 
i < 
f->nb_streams; 
i++) {
 
 4149         return get_input_packet_mt(
f, 
pkt);
 
 4180         return tmp_time_base;
 
 4186         return tmp_time_base;
 
 4196     int i, 
ret, has_audio = 0;
 
 4203     for (
i = 0; 
i < 
ifile->nb_streams; 
i++) {
 
 4214     for (
i = 0; 
i < 
ifile->nb_streams; 
i++) {
 
 4235         if (!
ifile->duration)
 
 4245     if (
ifile->loop > 0)
 
 4264     int ret, thread_ret, 
i, j;
 
 4275     if (ret < 0 && ifile->
loop) {
 
 4277         for (
i = 0; 
i < 
ifile->nb_streams; 
i++) {
 
 4288         free_input_thread(file_index);
 
 4292         thread_ret = init_input_thread(file_index);
 
 4312         for (
i = 0; 
i < 
ifile->nb_streams; 
i++) {
 
 4324                 if (
ost->source_index == 
ifile->ist_index + 
i &&
 
 4330         ifile->eof_reached = 1;
 
 4344         goto discard_packet;
 
 4353         goto discard_packet;
 
 4364                "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",
 
 4375         int64_t stime, stime2;
 
 4380             && 
ifile->ts_offset == -
is->start_time
 
 4382             int64_t new_start_time = INT64_MAX;
 
 4383             for (
i=0; 
i<
is->nb_streams; 
i++) {
 
 4389             if (new_start_time > 
is->start_time) {
 
 4391                 ifile->ts_offset = -new_start_time;
 
 4425             memcpy(dst_data, src_sd->
data, src_sd->
size);
 
 4449                    "Inter stream timestamp discontinuity %"PRId64
", new offset= %"PRId64
"\n",
 
 4479                        "timestamp discontinuity for stream #%d:%d " 
 4480                        "(id=%d, type=%s): %"PRId64
", new offset= %"PRId64
"\n",
 
 4510         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",
 
 4538     int nb_requests, nb_requests_max = 0;
 
 4563         if (nb_requests > nb_requests_max) {
 
 4564             nb_requests_max = nb_requests;
 
 4598     if (
ost->filter && !
ost->filter->graph->graph) {
 
 4608     if (
ost->filter && 
ost->filter->graph->graph) {
 
 4609         if (!
ost->initialized) {
 
 4610             char error[1024] = {0};
 
 4622     } 
else if (
ost->filter) {
 
 4624         for (
i = 0; 
i < 
ost->filter->graph->nb_inputs; 
i++) {
 
 4632             ost->inputs_done = 1;
 
 4643             ost->unavailable = 1;
 
 4662     int64_t timer_start;
 
 4663     int64_t total_packets_written = 0;
 
 4676     if ((
ret = init_input_threads()) < 0)
 
 4704     free_input_threads();
 
 4723                    "Nothing was written into output file %d (%s), because " 
 4724                    "at least one of its streams received no packets.\n",
 
 4741         if (
ost->encoding_needed) {
 
 4744         total_packets_written += 
ost->packets_written;
 
 4770     free_input_threads();
 
 4778                     if (fclose(
ost->logfile))
 
 4780                                "Error closing logfile, loss of information possible: %s\n",
 
 4801     struct rusage rusage;
 
 4803     getrusage(RUSAGE_SELF, &rusage);
 
 4805         (rusage.ru_utime.tv_sec * 1000000LL) + rusage.ru_utime.tv_usec;
 
 4807         (rusage.ru_stime.tv_sec * 1000000LL) + rusage.ru_stime.tv_usec;
 
 4808 #elif HAVE_GETPROCESSTIMES 
 4810     FILETIME 
c, e, k, 
u;
 
 4811     proc = GetCurrentProcess();
 
 4812     GetProcessTimes(proc, &
c, &e, &k, &
u);
 
 4814         ((int64_t)
u.dwHighDateTime << 32 | 
u.dwLowDateTime) / 10;
 
 4816         ((int64_t)k.dwHighDateTime << 32 | k.dwLowDateTime) / 10;
 
 4825 #if HAVE_GETRUSAGE && HAVE_STRUCT_RUSAGE_RU_MAXRSS 
 4826     struct rusage rusage;
 
 4827     getrusage(RUSAGE_SELF, &rusage);
 
 4828     return (int64_t)rusage.ru_maxrss * 1024;
 
 4829 #elif HAVE_GETPROCESSMEMORYINFO 
 4831     PROCESS_MEMORY_COUNTERS memcounters;
 
 4832     proc = GetCurrentProcess();
 
 4833     memcounters.cb = 
sizeof(memcounters);
 
 4834     GetProcessMemoryInfo(proc, &memcounters, 
sizeof(memcounters));
 
 4835     return memcounters.PeakPagefileUsage;
 
 4854     setvbuf(stderr,
NULL,_IONBF,0); 
 
 4859     if(argc>1 && !strcmp(argv[1], 
"-d")){
 
 4899         int64_t utime, stime, rtime;
 
 4905                "bench: utime=%0.3fs stime=%0.3fs rtime=%0.3fs\n",
 
 4906                utime / 1000000.0, stime / 1000000.0, rtime / 1000000.0);
 
  
@ AV_BUFFERSRC_FLAG_PUSH
Immediately push the frame to the output.
 
static void sub2video_copy_rect(uint8_t *dst, int dst_linesize, int w, int h, AVSubtitleRect *r)
 
static void print_sdp(void)
 
int avcodec_close(AVCodecContext *avctx)
Close a given AVCodecContext and free all the data associated with it (but not the AVCodecContext its...
 
int avcodec_encode_subtitle(AVCodecContext *avctx, uint8_t *buf, int buf_size, const AVSubtitle *sub)
 
int frame_size
Number of samples per channel in an audio frame.
 
void av_packet_unref(AVPacket *pkt)
Wipe the packet.
 
static av_always_inline int pthread_join(pthread_t thread, void **value_ptr)
 
int64_t av_gettime_relative(void)
Get the current time in microseconds since some unspecified starting point.
 
enum AVCodecID av_codec_get_id(const struct AVCodecTag *const *tags, unsigned int tag)
Get the AVCodecID for the given codec tag tag.
 
#define AVFILTER_CMD_FLAG_ONE
Stop once a filter understood the command (for target=all for example), fast filters are favored auto...
 
#define AV_LOG_WARNING
Something somehow does not look correct.
 
static void ifilter_parameters_from_codecpar(InputFilter *ifilter, AVCodecParameters *par)
 
static int need_output(void)
 
static int check_output_constraints(InputStream *ist, OutputStream *ost)
 
AVPixelFormat
Pixel format.
 
AVRational av_buffersink_get_sample_aspect_ratio(const AVFilterContext *ctx)
 
static double psnr(double d)
 
#define AVERROR_EXPERIMENTAL
Requested feature is flagged experimental. Set strict_std_compliance if you really want to use it.
 
#define atomic_store(object, desired)
 
static void reset_eagain(void)
 
int avcodec_receive_packet(AVCodecContext *avctx, AVPacket *avpkt)
Read encoded data from the encoder.
 
static int seek_to_start(InputFile *ifile, AVFormatContext *is)
 
#define VSYNC_PASSTHROUGH
 
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later. That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another. Frame references ownership and permissions
 
int configure_filtergraph(FilterGraph *fg)
 
static volatile int ffmpeg_exited
 
enum AVPixelFormat(* get_format)(struct AVCodecContext *s, const enum AVPixelFormat *fmt)
callback to negotiate the pixelFormat
 
enum AVMediaType codec_type
General type of the encoded data.
 
const char *const forced_keyframes_const_names[]
 
uint64_t channel_layout
Audio channel layout.
 
int av_compare_ts(int64_t ts_a, AVRational tb_a, int64_t ts_b, AVRational tb_b)
Compare two timestamps each in its own time base.
 
unsigned int nb_stream_indexes
 
int av_fifo_generic_write(AVFifoBuffer *f, void *src, int size, int(*func)(void *, void *, int))
Feed data from a user-supplied callback to an AVFifoBuffer.
 
int av_bprint_finalize(AVBPrint *buf, char **ret_str)
Finalize a print buffer.
 
int methods
Bit set of AV_CODEC_HW_CONFIG_METHOD_* flags, describing the possible setup methods which can be used...
 
int av_frame_get_buffer(AVFrame *frame, int align)
Allocate new buffer(s) for audio or video data.
 
int sample_rate
samples per second
 
#define FFSWAP(type, a, b)
 
void av_bprint_init(AVBPrint *buf, unsigned size_init, unsigned size_max)
 
The official guide to swscale for confused that is
 
unsigned int nb_chapters
Number of chapters in AVChapter array.
 
int thread_safe_callbacks
Set by the client if its custom get_buffer() callback can be called synchronously from another thread...
 
This struct describes the properties of an encoded stream.
 
#define u(width, name, range_min, range_max)
 
#define AV_LOG_QUIET
Print no output.
 
const AVPixFmtDescriptor * av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
 
#define AVERROR_EOF
End of file.
 
uint8_t * data
The data buffer.
 
@ AV_FRAME_DATA_A53_CC
ATSC A53 Part 4 Closed Captions.
 
enum AVDiscard discard
Selects which packets can be discarded at will and do not need to be demuxed.
 
int attribute_align_arg av_buffersink_get_frame_flags(AVFilterContext *ctx, AVFrame *frame, int flags)
Get a frame with filtered data from sink and put it in frame.
 
static void sub2video_heartbeat(InputStream *ist, int64_t pts)
 
int avcodec_parameters_from_context(AVCodecParameters *par, const AVCodecContext *codec)
Fill the parameters struct based on the values from the supplied codec context.
 
void remove_avoptions(AVDictionary **a, AVDictionary *b)
 
float frame_drop_threshold
 
#define AV_TIME_BASE_Q
Internal time base represented as fractional value.
 
uint8_t pi<< 24) CONV_FUNC(AV_SAMPLE_FMT_S64, int64_t, AV_SAMPLE_FMT_U8,(uint64_t)((*(const uint8_t *) pi - 0x80U))<< 56) CONV_FUNC(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_U8,(*(const uint8_t *) pi - 0x80) *(1.0f/(1<< 7))) CONV_FUNC(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_U8,(*(const uint8_t *) pi - 0x80) *(1.0/(1<< 7))) CONV_FUNC(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S16,(*(const int16_t *) pi >>8)+0x80) CONV_FUNC(AV_SAMPLE_FMT_S64, int64_t, AV_SAMPLE_FMT_S16,(uint64_t)(*(const int16_t *) pi)<< 48) CONV_FUNC(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S16, *(const int16_t *) pi *(1.0f/(1<< 15))) CONV_FUNC(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S16, *(const int16_t *) pi *(1.0/(1<< 15))) CONV_FUNC(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S32,(*(const int32_t *) pi >>24)+0x80) CONV_FUNC(AV_SAMPLE_FMT_S64, int64_t, AV_SAMPLE_FMT_S32,(uint64_t)(*(const int32_t *) pi)<< 32) CONV_FUNC(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S32, *(const int32_t *) pi *(1.0f/(1U<< 31))) CONV_FUNC(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S32, *(const int32_t *) pi *(1.0/(1U<< 31))) CONV_FUNC(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S64,(*(const int64_t *) pi >>56)+0x80) CONV_FUNC(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S64, *(const int64_t *) pi *(1.0f/(INT64_C(1)<< 63))) CONV_FUNC(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S64, *(const int64_t *) pi *(1.0/(INT64_C(1)<< 63))) CONV_FUNC(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_FLT, av_clip_uint8(lrintf(*(const float *) pi *(1<< 7))+0x80)) CONV_FUNC(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_FLT, av_clip_int16(lrintf(*(const float *) pi *(1<< 15)))) CONV_FUNC(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_FLT, av_clipl_int32(llrintf(*(const float *) pi *(1U<< 31)))) CONV_FUNC(AV_SAMPLE_FMT_S64, int64_t, AV_SAMPLE_FMT_FLT, llrintf(*(const float *) pi *(INT64_C(1)<< 63))) CONV_FUNC(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_DBL, av_clip_uint8(lrint(*(const double *) pi *(1<< 7))+0x80)) CONV_FUNC(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_DBL, av_clip_int16(lrint(*(const double *) pi *(1<< 15)))) CONV_FUNC(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_DBL, av_clipl_int32(llrint(*(const double *) pi *(1U<< 31)))) CONV_FUNC(AV_SAMPLE_FMT_S64, int64_t, AV_SAMPLE_FMT_DBL, llrint(*(const double *) pi *(INT64_C(1)<< 63))) #define FMT_PAIR_FUNC(out, in) static conv_func_type *const fmt_pair_to_conv_functions[AV_SAMPLE_FMT_NB *AV_SAMPLE_FMT_NB]={ FMT_PAIR_FUNC(AV_SAMPLE_FMT_U8, AV_SAMPLE_FMT_U8), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_U8), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_U8), FMT_PAIR_FUNC(AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_U8), FMT_PAIR_FUNC(AV_SAMPLE_FMT_DBL, AV_SAMPLE_FMT_U8), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S64, AV_SAMPLE_FMT_U8), FMT_PAIR_FUNC(AV_SAMPLE_FMT_U8, AV_SAMPLE_FMT_S16), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_S16), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_S16), FMT_PAIR_FUNC(AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_S16), FMT_PAIR_FUNC(AV_SAMPLE_FMT_DBL, AV_SAMPLE_FMT_S16), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S64, AV_SAMPLE_FMT_S16), FMT_PAIR_FUNC(AV_SAMPLE_FMT_U8, AV_SAMPLE_FMT_S32), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_S32), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_S32), FMT_PAIR_FUNC(AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_S32), FMT_PAIR_FUNC(AV_SAMPLE_FMT_DBL, AV_SAMPLE_FMT_S32), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S64, AV_SAMPLE_FMT_S32), FMT_PAIR_FUNC(AV_SAMPLE_FMT_U8, AV_SAMPLE_FMT_FLT), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_FLT), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_FLT), FMT_PAIR_FUNC(AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_FLT), FMT_PAIR_FUNC(AV_SAMPLE_FMT_DBL, AV_SAMPLE_FMT_FLT), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S64, AV_SAMPLE_FMT_FLT), FMT_PAIR_FUNC(AV_SAMPLE_FMT_U8, AV_SAMPLE_FMT_DBL), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_DBL), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_DBL), FMT_PAIR_FUNC(AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_DBL), FMT_PAIR_FUNC(AV_SAMPLE_FMT_DBL, AV_SAMPLE_FMT_DBL), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S64, AV_SAMPLE_FMT_DBL), FMT_PAIR_FUNC(AV_SAMPLE_FMT_U8, AV_SAMPLE_FMT_S64), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_S64), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_S64), FMT_PAIR_FUNC(AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_S64), FMT_PAIR_FUNC(AV_SAMPLE_FMT_DBL, AV_SAMPLE_FMT_S64), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S64, AV_SAMPLE_FMT_S64), };static void cpy1(uint8_t **dst, const uint8_t **src, int len){ memcpy(*dst, *src, len);} static void cpy2(uint8_t **dst, const uint8_t **src, int len){ memcpy(*dst, *src, 2 *len);} static void cpy4(uint8_t **dst, const uint8_t **src, int len){ memcpy(*dst, *src, 4 *len);} static void cpy8(uint8_t **dst, const uint8_t **src, int len){ memcpy(*dst, *src, 8 *len);} AudioConvert *swri_audio_convert_alloc(enum AVSampleFormat out_fmt, enum AVSampleFormat in_fmt, int channels, const int *ch_map, int flags) { AudioConvert *ctx;conv_func_type *f=fmt_pair_to_conv_functions[av_get_packed_sample_fmt(out_fmt)+AV_SAMPLE_FMT_NB *av_get_packed_sample_fmt(in_fmt)];if(!f) return NULL;ctx=av_mallocz(sizeof(*ctx));if(!ctx) return NULL;if(channels==1){ in_fmt=av_get_planar_sample_fmt(in_fmt);out_fmt=av_get_planar_sample_fmt(out_fmt);} ctx->channels=channels;ctx->conv_f=f;ctx->ch_map=ch_map;if(in_fmt==AV_SAMPLE_FMT_U8||in_fmt==AV_SAMPLE_FMT_U8P) memset(ctx->silence, 0x80, sizeof(ctx->silence));if(out_fmt==in_fmt &&!ch_map) { switch(av_get_bytes_per_sample(in_fmt)){ case 1:ctx->simd_f=cpy1;break;case 2:ctx->simd_f=cpy2;break;case 4:ctx->simd_f=cpy4;break;case 8:ctx->simd_f=cpy8;break;} } if(HAVE_X86ASM &&1) swri_audio_convert_init_x86(ctx, out_fmt, in_fmt, channels);if(ARCH_ARM) swri_audio_convert_init_arm(ctx, out_fmt, in_fmt, channels);if(ARCH_AARCH64) swri_audio_convert_init_aarch64(ctx, out_fmt, in_fmt, channels);return ctx;} void swri_audio_convert_free(AudioConvert **ctx) { av_freep(ctx);} int swri_audio_convert(AudioConvert *ctx, AudioData *out, AudioData *in, int len) { int ch;int off=0;const int os=(out->planar ? 1 :out->ch_count) *out->bps;unsigned misaligned=0;av_assert0(ctx->channels==out->ch_count);if(ctx->in_simd_align_mask) { int planes=in->planar ? in->ch_count :1;unsigned m=0;for(ch=0;ch< planes;ch++) m|=(intptr_t) in->ch[ch];misaligned|=m &ctx->in_simd_align_mask;} if(ctx->out_simd_align_mask) { int planes=out->planar ? out->ch_count :1;unsigned m=0;for(ch=0;ch< planes;ch++) m|=(intptr_t) out->ch[ch];misaligned|=m &ctx->out_simd_align_mask;} if(ctx->simd_f &&!ctx->ch_map &&!misaligned){ off=len &~15;av_assert1(off >=0);av_assert1(off<=len);av_assert2(ctx->channels==SWR_CH_MAX||!in->ch[ctx->channels]);if(off >0){ if(out->planar==in->planar){ int planes=out->planar ? out->ch_count :1;for(ch=0;ch< planes;ch++){ ctx->simd_f(out-> ch ch
 
static int transcode_step(void)
Run a single step of transcoding.
 
int av_bsf_send_packet(AVBSFContext *ctx, AVPacket *pkt)
Submit a packet for filtering.
 
void av_frame_free(AVFrame **frame)
Free the frame and any dynamically allocated objects in it, e.g.
 
int64_t start_time
start time in microseconds == AV_TIME_BASE units
 
static av_cold int end(AVCodecContext *avctx)
 
int ffmpeg_parse_options(int argc, char **argv)
 
void av_get_channel_layout_string(char *buf, int buf_size, int nb_channels, uint64_t channel_layout)
Return a description of a channel layout.
 
This structure describes decoded (raw) audio or video data.
 
@ AV_THREAD_MESSAGE_NONBLOCK
Perform non-blocking operation.
 
AVStream ** streams
A list of all streams in the file.
 
int64_t pts
Presentation timestamp in time_base units (time when frame should be shown to user).
 
int capabilities
Codec capabilities.
 
int avcodec_decode_subtitle2(AVCodecContext *avctx, AVSubtitle *sub, int *got_sub_ptr, AVPacket *avpkt)
Decode a subtitle message.
 
static BenchmarkTimeStamps current_time
 
int depth
Number of bits in the component.
 
static void finish_output_stream(OutputStream *ost)
 
enum AVFieldOrder field_order
Field order.
 
int top_field_first
If the content is interlaced, is top field displayed first.
 
#define ATOMIC_VAR_INIT(value)
 
int attribute_align_arg av_buffersrc_add_frame(AVFilterContext *ctx, AVFrame *frame)
Add a frame to the buffer source.
 
AVRational avg_frame_rate
Average framerate.
 
int64_t pkt_duration
duration of the corresponding packet, expressed in AVStream->time_base units, 0 if unknown.
 
#define AV_DICT_IGNORE_SUFFIX
Return first entry in a dictionary whose first part corresponds to the search key,...
 
uint8_t * subtitle_header
Header containing style information for text subtitles.
 
static int transcode(void)
 
#define AV_LOG_VERBOSE
Detailed information.
 
AVIOContext * progress_avio
 
static void do_audio_out(OutputFile *of, OutputStream *ost, AVFrame *frame)
 
void av_display_rotation_set(int32_t matrix[9], double angle)
Initialize a transformation matrix describing a pure counterclockwise rotation by the specified angle...
 
int64_t duration
Duration of this packet in AVStream->time_base units, 0 if unknown.
 
uint32_t codec_tag
Additional information about the codec (corresponds to the AVI FOURCC).
 
filter_frame For filters that do not use the this method is called when a frame is pushed to the filter s input It can be called at any time except in a reentrant way If the input frame is enough to produce then the filter should push the output frames on the output link immediately As an exception to the previous rule if the input frame is enough to produce several output frames then the filter needs output only at least one per link The additional frames can be left buffered in the filter
 
int flags
Frame flags, a combination of AV_FRAME_FLAGS.
 
#define AV_CODEC_FLAG_PSNR
error[?] variables will be set during encoding.
 
static int check_recording_time(OutputStream *ost)
 
int av_read_frame(AVFormatContext *s, AVPacket *pkt)
Return the next frame of a stream.
 
static int decode_audio(InputStream *ist, AVPacket *pkt, int *got_output, int *decode_failed)
 
int av_fifo_generic_read(AVFifoBuffer *f, void *dest, int buf_size, void(*func)(void *, void *, int))
Feed data from an AVFifoBuffer to a user-supplied callback.
 
const int program_birth_year
program birth year, defined by the program for show_banner()
 
AVBufferRef * av_buffersink_get_hw_frames_ctx(const AVFilterContext *ctx)
 
#define AV_CODEC_FLAG_INTERLACED_ME
interlaced motion estimation
 
static void flush_encoders(void)
 
int64_t avio_size(AVIOContext *s)
Get the filesize.
 
@ AV_BUFFERSRC_FLAG_KEEP_REF
Keep a reference to the frame.
 
#define AV_PKT_FLAG_KEY
The packet contains a keyframe.
 
static int get_input_packet(InputFile *f, AVPacket *pkt)
 
static void term_exit_sigsafe(void)
 
The bitstream filter state.
 
#define ECHO(name, type, min, max)
 
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
 
Callback for checking whether to abort blocking functions.
 
void avfilter_graph_free(AVFilterGraph **graph)
Free a graph, destroy its links, and set *graph to NULL.
 
static void do_video_out(OutputFile *of, OutputStream *ost, AVFrame *next_picture, double sync_ipts)
 
int av_expr_parse(AVExpr **expr, const char *s, const char *const *const_names, const char *const *func1_names, double(*const *funcs1)(void *, double), const char *const *func2_names, double(*const *funcs2)(void *, double, double), int log_offset, void *log_ctx)
Parse an expression.
 
void exit_program(int ret)
Wraps exit with a program-specific cleanup routine.
 
void avformat_close_input(AVFormatContext **s)
Close an opened input AVFormatContext.
 
static int got_eagain(void)
 
static int ifilter_send_eof(InputFilter *ifilter, int64_t pts)
 
AVIOInterruptCB interrupt_callback
Custom interrupt callbacks for the I/O layer.
 
static int nb_frames_drop
 
void print_error(const char *filename, int err)
Print an error message to stderr, indicating filename and a human readable description of the error c...
 
void av_buffersink_set_frame_size(AVFilterContext *ctx, unsigned frame_size)
Set the frame size for an audio buffer sink.
 
float dts_delta_threshold
 
int avio_open2(AVIOContext **s, const char *url, int flags, const AVIOInterruptCB *int_cb, AVDictionary **options)
Create and initialize a AVIOContext for accessing the resource indicated by url.
 
const struct AVCodec * codec
 
#define AV_PIX_FMT_FLAG_HWACCEL
Pixel format is an HW accelerated format.
 
enum AVDiscard discard
selects which program to discard and which to feed to the caller
 
static av_always_inline int64_t avio_tell(AVIOContext *s)
ftell() equivalent for AVIOContext.
 
static int check_init_output_file(OutputFile *of, int file_index)
 
#define AV_BPRINT_SIZE_AUTOMATIC
 
int key_frame
1 -> keyframe, 0-> not
 
int flags
AV_CODEC_FLAG_*.
 
static int sub2video_get_blank_frame(InputStream *ist)
 
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf type
 
int av_thread_message_queue_recv(AVThreadMessageQueue *mq, void *msg, unsigned flags)
Receive a message from the queue.
 
int hw_device_setup_for_decode(InputStream *ist)
 
#define us(width, name, range_min, range_max, subs,...)
 
@ AV_PKT_DATA_DISPLAYMATRIX
This side data contains a 3x3 transformation matrix describing an affine transformation that needs to...
 
attribute_deprecated int avcodec_copy_context(AVCodecContext *dest, const AVCodecContext *src)
Copy the settings of the source AVCodecContext into the destination AVCodecContext.
 
@ AV_CODEC_ID_MP3
preferred ID for decoding MPEG audio layer 1, 2 or 3
 
int64_t duration
Decoding: duration of the stream, in stream time base.
 
int av_codec_get_tag2(const struct AVCodecTag *const *tags, enum AVCodecID id, unsigned int *tag)
Get the codec tag for the given codec id.
 
int av_reduce(int *dst_num, int *dst_den, int64_t num, int64_t den, int64_t max)
Reduce a fraction.
 
void av_expr_free(AVExpr *e)
Free a parsed expression previously created with av_expr_parse().
 
int avformat_network_init(void)
Do global initialization of network libraries.
 
#define AV_CODEC_FLAG_INTERLACED_DCT
Use interlaced DCT.
 
static int init_output_stream_streamcopy(OutputStream *ost)
 
void avsubtitle_free(AVSubtitle *sub)
Free all allocated data in the given subtitle struct.
 
#define AV_DICT_DONT_STRDUP_VAL
Take ownership of a value that's been allocated with av_malloc() or another memory allocation functio...
 
AVFrame * av_frame_alloc(void)
Allocate an AVFrame and set its fields to default values.
 
@ AV_CODEC_ID_DVB_SUBTITLE
 
int(* get_buffer2)(struct AVCodecContext *s, AVFrame *frame, int flags)
This callback is called at the beginning of each frame to get data buffer(s) for it.
 
static void ffmpeg_cleanup(int ret)
 
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
 
int av_fifo_space(const AVFifoBuffer *f)
Return the amount of space in bytes in the AVFifoBuffer, that is the amount of data you can write int...
 
#define AV_PKT_FLAG_CORRUPT
The packet content is corrupted.
 
void av_dump_format(AVFormatContext *ic, int index, const char *url, int is_output)
Print detailed information about the input or output format, such as duration, bitrate,...
 
int av_thread_message_queue_send(AVThreadMessageQueue *mq, void *msg, unsigned flags)
Send a message on the queue.
 
static OutputStream * choose_output(void)
Select the output stream to process.
 
int64_t first_dts
Timestamp corresponding to the last dts sync point.
 
#define media_type_string
 
AVRational av_buffersink_get_frame_rate(const AVFilterContext *ctx)
 
uint8_t * av_stream_new_side_data(AVStream *stream, enum AVPacketSideDataType type, int size)
Allocate new information from stream.
 
AVDictionaryEntry * av_dict_get(const AVDictionary *m, const char *key, const AVDictionaryEntry *prev, int flags)
Get a dictionary entry with matching key.
 
int av_opt_set_dict(void *obj, AVDictionary **options)
Set all the options from a given dictionary on an object.
 
int has_b_frames
Size of the frame reordering buffer in the decoder.
 
static int init_output_stream(OutputStream *ost, char *error, int error_len)
 
InputStream ** input_streams
 
This struct describes the properties of a single codec described by an AVCodecID.
 
int global_quality
Global quality for codecs which cannot change it per frame.
 
static BenchmarkTimeStamps get_benchmark_time_stamps(void)
 
static int ifilter_has_all_input_formats(FilterGraph *fg)
 
static void close_output_stream(OutputStream *ost)
 
int av_seek_frame(AVFormatContext *s, int stream_index, int64_t timestamp, int flags)
Seek to the keyframe at timestamp.
 
void * av_realloc_array(void *ptr, size_t nmemb, size_t size)
 
AVRational sample_aspect_ratio
Video only.
 
int channels
number of audio channels, only used for audio.
 
void sub2video_update(InputStream *ist, AVSubtitle *sub)
 
int ticks_per_frame
For some codecs, the time base is closer to the field rate than the frame rate.
 
static double av_q2d(AVRational a)
Convert an AVRational to a double.
 
static InputStream * get_input_stream(OutputStream *ost)
 
int av_buffersink_get_format(const AVFilterContext *ctx)
 
int avcodec_receive_frame(AVCodecContext *avctx, AVFrame *frame)
Return decoded output data from a decoder.
 
AVRational av_buffersink_get_time_base(const AVFilterContext *ctx)
 
#define av_assert0(cond)
assert() equivalent, that is always enabled.
 
static void do_streamcopy(InputStream *ist, OutputStream *ost, const AVPacket *pkt)
 
static enum AVPixelFormat pix_fmts[]
 
#define AVIO_FLAG_WRITE
write-only
 
struct OutputStream * ost
 
int bits_per_raw_sample
Bits per sample/pixel of internal libavcodec pixel/sample format.
 
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
 
static void abort_codec_experimental(AVCodec *c, int encoder)
 
double av_expr_eval(AVExpr *e, const double *const_values, void *opaque)
Evaluate a previously parsed expression.
 
AVFrame * av_frame_clone(const AVFrame *src)
Create a new frame that references the same data as src.
 
int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq)
Rescale a 64-bit integer by 2 rational numbers.
 
enum AVPixelFormat pix_fmt
A hardware pixel format which the codec can use.
 
int64_t pts
Same as packet pts, in AV_TIME_BASE.
 
static enum AVPixelFormat pix_fmt
 
s EdgeDetect Foobar g libavfilter vf_edgedetect c libavfilter vf_foobar c edit libavfilter and add an entry for foobar following the pattern of the other filters edit libavfilter allfilters and add an entry for foobar following the pattern of the other filters configure make j< whatever > ffmpeg ffmpeg i you should get a foobar png with Lena edge detected That s your new playground is ready Some little details about what s going on
 
const char * av_hwdevice_get_type_name(enum AVHWDeviceType type)
Get the string name of an AVHWDeviceType.
 
static int compare_int64(const void *a, const void *b)
 
const char * avcodec_get_name(enum AVCodecID id)
Get the name of a codec.
 
void av_bsf_free(AVBSFContext **ctx)
Free a bitstream filter context and everything associated with it; write NULL into the supplied point...
 
uint64_t error[AV_NUM_DATA_POINTERS]
error
 
int av_usleep(unsigned usec)
Sleep for a period of time.
 
@ AVMEDIA_TYPE_DATA
Opaque data information usually continuous.
 
#define atomic_load(object)
 
int av_fifo_realloc2(AVFifoBuffer *f, unsigned int new_size)
Resize an AVFifoBuffer.
 
void assert_avoptions(AVDictionary *m)
 
uint8_t * av_packet_new_side_data(AVPacket *pkt, enum AVPacketSideDataType type, int size)
Allocate new information of a packet.
 
static int process_input_packet(InputStream *ist, const AVPacket *pkt, int no_eof)
 
int64_t av_rescale_delta(AVRational in_tb, int64_t in_ts, AVRational fs_tb, int duration, int64_t *last, AVRational out_tb)
Rescale a timestamp while preserving known durations.
 
static int command(AVFilterContext *ctx, const char *cmd, const char *arg, char *res, int res_len, int flags)
 
static int process_input(int file_index)
 
av_warn_unused_result int avformat_write_header(AVFormatContext *s, AVDictionary **options)
Allocate the stream private data and write the stream header to an output media file.
 
uint8_t * av_packet_get_side_data(const AVPacket *pkt, enum AVPacketSideDataType type, int *size)
Get side information from packet.
 
const AVOption * av_opt_find(void *obj, const char *name, const char *unit, int opt_flags, int search_flags)
Look for an option in an object.
 
static av_always_inline int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg)
 
int props
Codec properties, a combination of AV_CODEC_PROP_* flags.
 
#define FFABS(a)
Absolute value, Note, INT_MIN / INT64_MIN result in undefined behavior as they are not representable ...
 
int repeat_pict
This field is used for proper frame duration computation in lavf.
 
OutputStream ** output_streams
 
static int transcode_from_filter(FilterGraph *graph, InputStream **best_ist)
Perform a step of transcoding for the specified filter graph.
 
@ AVDISCARD_ALL
discard all
 
int av_log_get_level(void)
Get the current log level.
 
#define av_realloc_f(p, o, n)
 
void init_dynload(void)
Initialize dynamic library loading.
 
AVBufferRef * buf
A reference to the reference-counted buffer where the packet data is stored.
 
AVCodecParameters * codecpar
Codec parameters associated with this stream.
 
#define LIBAVUTIL_VERSION_INT
 
static void print_final_stats(int64_t total_size)
 
Describe the class of an AVClass context structure.
 
AVRational time_base
This is the fundamental unit of time (in seconds) in terms of which frame timestamps are represented.
 
static void flush(AVCodecContext *avctx)
 
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
 
void av_buffer_unref(AVBufferRef **buf)
Free a given reference and automatically free the buffer if there are no more references to it.
 
void avcodec_parameters_free(AVCodecParameters **par)
Free an AVCodecParameters instance and everything associated with it and write NULL to the supplied p...
 
int main(int argc, char **argv)
 
static void update_benchmark(const char *fmt,...)
 
static int send_frame_to_filters(InputStream *ist, AVFrame *decoded_frame)
 
static int decode_video(InputStream *ist, AVPacket *pkt, int *got_output, int64_t *duration_pts, int eof, int *decode_failed)
 
void avcodec_free_context(AVCodecContext **avctx)
Free the codec context and everything associated with it and write NULL to the provided pointer.
 
Rational number (pair of numerator and denominator).
 
static int64_t getmaxrss(void)
 
int frame_bits_per_raw_sample
 
enum AVPacketSideDataType type
 
static int check_keyboard_interaction(int64_t cur_time)
 
const char * av_default_item_name(void *ptr)
Return the context name.
 
@ AV_PICTURE_TYPE_I
Intra.
 
AVIOContext * pb
I/O context.
 
void av_log_set_flags(int arg)
 
#define AV_CODEC_PROP_BITMAP_SUB
Subtitle codec is bitmap based Decoded AVSubtitle data can be read from the AVSubtitleRect->pict fiel...
 
static AVRational duration_max(int64_t tmp, int64_t *duration, AVRational tmp_time_base, AVRational time_base)
 
unsigned int * stream_index
 
static int main_return_code
 
static FILE * vstats_file
 
@ AV_ROUND_NEAR_INF
Round to nearest and halfway cases away from zero.
 
#define AV_CODEC_CAP_VARIABLE_FRAME_SIZE
Audio encoder supports receiving a different number of samples in each call.
 
static int transcode_init(void)
 
int avfilter_graph_request_oldest(AVFilterGraph *graph)
Request a frame on the oldest sink link.
 
static enum AVPixelFormat get_format(AVCodecContext *s, const enum AVPixelFormat *pix_fmts)
 
#define AV_DICT_DONT_OVERWRITE
Don't overwrite existing entries.
 
int avcodec_open2(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options)
Initialize the AVCodecContext to use the given AVCodec.
 
static void sub2video_push_ref(InputStream *ist, int64_t pts)
 
static void close_all_output_streams(OutputStream *ost, OSTFinished this_stream, OSTFinished others)
 
static volatile int received_nb_signals
 
uint64_t av_buffersink_get_channel_layout(const AVFilterContext *ctx)
 
void av_packet_move_ref(AVPacket *dst, AVPacket *src)
Move every field in src to dst and reset src.
 
Undefined Behavior In the C some operations are like signed integer dereferencing freed accessing outside allocated Undefined Behavior must not occur in a C it is not safe even if the output of undefined operations is unused The unsafety may seem nit picking but Optimizing compilers have in fact optimized code on the assumption that no undefined Behavior occurs Optimizing code based on wrong assumptions can and has in some cases lead to effects beyond the output of computations The signed integer overflow problem in speed critical code Code which is highly optimized and works with signed integers sometimes has the problem that often the output of the computation does not c
 
int sample_rate
Audio only.
 
ff_const59 struct AVOutputFormat * oformat
The output container format.
 
int av_opt_set_int(void *obj, const char *name, int64_t val, int search_flags)
 
static void error(const char *err)
 
int64_t nb_frames
number of frames in this stream if known or 0
 
int64_t best_effort_timestamp
frame timestamp estimated using various heuristics, in stream time base
 
unsigned int nb_streams
Number of elements in AVFormatContext.streams.
 
static int decode_interrupt_cb(void *ctx)
 
AVRational time_base
This is the fundamental unit of time (in seconds) in terms of which frame timestamps are represented.
 
int av_buffersrc_close(AVFilterContext *ctx, int64_t pts, unsigned flags)
Close the buffer source after EOF.
 
#define FF_DEBUG_DCT_COEFF
 
const OptionDef options[]
 
char * stats_out
pass1 encoding statistics output buffer
 
enum AVPictureType pict_type
Picture type of the frame.
 
#define av_ts2timestr(ts, tb)
Convenience macro, the return value should be used only directly in function arguments but never stan...
 
void av_log_set_callback(void(*callback)(void *, int, const char *, va_list))
Set the logging callback.
 
@ AVDISCARD_DEFAULT
discard useless packets like 0 size packets in avi
 
int av_frame_ref(AVFrame *dst, const AVFrame *src)
Set up a new reference to the data described by the source frame.
 
OutputFile ** output_files
 
static void parse_forced_key_frames(char *kf, OutputStream *ost, AVCodecContext *avctx)
 
int quality
quality (between 1 (good) and FF_LAMBDA_MAX (bad))
 
#define av_err2str(errnum)
Convenience macro, the return value should be used only directly in function arguments but never stan...
 
static volatile int received_sigterm
 
static int64_t start_time
 
char * url
input or output URL.
 
enum AVSampleFormat sample_fmt
audio sample format
 
static int send_filter_eof(InputStream *ist)
 
AVRational pkt_timebase
Timebase in which pkt_dts/pts and AVPacket.dts/pts are.
 
const AVCodecDefault * defaults
Private codec-specific defaults.
 
void uninit_opts(void)
Uninitialize the cmdutils option system, in particular free the *_opts contexts and their contents.
 
static AVRational av_make_q(int num, int den)
Create an AVRational.
 
static uint8_t * subtitle_out
 
int avfilter_graph_queue_command(AVFilterGraph *graph, const char *target, const char *cmd, const char *arg, int flags, double ts)
Queue a command for one or more filter instances.
 
#define AV_NOPTS_VALUE
Undefined timestamp value.
 
int hwaccel_decode_init(AVCodecContext *avctx)
 
AVRational av_stream_get_codec_timebase(const AVStream *st)
Get the internal codec timebase from a stream.
 
#define FFDIFFSIGN(x, y)
Comparator.
 
printf("static const uint8_t my_array[100] = {\n")
 
int format
format of the frame, -1 if unknown or unset Values correspond to enum AVPixelFormat for video frames,...
 
@ AV_PICTURE_TYPE_NONE
Undefined.
 
AVRational sample_aspect_ratio
sample aspect ratio (0 if unknown)
 
uint32_t end_display_time
 
void av_frame_remove_side_data(AVFrame *frame, enum AVFrameSideDataType type)
If side data of the supplied type exists in the frame, free it and remove it from the frame.
 
int64_t dts
Decompression timestamp in AVStream->time_base units; the time at which the packet is decompressed.
 
void avio_write(AVIOContext *s, const unsigned char *buf, int size)
 
#define AV_CODEC_FLAG_PASS2
Use internal 2pass ratecontrol in second pass mode.
 
The reader does not expect b to be semantically here and if the code is changed by maybe adding a a division or other the signedness will almost certainly be mistaken To avoid this confusion a new type was SUINT is the C unsigned type but it holds a signed int to use the same example SUINT a
 
static unsigned dup_warning
 
int av_sdp_create(AVFormatContext *ac[], int n_files, char *buf, int size)
Generate an SDP for an RTP session.
 
int flags
A combination of AV_PKT_FLAG values.
 
int av_packet_make_refcounted(AVPacket *pkt)
Ensure the data described by a given packet is reference counted.
 
void av_dict_free(AVDictionary **pm)
Free all the memory allocated for an AVDictionary struct and all keys and values.
 
static int get_buffer(AVCodecContext *s, AVFrame *frame, int flags)
 
void av_packet_rescale_ts(AVPacket *pkt, AVRational tb_src, AVRational tb_dst)
Convert valid timing fields (timestamps / durations) in a packet from one timebase to another.
 
enum AVMediaType av_buffersink_get_type(const AVFilterContext *ctx)
 
static int ifilter_send_frame(InputFilter *ifilter, AVFrame *frame)
 
@ SUBTITLE_BITMAP
A bitmap, pict will be set.
 
#define AV_LOG_INFO
Standard information.
 
int av_thread_message_queue_alloc(AVThreadMessageQueue **mq, unsigned nelem, unsigned elsize)
Allocate a new message queue.
 
int channels
number of audio channels
 
static int decode(AVCodecContext *avctx, AVFrame *frame, int *got_frame, AVPacket *pkt)
 
AVPacketSideData * side_data
An array of side data that applies to the whole stream (i.e.
 
int guess_input_channel_layout(InputStream *ist)
 
void show_banner(int argc, char **argv, const OptionDef *options)
Print the program banner to stderr.
 
static void write_packet(OutputFile *of, AVPacket *pkt, OutputStream *ost, int unqueue)
 
static void do_subtitle_out(OutputFile *of, OutputStream *ost, AVSubtitle *sub)
 
int av_find_nearest_q_idx(AVRational q, const AVRational *q_list)
Find the value in a list of rationals nearest a given reference rational.
 
char av_get_picture_type_char(enum AVPictureType pict_type)
Return a single letter to describe the given picture type pict_type.
 
void register_exit(void(*cb)(int ret))
Register a program-specific cleanup routine.
 
static void do_video_stats(OutputStream *ost, int frame_size)
 
int interlaced_frame
The content of the picture is interlaced.
 
int avcodec_default_get_buffer2(AVCodecContext *s, AVFrame *frame, int flags)
The default callback for AVCodecContext.get_buffer2().
 
int avcodec_send_packet(AVCodecContext *avctx, const AVPacket *avpkt)
Supply raw packet data as input to a decoder.
 
int av_buffersink_get_w(const AVFilterContext *ctx)
 
int avio_closep(AVIOContext **s)
Close the resource accessed by the AVIOContext *s, free it and set the pointer pointing to it to NULL...
 
int av_write_trailer(AVFormatContext *s)
Write the stream trailer to an output media file and free the file private data.
 
void av_log_set_level(int level)
Set the log level.
 
int nb_samples
number of audio samples (per channel) described by this frame
 
#define DECODING_FOR_FILTER
 
#define i(width, name, range_min, range_max)
 
int64_t pts
Presentation timestamp in AVStream->time_base units; the time at which the decompressed packet will b...
 
#define AV_FRAME_FLAG_CORRUPT
The frame data may be corrupted, e.g.
 
int av_get_bytes_per_sample(enum AVSampleFormat sample_fmt)
Return number of bytes per sample.
 
static void sub2video_flush(InputStream *ist)
 
static AVBufferRef * hw_device_ctx
 
const AVCodecDescriptor * avcodec_descriptor_get(enum AVCodecID id)
 
int avcodec_parameters_to_context(AVCodecContext *codec, const AVCodecParameters *par)
Fill the codec context based on the values from the supplied codec parameters.
 
#define AV_TIME_BASE
Internal time base represented as integer.
 
int block_align
Audio only.
 
int attribute_align_arg av_buffersrc_add_frame_flags(AVFilterContext *ctx, AVFrame *frame, int flags)
Add a frame to the buffer source.
 
#define av_malloc_array(a, b)
 
void av_thread_message_queue_set_err_send(AVThreadMessageQueue *mq, int err)
Set the sending error code.
 
static void sigterm_handler(int sig)
 
#define av_assert1(cond)
assert() equivalent, that does not lie in speed critical code.
 
void av_frame_unref(AVFrame *frame)
Unreference all the buffers referenced by frame and reset the frame fields.
 
int av_get_audio_frame_duration(AVCodecContext *avctx, int frame_bytes)
Return audio frame duration.
 
static int transcode_subtitles(InputStream *ist, AVPacket *pkt, int *got_output, int *decode_failed)
 
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
 
New fields can be added to the end with minor version bumps.
 
const char * name
Name of the codec implementation.
 
static av_always_inline AVRational av_inv_q(AVRational q)
Invert a rational.
 
enum AVChromaLocation chroma_sample_location
This defines the location of chroma samples.
 
FilterGraph ** filtergraphs
 
int64_t av_rescale(int64_t a, int64_t b, int64_t c)
Rescale a 64-bit integer with rounding to nearest.
 
const AVIOInterruptCB int_cb
 
uint64_t * channel_layouts
 
int avcodec_send_frame(AVCodecContext *avctx, const AVFrame *frame)
Supply a raw video or audio frame to the encoder.
 
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx.
 
enum AVFieldOrder field_order
Video only.
 
void parse_loglevel(int argc, char **argv, const OptionDef *options)
Find the '-loglevel' option in the command line args and apply it.
 
int av_buffersink_get_h(const AVFilterContext *ctx)
 
This struct describes a set or pool of "hardware" frames (i.e.
 
int av_opt_eval_flags(void *obj, const AVOption *o, const char *val, int *flags_out)
 
int disposition
AV_DISPOSITION_* bit field.
 
#define AV_BUFFERSINK_FLAG_NO_REQUEST
Tell av_buffersink_get_buffer_ref() not to request a frame from its input.
 
static int64_t decode_error_stat[2]
 
int id
Format-specific stream ID.
 
int decode_error_flags
decode error flags of the frame, set to a combination of FF_DECODE_ERROR_xxx flags if the decoder pro...
 
#define AV_LOG_FATAL
Something went wrong and recovery is not possible.
 
void avcodec_flush_buffers(AVCodecContext *avctx)
Reset the internal decoder state / flush internal buffers.
 
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
 
static void output_packet(OutputFile *of, AVPacket *pkt, OutputStream *ost, int eof)
 
these buffered frames must be flushed immediately if a new input produces new the filter must not call request_frame to get more It must just process the frame or queue it The task of requesting more frames is left to the filter s request_frame method or the application If a filter has several the filter must be ready for frames arriving randomly on any input any filter with several inputs will most likely require some kind of queuing mechanism It is perfectly acceptable to have a limited queue and to drop frames when the inputs are too unbalanced request_frame For filters that do not use the this method is called when a frame is wanted on an output For a it should directly call filter_frame on the corresponding output For a if there are queued frames already one of these frames should be pushed If the filter should request a frame on one of its repeatedly until at least one frame has been pushed Return or at least make progress towards producing a frame
 
size_t av_strlcat(char *dst, const char *src, size_t size)
Append the string src to the string dst, but to a total length of no more than size - 1 bytes,...
 
int nb_side_data
The number of elements in the AVStream.side_data array.
 
#define AV_CODEC_PROP_TEXT_SUB
Subtitle codec is text based.
 
void * opaque
Private data of the user, can be used to carry app specific stuff.
 
static int init_output_stream_encode(OutputStream *ost)
 
void hw_device_free_all(void)
 
void av_bprintf(AVBPrint *buf, const char *fmt,...)
 
AVRational sample_aspect_ratio
Sample aspect ratio for the video frame, 0/1 if unknown/unspecified.
 
#define AV_LOG_SKIP_REPEATED
Skip repeated messages, this requires the user app to use av_log() instead of (f)printf as the 2 woul...
 
#define FF_ARRAY_ELEMS(a)
 
#define AV_DICT_MATCH_CASE
Only get an entry with exact-case key match.
 
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_RL32
 
int avio_printf(AVIOContext *s, const char *fmt,...) av_printf_format(2
 
int(* init)(AVCodecContext *s)
 
int avformat_network_deinit(void)
Undo the initialization done by avformat_network_init.
 
int ifilter_parameters_from_frame(InputFilter *ifilter, const AVFrame *frame)
 
const char * av_get_media_type_string(enum AVMediaType media_type)
Return a string describing the media_type enum, NULL if media_type is unknown.
 
main external API structure.
 
int index
stream index in AVFormatContext
 
static atomic_int transcode_init_done
 
int avformat_transfer_internal_stream_timing_info(const AVOutputFormat *ofmt, AVStream *ost, const AVStream *ist, enum AVTimebaseSource copy_tb)
Transfer internal timing information from one stream to another.
 
int hw_device_setup_for_encode(OutputStream *ost)
 
int av_buffersink_get_sample_rate(const AVFilterContext *ctx)
 
int av_bsf_init(AVBSFContext *ctx)
Prepare the filter for use, after all the parameters and options have been set.
 
static void report_new_stream(int input_index, AVPacket *pkt)
 
static void check_decode_result(InputStream *ist, int *got_output, int ret)
 
void avformat_free_context(AVFormatContext *s)
Free an AVFormatContext and all its streams.
 
int av_buffersink_get_channels(const AVFilterContext *ctx)
 
int av_bsf_receive_packet(AVBSFContext *ctx, AVPacket *pkt)
Retrieve a filtered packet.
 
AVComponentDescriptor comp[4]
Parameters that describe how pixels are packed.
 
AVRational r_frame_rate
Real base framerate of the stream.
 
const char program_name[]
program name, defined by the program for show_version().
 
#define AV_CODEC_CAP_DELAY
Encoder or decoder requires flushing with NULL input at the end in order to give the complete and cor...
 
AVRational av_mul_q(AVRational b, AVRational c)
Multiply two rationals.
 
AVBufferRef * av_buffer_ref(AVBufferRef *buf)
Create a new reference to an AVBuffer.
 
const AVCodecHWConfig * avcodec_get_hw_config(const AVCodec *codec, int index)
Retrieve supported hardware configurations for a codec.
 
static void print_report(int is_last_report, int64_t timer_start, int64_t cur_time)
 
#define AV_CODEC_CAP_PARAM_CHANGE
Codec supports changed parameters at any point.
 
enum AVMediaType codec_type
 
unsigned av_buffersrc_get_nb_failed_requests(AVFilterContext *buffer_src)
Get the number of failed requests.
 
#define AV_CODEC_FLAG_BITEXACT
Use only bitexact stuff (except (I)DCT).
 
int64_t av_get_default_channel_layout(int nb_channels)
Return default channel layout for a given number of channels.
 
int video_delay
Video only.
 
int av_fifo_size(const AVFifoBuffer *f)
Return the amount of data in bytes in the AVFifoBuffer, that is the amount of data you can read from ...
 
static void set_encoder_id(OutputFile *of, OutputStream *ost)
 
Descriptor that unambiguously describes how the bits of a pixel are stored in the up to 4 data planes...
 
int void avio_flush(AVIOContext *s)
Force flushing of buffered data.
 
void av_fifo_freep(AVFifoBuffer **f)
Free an AVFifoBuffer and reset pointer to NULL.
 
AVRational av_add_q(AVRational b, AVRational c)
Add two rationals.
 
@ AV_ROUND_PASS_MINMAX
Flag telling rescaling functions to pass INT64_MIN/MAX through unchanged, avoiding special cases for ...
 
enum AVCodecID codec_id
Specific type of the encoded data (the codec used).
 
This structure stores compressed data.
 
void av_thread_message_queue_free(AVThreadMessageQueue **mq)
Free a message queue.
 
int av_interleaved_write_frame(AVFormatContext *s, AVPacket *pkt)
Write a packet to an output media file ensuring correct interleaving.
 
int av_dict_set(AVDictionary **pm, const char *key, const char *value, int flags)
Set the given entry in *pm, overwriting an existing entry.
 
static int init_input_stream(int ist_index, char *error, int error_len)
 
int64_t pos
byte position in stream, -1 if unknown
 
attribute_deprecated int av_copy_packet_side_data(AVPacket *dst, const AVPacket *src)
Copy packet side data.
 
uint64_t channel_layout
Audio only.
 
@ AV_CODEC_HW_CONFIG_METHOD_HW_DEVICE_CTX
The codec supports this format via the hw_device_ctx interface.
 
int width
picture width / height.
 
AVFifoBuffer * av_fifo_alloc(unsigned int size)
Initialize an AVFifoBuffer.
 
int64_t parse_time_or_die(const char *context, const char *timestr, int is_duration)
Parse a string specifying a time and return its corresponding value as a number of microseconds.
 
@ AV_PKT_DATA_QUALITY_STATS
This side data contains quality related information from the encoder.
 
#define flags(name, subs,...)
 
void av_thread_message_queue_set_err_recv(AVThreadMessageQueue *mq, int err)
Set the receiving error code.
 
size_t av_strlcpy(char *dst, const char *src, size_t size)
Copy the string src to dst, but no more than size - 1 bytes, and null-terminate dst.
 
int avfilter_graph_send_command(AVFilterGraph *graph, const char *target, const char *cmd, const char *arg, char *res, int res_len, int flags)
Send a command to one or more filter instances.
 
static uint32_t codec_flags(enum AVCodecID codec_id)
 
float dts_error_threshold
 
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
 
#define av_ts2str(ts)
Convenience macro, the return value should be used only directly in function arguments but never stan...
 
#define AVERROR_EXIT
Immediate exit was requested; the called function should not be restarted.
 
void av_pkt_dump_log2(void *avcl, int level, const AVPacket *pkt, int dump_payload, const AVStream *st)
Send a nice dump of a packet to the log.
 
int64_t start_time
Decoding: pts of the first frame of the stream in presentation order, in stream time base.
 
static void set_tty_echo(int on)
 
#define FF_QP2LAMBDA
factor to convert from H.263 QP to lambda
 
int pts_wrap_bits
number of bits in pts (used for wrapping control)
 
static void log_callback_null(void *ptr, int level, const char *fmt, va_list vl)
 
int64_t recording_time
desired length of the resulting file in microseconds == AV_TIME_BASE units
 
#define ABORT_ON_FLAG_EMPTY_OUTPUT
 
static int read_key(void)
 
static int reap_filters(int flush)
Get and encode new output from any of the filtergraphs, without causing activity.
 
enum AVHWDeviceType device_type
The device type associated with the configuration.
 
AVRational sample_aspect_ratio
sample aspect ratio (0 if unknown) That is the width of a pixel divided by the height of the pixel.
 
int64_t av_rescale_q_rnd(int64_t a, AVRational bq, AVRational cq, enum AVRounding rnd)
Rescale a 64-bit integer by 2 rational numbers with specified rounding.
 
static int init_output_bsfs(OutputStream *ost)
 
uint32_t start_display_time
 
int filtergraph_is_simple(FilterGraph *fg)
 
static void init_encoder_time_base(OutputStream *ost, AVRational default_time_base)
 
int avcodec_parameters_copy(AVCodecParameters *dst, const AVCodecParameters *src)
Copy the contents of src to dst.
 
static AVCodecContext * dec_ctx
 
#define AV_CODEC_FLAG_PASS1
Use internal 2pass ratecontrol in first pass mode.
 
void av_init_packet(AVPacket *pkt)
Initialize optional fields of a packet with default values.
 
void avdevice_register_all(void)
Initialize libavdevice and register all the input and output devices.