59 #include <SDL_thread.h> 
   68 #define MAX_QUEUE_SIZE (15 * 1024 * 1024) 
   72 #define SDL_AUDIO_MIN_BUFFER_SIZE 512 
   74 #define SDL_AUDIO_MAX_CALLBACKS_PER_SEC 30 
   77 #define AV_SYNC_THRESHOLD_MIN 0.04 
   79 #define AV_SYNC_THRESHOLD_MAX 0.1 
   81 #define AV_SYNC_FRAMEDUP_THRESHOLD 0.1 
   83 #define AV_NOSYNC_THRESHOLD 10.0 
   86 #define SAMPLE_CORRECTION_PERCENT_MAX 10 
   89 #define EXTERNAL_CLOCK_SPEED_MIN  0.900 
   90 #define EXTERNAL_CLOCK_SPEED_MAX  1.010 
   91 #define EXTERNAL_CLOCK_SPEED_STEP 0.001 
   94 #define AUDIO_DIFF_AVG_NB   20 
   97 #define REFRESH_RATE 0.01 
  101 #define SAMPLE_ARRAY_SIZE (8 * 65536) 
  103 #define CURSOR_HIDE_DELAY 1000000 
  123 #define VIDEO_PICTURE_QUEUE_SIZE 3 
  124 #define SUBPICTURE_QUEUE_SIZE 16 
  125 #define SAMPLE_QUEUE_SIZE 9 
  126 #define FRAME_QUEUE_SIZE FFMAX(SAMPLE_QUEUE_SIZE, FFMAX(VIDEO_PICTURE_QUEUE_SIZE, SUBPICTURE_QUEUE_SIZE)) 
  340 static const char **vfilters_list = 
NULL;
 
  341 static int nb_vfilters = 0;
 
  342 static char *afilters = 
NULL;
 
  352 #define FF_ALLOC_EVENT   (SDL_USEREVENT) 
  353 #define FF_QUIT_EVENT    (SDL_USEREVENT + 2) 
  358 static int opt_add_vfilter(
void *optctx, 
const char *opt, 
const char *
arg)
 
  361     vfilters_list[nb_vfilters - 1] = 
arg;
 
  371     if (channel_count1 == 1 && channel_count2 == 1)
 
  374         return channel_count1 != channel_count2 || fmt1 != fmt2;
 
  381         return channel_layout;
 
  400     if (pkt == &flush_pkt)
 
  412     SDL_CondSignal(q->
cond);
 
  424     SDL_LockMutex(q->
mutex);
 
  426     SDL_UnlockMutex(q->
mutex);
 
  428     if (pkt != &flush_pkt && ret < 0)
 
  448     q->
mutex = SDL_CreateMutex();
 
  449     q->
cond = SDL_CreateCond();
 
  457     SDL_LockMutex(q->
mutex);
 
  458     for (pkt = q->
first_pkt; pkt; pkt = pkt1) {
 
  467     SDL_UnlockMutex(q->
mutex);
 
  473     SDL_DestroyMutex(q->
mutex);
 
  474     SDL_DestroyCond(q->
cond);
 
  479     SDL_LockMutex(q->
mutex);
 
  483     SDL_CondSignal(q->
cond);
 
  485     SDL_UnlockMutex(q->
mutex);
 
  490     SDL_LockMutex(q->
mutex);
 
  493     SDL_UnlockMutex(q->
mutex);
 
  502     SDL_LockMutex(q->
mutex);
 
  530     SDL_UnlockMutex(q->
mutex);
 
  623     } 
while (!got_frame && !d->
finished);
 
  642     if (!(f->
mutex = SDL_CreateMutex()))
 
  644     if (!(f->
cond = SDL_CreateCond()))
 
  664     SDL_DestroyMutex(f->
mutex);
 
  665     SDL_DestroyCond(f->
cond);
 
  670     SDL_LockMutex(f->
mutex);
 
  671     SDL_CondSignal(f->
cond);
 
  672     SDL_UnlockMutex(f->
mutex);
 
  693     SDL_LockMutex(f->
mutex);
 
  698     SDL_UnlockMutex(f->
mutex);
 
  709     SDL_LockMutex(f->
mutex);
 
  714     SDL_UnlockMutex(f->
mutex);
 
  726     SDL_LockMutex(f->
mutex);
 
  728     SDL_CondSignal(f->
cond);
 
  729     SDL_UnlockMutex(f->
mutex);
 
  741     SDL_LockMutex(f->
mutex);
 
  743     SDL_CondSignal(f->
cond);
 
  744     SDL_UnlockMutex(f->
mutex);
 
  788     SDL_FillRect(screen, &rect, color);
 
  789     if (update && w > 0 && h > 0)
 
  790         SDL_UpdateRect(screen, x, y, w, h);
 
  802     w2 = width - (x + w);
 
  808     h2 = height - (y + 
h);
 
  816                    xleft + width - w2, ytop,
 
  824                    xleft + w1, ytop + height - h2,
 
  829 #define ALPHA_BLEND(a, oldp, newp, s)\ 
  830 ((((oldp << s) * (255 - (a))) + (newp * (a))) / (255 << s)) 
  832 #define RGBA_IN(r, g, b, a, s)\ 
  834     unsigned int v = ((const uint32_t *)(s))[0];\ 
  835     a = (v >> 24) & 0xff;\ 
  836     r = (v >> 16) & 0xff;\ 
  837     g = (v >> 8) & 0xff;\ 
  841 #define YUVA_IN(y, u, v, a, s, pal)\ 
  843     unsigned int val = ((const uint32_t *)(pal))[*(const uint8_t*)(s)];\ 
  844     a = (val >> 24) & 0xff;\ 
  845     y = (val >> 16) & 0xff;\ 
  846     u = (val >> 8) & 0xff;\ 
  850 #define YUVA_OUT(d, y, u, v, a)\ 
  852     ((uint32_t *)(d))[0] = (a << 24) | (y << 16) | (u << 8) | v;\ 
  860     int wrap, wrap3, width2, skip2;
 
  861     int y, 
u, 
v, 
a, u1, v1, 
a1, w, 
h;
 
  865     int dstx, dsty, dstw, dsth;
 
  867     dstw = av_clip(rect->
w, 0, imgw);
 
  868     dsth = av_clip(rect->
h, 0, imgh);
 
  869     dstx = av_clip(rect->
x, 0, imgw - dstw);
 
  870     dsty = av_clip(rect->
y, 0, imgh - dsth);
 
  875     width2 = ((dstw + 1) >> 1) + (dstx & ~dstw & 1);
 
  880     pal = (
const uint32_t *)rect->
pict.
data[1];  
 
  897         for (w = dstw - (dstx & 1); w >= 2; w -= 2) {
 
  924         p += wrap3 - dstw * 
BPP;
 
  925         lum += wrap - dstw - dstx;
 
  926         cb += dst->
linesize[1] - width2 - skip2;
 
  927         cr += dst->
linesize[2] - width2 - skip2;
 
  929     for (h = dsth - (dsty & 1); h >= 2; h -= 2) {
 
  954         for (w = dstw - (dstx & 1); w >= 2; w -= 2) {
 
  986             p += -wrap3 + 2 * 
BPP;
 
 1009         p += wrap3 + (wrap3 - dstw * 
BPP);
 
 1010         lum += wrap + (wrap - dstw - dstx);
 
 1011         cb += dst->
linesize[1] - width2 - skip2;
 
 1012         cr += dst->
linesize[2] - width2 - skip2;
 
 1030         for (w = dstw - (dstx & 1); w >= 2; w -= 2) {
 
 1061          SDL_FreeYUVOverlay(vp->
bmp);
 
 1067                                    int scr_xleft, 
int scr_ytop, 
int scr_width, 
int scr_height,
 
 1068                                    int pic_width, 
int pic_height, 
AVRational pic_sar)
 
 1073     if (pic_sar.
num == 0)
 
 1076         aspect_ratio = 
av_q2d(pic_sar);
 
 1078     if (aspect_ratio <= 0.0)
 
 1080     aspect_ratio *= (float)pic_width / (
float)pic_height;
 
 1083     height = scr_height;
 
 1084     width = ((int)
rint(height * aspect_ratio)) & ~1;
 
 1085     if (width > scr_width) {
 
 1087         height = ((int)
rint(width / aspect_ratio)) & ~1;
 
 1089     x = (scr_width - 
width) / 2;
 
 1090     y = (scr_height - 
height) / 2;
 
 1091     rect->x = scr_xleft + x;
 
 1092     rect->y = scr_ytop  + 
y;
 
 1093     rect->w = 
FFMAX(width,  1);
 
 1094     rect->h = 
FFMAX(height, 1);
 
 1112                     SDL_LockYUVOverlay (vp->
bmp);
 
 1114                     pict.
data[0] = vp->
bmp->pixels[0];
 
 1115                     pict.
data[1] = vp->
bmp->pixels[2];
 
 1116                     pict.
data[2] = vp->
bmp->pixels[1];
 
 1126                     SDL_UnlockYUVOverlay (vp->
bmp);
 
 1133         SDL_DisplayYUVOverlay(vp->
bmp, &rect);
 
 1136             int bgcolor = SDL_MapRGB(
screen->format, 0x00, 0x00, 0x00);
 
 1145     return a < 0 ? a%b + b : a%
b;
 
 1150     int i, i_start, x, y1, 
y, ys, delay, 
n, nb_display_channels;
 
 1151     int ch, channels, 
h, h2, bgcolor, fgcolor;
 
 1153     int rdft_bits, nb_freq;
 
 1155     for (rdft_bits = 1; (1 << rdft_bits) < 2 * s->
height; rdft_bits++)
 
 1157     nb_freq = 1 << (rdft_bits - 1);
 
 1161     nb_display_channels = channels;
 
 1163         int data_used= s->
show_mode == SHOW_MODE_WAVES ? s->
width : (2*nb_freq);
 
 1175         delay += 2 * data_used;
 
 1176         if (delay < data_used)
 
 1182             for (i = 0; i < 1000; i += channels) {
 
 1189                 if (h < score && (b ^ c) < 0) {
 
 1201     bgcolor = SDL_MapRGB(
screen->format, 0x00, 0x00, 0x00);
 
 1207         fgcolor = SDL_MapRGB(
screen->format, 0xff, 0xff, 0xff);
 
 1210         h = s->
height / nb_display_channels;
 
 1213         for (ch = 0; ch < nb_display_channels; ch++) {
 
 1215             y1 = s->
ytop + ch * h + (h / 2); 
 
 1216             for (x = 0; x < s->
width; x++) {
 
 1225                                s->
xleft + x, ys, 1, y,
 
 1233         fgcolor = SDL_MapRGB(
screen->format, 0x00, 0x00, 0xff);
 
 1235         for (ch = 1; ch < nb_display_channels; ch++) {
 
 1236             y = s->
ytop + ch * 
h;
 
 1243         nb_display_channels= 
FFMIN(nb_display_channels, 2);
 
 1256             for (ch = 0; ch < nb_display_channels; ch++) {
 
 1257                 data[ch] = s->
rdft_data + 2 * nb_freq * ch;
 
 1259                 for (x = 0; x < 2 * nb_freq; x++) {
 
 1260                     double w = (x-nb_freq) * (1.0 / nb_freq);
 
 1270             for (y = 0; y < s->
height; y++) {
 
 1271                 double w = 1 / sqrt(nb_freq);
 
 1272                 int a = sqrt(w * sqrt(data[0][2 * y + 0] * data[0][2 * y + 0] + data[0][2 * y + 1] * data[0][2 * y + 1]));
 
 1273                 int b = (nb_display_channels == 2 ) ? sqrt(w * sqrt(data[1][2 * y + 0] * data[1][2 * y + 0]
 
 1274                        + data[1][2 * y + 1] * data[1][2 * y + 1])) : a;
 
 1277                 fgcolor = SDL_MapRGB(
screen->format, a, b, (a + b) / 2);
 
 1306 #if !CONFIG_AVFILTER 
 1345     int flags = SDL_HWSURFACE | SDL_ASYNCBLIT | SDL_HWACCEL;
 
 1349     else                flags |= SDL_RESIZABLE;
 
 1351     if (vp && vp->
width)
 
 1364     w = 
FFMIN(16383, w);
 
 1368     screen = SDL_SetVideoMode(w, h, 0, flags);
 
 1535     double sync_threshold, 
diff = 0;
 
 1548             if (diff <= -sync_threshold)
 
 1549                 delay = 
FFMAX(0, delay + diff);
 
 1551                 delay = delay + 
diff;
 
 1552             else if (diff >= sync_threshold)
 
 1609             double last_duration, 
duration, delay;
 
 1636             if (time < is->frame_timer + delay && !redisplay) {
 
 1695         static int64_t last_time;
 
 1697         int aqsize, vqsize, sqsize;
 
 1701         if (!last_time || (cur_time - last_time) >= 30000) {
 
 1719                    "%7.2f %s:%7.3f fd=%4d aq=%5dKB vq=%5dKB sq=%5dB f=%"PRId64
"/%"PRId64
"   \r",
 
 1751     bufferdiff = vp->
bmp ? 
FFMAX(vp->
bmp->pixels[0], vp->
bmp->pixels[1]) - 
FFMIN(vp->
bmp->pixels[0], vp->
bmp->pixels[1]) : 0;
 
 1752     if (!vp->
bmp || vp->
bmp->pitches[0] < vp->
width || bufferdiff < (int64_t)vp->
height * vp->
bmp->pitches[0]) {
 
 1756                "Error: the video system does not support an image\n" 
 1757                         "size of %dx%d pixels. Try using -lowres or -vf \"scale=w:h\"\n" 
 1758                         "to reduce the image size.\n", vp->
width, vp->
height );
 
 1771     for (i = 0; i < 3; i++) {
 
 1778         if (bmp->pitches[i] > width) {
 
 1779             maxp = bmp->pixels[i] + bmp->pitches[i] * height - 1;
 
 1780             for (p = bmp->pixels[i] + width - 1; p < maxp; p += bmp->pitches[i])
 
 1790 #if defined(DEBUG_SYNC) && 0 
 1791     printf(
"frame_type=%c pts=%0.3f\n",
 
 1814         event.user.data1 = is;
 
 1815         SDL_PushEvent(&event);
 
 1839         SDL_LockYUVOverlay (vp->
bmp);
 
 1841         pict.
data[0] = vp->
bmp->pixels[0];
 
 1842         pict.
data[1] = vp->
bmp->pixels[2];
 
 1843         pict.
data[2] = vp->
bmp->pixels[1];
 
 1868         SDL_UnlockYUVOverlay(vp->
bmp);
 
 1925         if (!outputs || !inputs) {
 
 1936         inputs->filter_ctx  = sink_ctx;
 
 1937         inputs->pad_idx     = 0;
 
 1938         inputs->next        = 
NULL;
 
 1948     for (i = 0; i < graph->
nb_filters - nb_filters; i++)
 
 1961     char sws_flags_str[128];
 
 1962     char buffersrc_args[256];
 
 1972     snprintf(buffersrc_args, 
sizeof(buffersrc_args),
 
 1973              "video_size=%dx%d:pix_fmt=%d:time_base=%d/%d:pixel_aspect=%d/%d",
 
 1978         av_strlcatf(buffersrc_args, 
sizeof(buffersrc_args), 
":frame_rate=%d/%d", fr.
num, fr.
den);
 
 1982                                             "ffplay_buffer", buffersrc_args, 
NULL,
 
 1988                                        "ffplay_buffersink", 
NULL, 
NULL, graph);
 
 1995     last_filter = filt_out;
 
 1999 #define INSERT_FILT(name, arg) do {                                          \ 
 2000     AVFilterContext *filt_ctx;                                               \ 
 2002     ret = avfilter_graph_create_filter(&filt_ctx,                            \ 
 2003                                        avfilter_get_by_name(name),           \ 
 2004                                        "ffplay_" name, arg, NULL, graph);    \ 
 2008     ret = avfilter_link(filt_ctx, 0, last_filter, 0);                        \ 
 2012     last_filter = filt_ctx;                                                  \ 
 2017     INSERT_FILT(
"crop", 
"floor(in_w/2)*2:floor(in_h/2)*2");
 
 2022         if (fabs(theta - 90) < 1.0) {
 
 2023             INSERT_FILT(
"transpose", 
"clock");
 
 2024         } 
else if (fabs(theta - 180) < 1.0) {
 
 2025             INSERT_FILT(
"hflip", 
NULL);
 
 2026             INSERT_FILT(
"vflip", 
NULL);
 
 2027         } 
else if (fabs(theta - 270) < 1.0) {
 
 2028             INSERT_FILT(
"transpose", 
"cclock");
 
 2029         } 
else if (fabs(theta) > 1.0) {
 
 2030             char rotate_buf[64];
 
 2031             snprintf(rotate_buf, 
sizeof(rotate_buf), 
"%f*PI/180", theta);
 
 2032             INSERT_FILT(
"rotate", rotate_buf);
 
 2039     is->in_video_filter  = filt_src;
 
 2040     is->out_video_filter = filt_out;
 
 2046 static int configure_audio_filters(
VideoState *is, 
const char *afilters, 
int force_output_format)
 
 2050     int64_t channel_layouts[2] = { 0, -1 };
 
 2051     int channels[2] = { 0, -1 };
 
 2053     char aresample_swr_opts[512] = 
"";
 
 2055     char asrc_args[256];
 
 2064     if (strlen(aresample_swr_opts))
 
 2065         aresample_swr_opts[strlen(aresample_swr_opts)-1] = 
'\0';
 
 2066     av_opt_set(is->agraph, 
"aresample_swr_opts", aresample_swr_opts, 0);
 
 2068     ret = 
snprintf(asrc_args, 
sizeof(asrc_args),
 
 2069                    "sample_rate=%d:sample_fmt=%s:channels=%d:time_base=%d/%d",
 
 2071                    is->audio_filter_src.channels,
 
 2072                    1, is->audio_filter_src.freq);
 
 2073     if (is->audio_filter_src.channel_layout)
 
 2074         snprintf(asrc_args + ret, 
sizeof(asrc_args) - ret,
 
 2075                  ":channel_layout=0x%"PRIx64,  is->audio_filter_src.channel_layout);
 
 2079                                        asrc_args, 
NULL, is->agraph);
 
 2095     if (force_output_format) {
 
 2113     is->in_audio_filter  = filt_asrc;
 
 2114     is->out_audio_filter = filt_asink;
 
 2129     int last_serial = -1;
 
 2130     int64_t dec_channel_layout;
 
 2151                     cmp_audio_fmts(is->audio_filter_src.fmt, is->audio_filter_src.channels,
 
 2153                     is->audio_filter_src.channel_layout != dec_channel_layout ||
 
 2154                     is->audio_filter_src.freq           != frame->
sample_rate ||
 
 2158                     char buf1[1024], buf2[1024];
 
 2162                            "Audio frame changed from rate:%d ch:%d fmt:%s layout:%s serial:%d to rate:%d ch:%d fmt:%s layout:%s serial:%d\n",
 
 2163                            is->audio_filter_src.freq, is->audio_filter_src.channels, 
av_get_sample_fmt_name(is->audio_filter_src.fmt), buf1, last_serial,
 
 2166                     is->audio_filter_src.fmt            = frame->
format;
 
 2168                     is->audio_filter_src.channel_layout = dec_channel_layout;
 
 2172                     if ((ret = configure_audio_filters(is, afilters, 1)) < 0)
 
 2180                 tb = is->out_audio_filter->inputs[0]->time_base;
 
 2232     int last_serial = -1;
 
 2233     int last_vfilter_idx = 0;
 
 2256         if (   last_w != frame->
width 
 2257             || last_h != frame->
height 
 2258             || last_format != frame->
format 
 2260             || last_vfilter_idx != is->vfilter_idx) {
 
 2262                    "Video frame changed from size:%dx%d format:%s serial:%d to size:%dx%d format:%s serial:%d\n",
 
 2269             if ((ret = configure_video_filters(graph, is, vfilters_list ? vfilters_list[is->vfilter_idx] : 
NULL, frame)) < 0) {
 
 2272                 event.user.data1 = is;
 
 2273                 SDL_PushEvent(&event);
 
 2276             filt_in  = is->in_video_filter;
 
 2277             filt_out = is->out_video_filter;
 
 2278             last_w = frame->
width;
 
 2280             last_format = frame->
format;
 
 2282             last_vfilter_idx = is->vfilter_idx;
 
 2343         if (got_subtitle && sp->
sub.
format == 0) {
 
 2363         } 
else if (got_subtitle) {
 
 2375     size = samples_size / 
sizeof(short);
 
 2393     int wanted_nb_samples = nb_samples;
 
 2397         double diff, avg_diff;
 
 2398         int min_nb_samples, max_nb_samples;
 
 2412                     wanted_nb_samples = nb_samples + (int)(diff * is->
audio_src.
freq);
 
 2415                     wanted_nb_samples = av_clip(wanted_nb_samples, min_nb_samples, max_nb_samples);
 
 2418                         diff, avg_diff, wanted_nb_samples - nb_samples,
 
 2429     return wanted_nb_samples;
 
 2441     int data_size, resampled_data_size;
 
 2442     int64_t dec_channel_layout;
 
 2444     int wanted_nb_samples;
 
 2460     dec_channel_layout =
 
 2476                    "Cannot create sample rate converter for conversion of %d Hz %s %d channels to %d Hz %s %d channels!\n",
 
 2513         if (len2 == out_count) {
 
 2522         resampled_data_size = data_size;
 
 2534         static double last_clock;
 
 2535         printf(
"audio: delay=%0.3f clock=%0.3f clock0=%0.3f\n",
 
 2541     return resampled_data_size;
 
 2548     int audio_size, len1;
 
 2555            if (audio_size < 0) {
 
 2582 static int audio_open(
void *opaque, int64_t wanted_channel_layout, 
int wanted_nb_channels, 
int wanted_sample_rate, 
struct AudioParams *audio_hw_params)
 
 2584     SDL_AudioSpec wanted_spec, spec;
 
 2586     static const int next_nb_channels[] = {0, 0, 1, 6, 2, 6, 4, 6};
 
 2587     static const int next_sample_rates[] = {0, 44100, 48000, 96000, 192000};
 
 2588     int next_sample_rate_idx = 
FF_ARRAY_ELEMS(next_sample_rates) - 1;
 
 2590     env = SDL_getenv(
"SDL_AUDIO_CHANNELS");
 
 2592         wanted_nb_channels = atoi(env);
 
 2600     wanted_spec.channels = wanted_nb_channels;
 
 2601     wanted_spec.freq = wanted_sample_rate;
 
 2602     if (wanted_spec.freq <= 0 || wanted_spec.channels <= 0) {
 
 2606     while (next_sample_rate_idx && next_sample_rates[next_sample_rate_idx] >= wanted_spec.freq)
 
 2607         next_sample_rate_idx--;
 
 2608     wanted_spec.format = AUDIO_S16SYS;
 
 2609     wanted_spec.silence = 0;
 
 2612     wanted_spec.userdata = opaque;
 
 2613     while (SDL_OpenAudio(&wanted_spec, &spec) < 0) {
 
 2615                wanted_spec.channels, wanted_spec.freq, SDL_GetError());
 
 2616         wanted_spec.channels = next_nb_channels[
FFMIN(7, wanted_spec.channels)];
 
 2617         if (!wanted_spec.channels) {
 
 2618             wanted_spec.freq = next_sample_rates[next_sample_rate_idx--];
 
 2619             wanted_spec.channels = wanted_nb_channels;
 
 2620             if (!wanted_spec.freq) {
 
 2622                        "No more combinations to try, audio open failed\n");
 
 2628     if (spec.format != AUDIO_S16SYS) {
 
 2630                "SDL advised audio format %d is not supported!\n", spec.format);
 
 2633     if (spec.channels != wanted_spec.channels) {
 
 2635         if (!wanted_channel_layout) {
 
 2637                    "SDL advised channel count %d is not supported!\n", spec.channels);
 
 2643     audio_hw_params->
freq = spec.freq;
 
 2645     audio_hw_params->
channels =  spec.channels;
 
 2661     const char *forced_codec_name = 
NULL;
 
 2665     int64_t channel_layout;
 
 2667     int stream_lowres = 
lowres;
 
 2669     if (stream_index < 0 || stream_index >= ic->
nb_streams)
 
 2680     if (forced_codec_name)
 
 2684                                       "No codec could be found with name '%s'\n", forced_codec_name);
 
 2686                                       "No codec could be found with id %d\n", avctx->
codec_id);
 
 2728             is->audio_filter_src.channels       = avctx->
channels;
 
 2730             is->audio_filter_src.fmt            = avctx->
sample_fmt;
 
 2731             if ((ret = configure_audio_filters(is, afilters, 0)) < 0)
 
 2733             link = is->out_audio_filter->inputs[0];
 
 2800     if (stream_index < 0 || stream_index >= ic->
nb_streams)
 
 2867     if(s->
pb && (   !strncmp(s->
filename, 
"rtp:", 4)
 
 2868                  || !strncmp(s->
filename, 
"udp:", 4)
 
 2883     int64_t stream_start_time;
 
 2884     int pkt_in_play_range = 0;
 
 2887     int orig_nb_streams;
 
 2888     SDL_mutex *wait_mutex = SDL_CreateMutex();
 
 2889     int scan_all_pmts_set = 0;
 
 2892     memset(st_index, -1, 
sizeof(st_index));
 
 2908         scan_all_pmts_set = 1;
 
 2916     if (scan_all_pmts_set)
 
 2936     for (i = 0; i < orig_nb_streams; i++)
 
 2942                "%s: could not find codec parameters\n", is->
filename);
 
 2989             st_index[i] = INT_MAX;
 
 3001                                 st_index[AVMEDIA_TYPE_VIDEO],
 
 3007                                 (st_index[AVMEDIA_TYPE_AUDIO] >= 0 ?
 
 3008                                  st_index[AVMEDIA_TYPE_AUDIO] :
 
 3009                                  st_index[AVMEDIA_TYPE_VIDEO]),
 
 3013     if (st_index[AVMEDIA_TYPE_VIDEO] >= 0) {
 
 3022     if (st_index[AVMEDIA_TYPE_AUDIO] >= 0) {
 
 3027     if (st_index[AVMEDIA_TYPE_VIDEO] >= 0) {
 
 3031         is->
show_mode = ret >= 0 ? SHOW_MODE_VIDEO : SHOW_MODE_RDFT;
 
 3033     if (st_index[AVMEDIA_TYPE_SUBTITLE] >= 0) {
 
 3044     if (infinite_buffer < 0 && is->realtime)
 
 3057 #if CONFIG_RTSP_DEMUXER || CONFIG_MMSH_PROTOCOL 
 3068             int64_t seek_target = is->
seek_pos;
 
 3069             int64_t seek_min    = is->
seek_rel > 0 ? seek_target - is->
seek_rel + 2: INT64_MIN;
 
 3070             int64_t seek_max    = is->
seek_rel < 0 ? seek_target - is->
seek_rel - 2: INT64_MAX;
 
 3077                        "%s: error while seeking\n", is->
ic->
filename);
 
 3122             SDL_LockMutex(wait_mutex);
 
 3124             SDL_UnlockMutex(wait_mutex);
 
 3150             SDL_LockMutex(wait_mutex);
 
 3152             SDL_UnlockMutex(wait_mutex);
 
 3161                 (pkt_ts - (stream_start_time != 
AV_NOPTS_VALUE ? stream_start_time : 0)) *
 
 3199         event.user.data1 = is;
 
 3200         SDL_PushEvent(&event);
 
 3202     SDL_DestroyMutex(wait_mutex);
 
 3249     int start_index, stream_index;
 
 3265     stream_index = start_index;
 
 3271             for (start_index = 0; start_index < 
nb_streams; start_index++)
 
 3274             if (start_index == nb_streams)
 
 3276             stream_index = start_index;
 
 3281         if (++stream_index >= nb_streams)
 
 3289             if (start_index == -1)
 
 3293         if (stream_index == start_index)
 
 3298             switch (codec_type) {
 
 3313     if (p && stream_index != -1)
 
 3327 #if defined(__APPLE__) && SDL_VERSION_ATLEAST(1, 2, 14) 
 3339     int bgcolor = SDL_MapRGB(
screen->format, 0x00, 0x00, 0x00);
 
 3342         next = (next + 1) % SHOW_MODE_NB;
 
 3343     } 
while (next != is->
show_mode && (next == SHOW_MODE_VIDEO && !is->
video_st || next != SHOW_MODE_VIDEO && !is->
audio_st));
 
 3354     double remaining_time = 0.0;
 
 3356     while (!SDL_PeepEvents(event, 1, SDL_GETEVENT, SDL_ALLEVENTS)) {
 
 3361         if (remaining_time > 0.0)
 
 3362             av_usleep((int64_t)(remaining_time * 1000000.0));
 
 3401     double incr, pos, frac;
 
 3406         switch (event.type) {
 
 3412             switch (event.key.keysym.sym) {
 
 3444                 if (cur_stream->
show_mode == SHOW_MODE_VIDEO && cur_stream->vfilter_idx < nb_vfilters - 1) {
 
 3445                     if (++cur_stream->vfilter_idx >= nb_vfilters)
 
 3446                         cur_stream->vfilter_idx = 0;
 
 3448                     cur_stream->vfilter_idx = 0;
 
 3509         case SDL_VIDEOEXPOSE:
 
 3512         case SDL_MOUSEBUTTONDOWN:
 
 3517         case SDL_MOUSEMOTION:
 
 3523             if (event.type == SDL_MOUSEBUTTONDOWN) {
 
 3526                 if (event.motion.state != SDL_PRESSED)
 
 3536                     int tns, thh, tmm, tss;
 
 3539                     tmm  = (tns % 3600) / 60;
 
 3541                     frac = x / cur_stream->
width;
 
 3544                     mm   = (ns % 3600) / 60;
 
 3547                            "Seek to %2.0f%% (%2d:%02d:%02d) of total duration (%2d:%02d:%02d)       \n", frac*100,
 
 3548                             hh, mm, ss, thh, tmm, tss);
 
 3555         case SDL_VIDEORESIZE:
 
 3556                 screen = SDL_SetVideoMode(
FFMIN(16383, event.resize.w), event.resize.h, 0,
 
 3557                                           SDL_HWSURFACE|(
is_full_screen?SDL_FULLSCREEN:SDL_RESIZABLE)|SDL_ASYNCBLIT|SDL_HWACCEL);
 
 3600     if (!file_iformat) {
 
 3615     if (!strcmp(arg, 
"audio"))
 
 3617     else if (!strcmp(arg, 
"video"))
 
 3619     else if (!strcmp(arg, 
"ext"))
 
 3642     show_mode = !strcmp(arg, 
"video") ? SHOW_MODE_VIDEO :
 
 3643                 !strcmp(arg, 
"waves") ? SHOW_MODE_WAVES :
 
 3644                 !strcmp(arg, 
"rdft" ) ? SHOW_MODE_RDFT  :
 
 3653                "Argument '%s' provided as input filename, but '%s' was already specified.\n",
 
 3657     if (!strcmp(filename, 
"-"))
 
 3664    const char *spec = strchr(opt, 
':');
 
 3667               "No media specifier was specified in '%s' in option '%s'\n",
 
 3678               "Invalid media specifier '%s' in option '%s'\n", spec, opt);
 
 3688     { 
"x", 
HAS_ARG, { .func_arg = 
opt_width }, 
"force displayed width", 
"width" },
 
 3689     { 
"y", 
HAS_ARG, { .func_arg = 
opt_height }, 
"force displayed height", 
"height" },
 
 3698     { 
"ss", 
HAS_ARG, { .func_arg = 
opt_seek }, 
"seek to a given position in seconds", 
"pos" },
 
 3699     { 
"t", 
HAS_ARG, { .func_arg = 
opt_duration }, 
"play  \"duration\" seconds of audio/video", 
"duration" },
 
 3709     { 
"sync", 
HAS_ARG | 
OPT_EXPERT, { .func_arg = 
opt_sync }, 
"set audio-video sync. type (type=audio/video/ext)", 
"type" },
 
 3718     { 
"vf", 
OPT_EXPERT | 
HAS_ARG, { .func_arg = opt_add_vfilter }, 
"set video filters", 
"filter_graph" },
 
 3719     { 
"af", 
OPT_STRING | 
HAS_ARG, { &afilters }, 
"set audio filters", 
"filter_graph" },
 
 3722     { 
"showmode", 
HAS_ARG, { .func_arg = 
opt_show_mode}, 
"select show mode (0 = video, 1 = waves, 2 = RDFT)", 
"mode" },
 
 3724     { 
"i", 
OPT_BOOL, { &dummy}, 
"read specified file", 
"input_file"},
 
 3725     { 
"codec", 
HAS_ARG, { .func_arg = 
opt_codec}, 
"force decoder", 
"decoder_name" },
 
 3749 #if !CONFIG_AVFILTER 
 3754     printf(
"\nWhile playing:\n" 
 3756            "f                   toggle full screen\n" 
 3758            "a                   cycle audio channel in the current program\n" 
 3759            "v                   cycle video channel\n" 
 3760            "t                   cycle subtitle channel in the current program\n" 
 3762            "w                   cycle video filters or show modes\n" 
 3763            "s                   activate frame-step mode\n" 
 3764            "left/right          seek backward/forward 10 seconds\n" 
 3765            "down/up             seek backward/forward 1 minute\n" 
 3766            "page down/page up   seek backward/forward 10 minutes\n" 
 3767            "mouse click         seek to percentage in file corresponding to fraction of width\n" 
 3775           *mtx = SDL_CreateMutex();
 
 3780           return !!SDL_LockMutex(*mtx);
 
 3782           return !!SDL_UnlockMutex(*mtx);
 
 3784           SDL_DestroyMutex(*mtx);
 
 3795     char dummy_videodriver[] = 
"SDL_VIDEODRIVER=dummy";
 
 3823                "Use -h to get full help or, even better, run 'man %s'\n", 
program_name);
 
 3830     flags = SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER;
 
 3832         flags &= ~SDL_INIT_AUDIO;
 
 3834         SDL_putenv(dummy_videodriver); 
 
 3835 #if !defined(_WIN32) && !defined(__APPLE__) 
 3836     flags |= SDL_INIT_EVENTTHREAD; 
 
 3838     if (SDL_Init (flags)) {
 
 3845         const SDL_VideoInfo *
vi = SDL_GetVideoInfo();
 
 3850     SDL_EventState(SDL_ACTIVEEVENT, SDL_IGNORE);
 
 3851     SDL_EventState(SDL_SYSWMEVENT, SDL_IGNORE);
 
 3852     SDL_EventState(SDL_USEREVENT, SDL_IGNORE);
 
unsigned int nb_chapters
Number of chapters in AVChapter array. 
 
#define EXTERNAL_CLOCK_SPEED_STEP
 
AVFilterContext ** filters
 
static void packet_queue_abort(PacketQueue *q)
 
static int opt_show_mode(void *optctx, const char *opt, const char *arg)
 
static void frame_queue_push(FrameQueue *f)
 
static void video_image_display(VideoState *is)
 
const char const char void * val
 
static void packet_queue_flush(PacketQueue *q)
 
#define CODEC_FLAG2_FAST
Allow non spec compliant speedup tricks. 
 
static double get_clock(Clock *c)
 
int64_t avio_size(AVIOContext *s)
Get the filesize. 
 
static int opt_height(void *optctx, const char *opt, const char *arg)
 
const int program_birth_year
program birth year, defined by the program for show_banner() 
 
int64_t pts_correction_num_faulty_dts
Number of incorrect PTS values so far. 
 
static int audio_open(void *opaque, int64_t wanted_channel_layout, int wanted_nb_channels, int wanted_sample_rate, struct AudioParams *audio_hw_params)
 
int linesize[AV_NUM_DATA_POINTERS]
number of bytes per line 
 
void av_free_packet(AVPacket *pkt)
Free a packet. 
 
static int video_open(VideoState *is, int force_set_video_mode, Frame *vp)
 
#define EXTERNAL_CLOCK_SPEED_MIN
 
This structure describes decoded (raw) audio or video data. 
 
#define VIDEO_PICTURE_QUEUE_SIZE
 
static double rint(double x)
 
int x
top left corner of pict, undefined when pict is not set 
 
AVIOInterruptCB interrupt_callback
Custom interrupt callbacks for the I/O layer. 
 
ptrdiff_t const GLvoid * data
 
static AVInputFormat * file_iformat
 
static void opt_input_file(void *optctx, const char *filename)
 
double get_rotation(AVStream *st)
 
int av_lockmgr_register(int(*cb)(void **mutex, enum AVLockOp op))
Register a user provided lock manager supporting the operations specified by AVLockOp. 
 
static int opt_format(void *optctx, const char *opt, const char *arg)
 
AVFilterGraph * avfilter_graph_alloc(void)
Allocate a filter graph. 
 
#define AV_LOG_WARNING
Something somehow does not look correct. 
 
static const AVFilterPad outputs[]
 
static int get_master_sync_type(VideoState *is)
 
Main libavfilter public API header. 
 
#define AV_SYNC_FRAMEDUP_THRESHOLD
 
int avformat_open_input(AVFormatContext **ps, const char *filename, AVInputFormat *fmt, AVDictionary **options)
Open an input stream and read the header. 
 
#define AV_DICT_DONT_OVERWRITE
Don't overwrite existing entries. 
 
static int default_height
 
Memory buffer source API. 
 
double frame_last_filter_delay
 
enum VideoState::ShowMode show_mode
 
int avfilter_graph_config(AVFilterGraph *graphctx, void *log_ctx)
Check validity and configure all the links and formats in the graph. 
 
void avfilter_inout_free(AVFilterInOut **inout)
Free the supplied list of AVFilterInOut and set *inout to NULL. 
 
struct AVFilterInOut * next
next input/input in the list, NULL if this is the last 
 
#define av_opt_set_int_list(obj, name, val, term, flags)
Set a binary option to an integer list. 
 
AVRational av_guess_sample_aspect_ratio(AVFormatContext *format, AVStream *stream, AVFrame *frame)
Guess the sample aspect ratio of a frame, based on both the stream and the frame aspect ratio...
 
static void stream_cycle_channel(VideoState *is, int codec_type)
 
static int opt_frame_pix_fmt(void *optctx, const char *opt, const char *arg)
 
int nb_colors
number of colors in pict, undefined when pict is not set 
 
static void stream_toggle_pause(VideoState *is)
 
MyAVPacketList * first_pkt
 
static void stream_seek(VideoState *is, int64_t pos, int64_t rel, int seek_by_bytes)
 
static void packet_queue_init(PacketQueue *q)
 
Various defines for YUV<->RGB conversion. 
 
AVRational sample_aspect_ratio
sample aspect ratio (0 if unknown) That is the width of a pixel divided by the height of the pixel...
 
void avfilter_graph_free(AVFilterGraph **graph)
Free a graph, destroy its links, and set *graph to NULL. 
 
enum AVMediaType codec_type
 
void show_banner(int argc, char **argv, const OptionDef *options)
Print the program banner to stderr. 
 
static int opt_codec(void *optctx, const char *opt, const char *arg)
 
static AVStream * video_stream
 
static void set_clock_at(Clock *c, double pts, int serial, double time)
 
static void toggle_pause(VideoState *is)
 
SDL_Rect last_display_rect
 
void avdevice_register_all(void)
Initialize libavdevice and register all the input and output devices. 
 
double audio_diff_threshold
 
void av_frame_move_ref(AVFrame *dst, AVFrame *src)
Move everything contained in src to dst and reset src. 
 
#define FF_ARRAY_ELEMS(a)
 
uint8_t silence_buf[SDL_AUDIO_MIN_BUFFER_SIZE]
 
int av_usleep(unsigned usec)
Sleep for a period of time. 
 
const AVClass * sws_get_class(void)
Get the AVClass for swsContext. 
 
int avcodec_decode_subtitle2(AVCodecContext *avctx, AVSubtitle *sub, int *got_sub_ptr, AVPacket *avpkt)
Decode a subtitle message. 
 
static const char * audio_codec_name
 
int av_dup_packet(AVPacket *pkt)
 
static void seek_chapter(VideoState *is, int incr)
 
AVDictionary * filter_codec_opts(AVDictionary *opts, enum AVCodecID codec_id, AVFormatContext *s, AVStream *st, AVCodec *codec)
Filter out options for given codec. 
 
AVLockOp
Lock operation used by lockmgr. 
 
char * scale_sws_opts
sws options to use for the auto-inserted scale filters 
 
static VideoState * stream_open(const char *filename, AVInputFormat *iformat)
 
AVRational time_base
This is the fundamental unit of time (in seconds) in terms of which frame timestamps are represented...
 
int av_get_channel_layout_nb_channels(uint64_t channel_layout)
Return the number of channels in the channel layout. 
 
struct SwsContext * img_convert_ctx
 
void av_picture_copy(AVPicture *dst, const AVPicture *src, enum AVPixelFormat pix_fmt, int width, int height)
Copy image src to dst. 
 
static void toggle_audio_display(VideoState *is)
 
AVRational av_guess_frame_rate(AVFormatContext *ctx, AVStream *stream, AVFrame *frame)
Guess the frame rate, based on both the container and codec information. 
 
memory buffer sink API for audio and video 
 
const AVClass * avcodec_get_class(void)
Get the AVClass for AVCodecContext. 
 
unsigned int nb_stream_indexes
 
#define AV_LOG_QUIET
Print no output. 
 
int w
width of pict, undefined when pict is not set 
 
AVFilterLink ** inputs
array of pointers to input links 
 
static AVFilter ** last_filter
 
double audio_diff_avg_coef
 
static double cb(void *priv, double x, double y)
 
static int read_thread(void *arg)
 
int avfilter_link(AVFilterContext *src, unsigned srcpad, AVFilterContext *dst, unsigned dstpad)
Link two filters together. 
 
int swr_set_compensation(struct SwrContext *s, int sample_delta, int compensation_distance)
Activate resampling compensation ("soft" compensation). 
 
static Frame * frame_queue_peek(FrameQueue *f)
 
static int64_t start_time
 
enum AVSampleFormat sample_fmt
audio sample format 
 
void log_callback_help(void *ptr, int level, const char *fmt, va_list vl)
Trivial log callback. 
 
AVFrame * av_frame_alloc(void)
Allocate an AVFrame and set its fields to default values. 
 
int opt_default(void *optctx, const char *opt, const char *arg)
Fallback for options that are not explicitly handled, these will be parsed through AVOptions...
 
static void stream_component_close(VideoState *is, int stream_index)
 
static av_always_inline av_const int isnan(float x)
 
uint8_t * data[AV_NUM_DATA_POINTERS]
pointers to the image data planes 
 
#define AV_LOG_TRACE
Extremely verbose debugging, useful for libav* development. 
 
static int decode_interrupt_cb(void *ctx)
 
struct SwrContext * swr_ctx
 
static av_cold int end(AVCodecContext *avctx)
 
libavcodec/libavfilter gluing utilities 
 
static void event_loop(VideoState *cur_stream)
 
static int cmp_audio_fmts(enum AVSampleFormat fmt1, int64_t channel_count1, enum AVSampleFormat fmt2, int64_t channel_count2)
 
int avformat_match_stream_specifier(AVFormatContext *s, AVStream *st, const char *spec)
Check if the stream st contained in s is matched by the stream specifier spec. 
 
int64_t pts
Presentation timestamp in time_base units (time when frame should be shown to user). 
 
static void packet_queue_destroy(PacketQueue *q)
 
static void alloc_picture(VideoState *is)
 
void init_opts(void)
Initialize the cmdutils option system, in particular allocate the *_opts contexts. 
 
AVStream ** streams
A list of all streams in the file. 
 
void avfilter_register_all(void)
Initialize the filter system. 
 
#define CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators. 
 
AVFormatContext * avformat_alloc_context(void)
Allocate an AVFormatContext. 
 
int avfilter_graph_create_filter(AVFilterContext **filt_ctx, const AVFilter *filt, const char *name, const char *args, void *opaque, AVFilterGraph *graph_ctx)
Create and add a filter instance into an existing graph. 
 
void av_codec_set_lowres(AVCodecContext *avctx, int val)
 
static int64_t audio_callback_time
 
static double av_q2d(AVRational a)
Convert rational to double. 
 
AVDictionaryEntry * av_dict_get(const AVDictionary *m, const char *key, const AVDictionaryEntry *prev, int flags)
Get a dictionary entry with matching key. 
 
static int64_t get_valid_channel_layout(int64_t channel_layout, int channels)
 
int flags
Flags modifying the (de)muxer behaviour. 
 
static int packet_queue_get(PacketQueue *q, AVPacket *pkt, int block, int *serial)
 
static void sigterm_handler(int sig)
 
void parse_options(void *optctx, int argc, char **argv, const OptionDef *options, void(*parse_arg_function)(void *, const char *))
 
int avformat_network_init(void)
Do global initialization of network components. 
 
char av_get_picture_type_char(enum AVPictureType pict_type)
Return a single letter to describe the given picture type pict_type. 
 
Frame queue[FRAME_QUEUE_SIZE]
 
#define AVERROR_EOF
End of file. 
 
#define AV_LOG_VERBOSE
Detailed information. 
 
static void copy(LZOContext *c, int cnt)
Copies bytes from input to output buffer with checking. 
 
const AVClass * avformat_get_class(void)
Get the AVClass for AVFormatContext. 
 
void parse_loglevel(int argc, char **argv, const OptionDef *options)
Find the '-loglevel' option in the command line args and apply it. 
 
static void fill_rectangle(SDL_Surface *screen, int x, int y, int w, int h, int color, int update)
 
#define AV_NOSYNC_THRESHOLD
 
int64_t av_frame_get_best_effort_timestamp(const AVFrame *frame)
Accessors for some AVFrame fields. 
 
int h
height of pict, undefined when pict is not set 
 
static av_always_inline int64_t avio_tell(AVIOContext *s)
ftell() equivalent for AVIOContext. 
 
void show_help_options(const OptionDef *options, const char *msg, int req_flags, int rej_flags, int alt_flags)
Print help for all options matching specified flags. 
 
unsigned int * stream_index
 
static void duplicate_right_border_pixels(SDL_Overlay *bmp)
 
#define AV_OPT_FLAG_ENCODING_PARAM
a generic parameter which can be set by the user for muxing or encoding 
 
AVDictionary ** setup_find_stream_info_opts(AVFormatContext *s, AVDictionary *codec_opts)
Setup AVCodecContext options for avformat_find_stream_info(). 
 
AVDictionary * format_opts
 
static void * av_x_if_null(const void *p, const void *x)
Return x default pointer in case p is NULL. 
 
#define SAMPLE_ARRAY_SIZE
 
int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq)
Rescale a 64-bit integer by 2 rational numbers. 
 
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, streams, container, programs, metadata, side data, codec and time base. 
 
Main libavdevice API header. 
 
A link between two filters. 
 
int av_find_best_stream(AVFormatContext *ic, enum AVMediaType type, int wanted_stream_nb, int related_stream, AVCodec **decoder_ret, int flags)
Find the "best" stream in the file. 
 
int avcodec_close(AVCodecContext *avctx)
Close a given AVCodecContext and free all the data associated with it (but not the AVCodecContext its...
 
libswresample public header 
 
AVProgram * av_find_program_from_stream(AVFormatContext *ic, AVProgram *last, int s)
Find the programs which belong to a given stream. 
 
int width
width and height of the video frame 
 
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered. 
 
#define AV_DICT_MATCH_CASE
Only get an entry with exact-case key match. 
 
AVDictionary * metadata
Metadata that applies to the whole file. 
 
int avcodec_decode_video2(AVCodecContext *avctx, AVFrame *picture, int *got_picture_ptr, const AVPacket *avpkt)
Decode the video frame of size avpkt->size from avpkt->data into picture. 
 
static void video_refresh(void *opaque, double *remaining_time)
 
AVRational frame_rate
Frame rate of the stream on the link, or 1/0 if unknown; if left to 0/0, will be automatically be cop...
 
int sample_rate
samples per second 
 
#define AV_OPT_FLAG_FILTERING_PARAM
a generic parameter which can be set by the user for filtering 
 
int y
top left corner of pict, undefined when pict is not set 
 
static AVStream * audio_stream
 
static void frame_queue_next(FrameQueue *f)
 
void av_frame_free(AVFrame **frame)
Free the frame and any dynamically allocated objects in it, e.g. 
 
The libswresample context. 
 
static int frame_queue_nb_remaining(FrameQueue *f)
 
static int packet_queue_put_nullpacket(PacketQueue *q, int stream_index)
 
int capabilities
Codec capabilities. 
 
#define RGBA_IN(r, g, b, a, s)
 
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers. 
 
#define CURSOR_HIDE_DELAY
 
int av_read_play(AVFormatContext *s)
Start playing a network-based stream (e.g. 
 
static double compute_target_delay(double delay, VideoState *is)
 
void av_dict_free(AVDictionary **pm)
Free all the memory allocated for an AVDictionary struct and all keys and values. ...
 
int av_opt_set_int(void *obj, const char *name, int64_t val, int search_flags)
 
static int packet_queue_put_private(PacketQueue *q, AVPacket *pkt)
 
#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...
 
AVRational time_base
Define the time base used by the PTS of the frames/samples which will pass through this link...
 
simple assert() macros that are a bit more flexible than ISO C assert(). 
 
static void stream_close(VideoState *is)
 
const char * av_get_sample_fmt_name(enum AVSampleFormat sample_fmt)
Return the name of sample_fmt, or NULL if sample_fmt is not recognized. 
 
static void init_clock(Clock *c, int *queue_serial)
 
static enum ShowMode show_mode
 
New fields can be added to the end with minor version bumps. 
 
static void packet_queue_start(PacketQueue *q)
 
static const OptionDef options[]
 
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. 
 
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. 
 
static const int sample_rates[]
 
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 2 timestamps each in its own timebases. 
 
static int opt_sync(void *optctx, const char *opt, const char *arg)
 
struct SwsContext * sws_getCachedContext(struct SwsContext *context, int srcW, int srcH, enum AVPixelFormat srcFormat, int dstW, int dstH, enum AVPixelFormat dstFormat, int flags, SwsFilter *srcFilter, SwsFilter *dstFilter, const double *param)
Check if context can be reused, otherwise reallocate a new one. 
 
static void update_sample_display(VideoState *is, short *samples, int samples_size)
 
void av_rdft_calc(RDFTContext *s, FFTSample *data)
 
uint32_t end_display_time
 
static void decoder_destroy(Decoder *d)
 
int64_t pts
Same as packet pts, in AV_TIME_BASE. 
 
AVCodecContext * codec
Codec context associated with this stream. 
 
static AVPacket flush_pkt
 
uint64_t channel_layout
Channel layout of the audio data. 
 
double frame_last_returned_time
 
const AVFilter * avfilter_get_by_name(const char *name)
Get a filter definition matching the given name. 
 
char * av_asprintf(const char *fmt,...)
 
static const char * subtitle_codec_name
 
static int subtitle_disable
 
unsigned int nb_streams
Number of elements in AVFormatContext.streams. 
 
static SDL_Surface * screen
 
const char program_name[]
program name, defined by the program for show_version(). 
 
int av_read_pause(AVFormatContext *s)
Pause a network-based stream (e.g. 
 
AVInputFormat * av_find_input_format(const char *short_name)
Find AVInputFormat based on the short name of the input format. 
 
static av_always_inline void update(SilenceDetectContext *s, AVFrame *insamples, int is_silence, int64_t nb_samples_notify, AVRational time_base)
 
#define SAMPLE_QUEUE_SIZE
 
#define SUBPICTURE_QUEUE_SIZE
 
enum AVPictureType pict_type
Picture type of the frame. 
 
struct MyAVPacketList * next
 
#define AV_CH_LAYOUT_STEREO_DOWNMIX
 
static double lum(void *priv, double x, double y, int plane)
 
char filename[1024]
input or output filename 
 
AVPicture pict
data+linesize for the bitmap of this subtitle. 
 
#define AV_TIME_BASE
Internal time base represented as integer. 
 
void av_log_set_callback(void(*callback)(void *, int, const char *, va_list))
Set the logging callback. 
 
#define AV_OPT_SEARCH_CHILDREN
Search in possible children of the given object first. 
 
static void decoder_init(Decoder *d, AVCodecContext *avctx, PacketQueue *queue, SDL_cond *empty_queue_cond)
 
static int lockmgr(void **mtx, enum AVLockOp op)
 
int width
picture width / height. 
 
int main(int argc, char **argv)
 
static void show_usage(void)
 
static int opt_width(void *optctx, const char *opt, const char *arg)
 
static int get_video_frame(VideoState *is, AVFrame *frame)
 
struct AudioParams audio_src
 
static void refresh_loop_wait_event(VideoState *is, SDL_Event *event)
 
static void set_clock_speed(Clock *c, double speed)
 
#define SDL_AUDIO_MAX_CALLBACKS_PER_SEC
 
struct SwrContext * swr_alloc_set_opts(struct SwrContext *s, int64_t out_ch_layout, enum AVSampleFormat out_sample_fmt, int out_sample_rate, int64_t in_ch_layout, enum AVSampleFormat in_sample_fmt, int in_sample_rate, int log_offset, void *log_ctx)
Allocate SwrContext if needed and set/reset common parameters. 
 
void sws_freeContext(struct SwsContext *swsContext)
Free the swscaler context swsContext. 
 
int avcodec_decode_audio4(AVCodecContext *avctx, AVFrame *frame, int *got_frame_ptr, const AVPacket *avpkt)
Decode the audio frame of size avpkt->size from avpkt->data into frame. 
 
static void blend_subrect(AVPicture *dst, const AVSubtitleRect *rect, int imgw, int imgh)
 
MyAVPacketList * last_pkt
 
void av_rdft_end(RDFTContext *s)
 
static void step_to_next_frame(VideoState *is)
 
static int frame_queue_prev(FrameQueue *f)
 
static int audio_decode_frame(VideoState *is)
Decode one audio frame and return its uncompressed size. 
 
RDFTContext * av_rdft_init(int nbits, enum RDFTransformType trans)
Set up a real FFT. 
 
static int is_full_screen
 
#define AV_SYNC_THRESHOLD_MAX
 
static void fill_border(int xleft, int ytop, int width, int height, int x, int y, int w, int h, int color, int update)
 
#define SDL_AUDIO_MIN_BUFFER_SIZE
 
static int decoder_reorder_pts
 
#define AUDIO_DIFF_AVG_NB
 
static void set_clock(Clock *c, double pts, int serial)
 
int16_t sample_array[SAMPLE_ARRAY_SIZE]
 
AVFilterContext * filter_ctx
filter context associated to this input/output 
 
static const char * input_filename
 
static Frame * frame_queue_peek_last(FrameQueue *f)
 
void show_help_default(const char *opt, const char *arg)
Per-fftool specific help handler. 
 
int av_codec_get_max_lowres(const AVCodec *codec)
 
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. 
 
void avcodec_flush_buffers(AVCodecContext *avctx)
Reset the internal decoder state / flush internal buffers. 
 
const AVClass * avfilter_get_class(void)
 
A linked-list of the inputs/outputs of the filter chain. 
 
static int fs_screen_width
 
#define SAMPLE_CORRECTION_PERCENT_MAX
 
int format
format of the frame, -1 if unknown or unset Values correspond to enum AVPixelFormat for video frames...
 
int av_opt_get_int(void *obj, const char *name, int search_flags, int64_t *out_val)
 
int avformat_network_deinit(void)
Undo the initialization done by avformat_network_init. 
 
static int opt_duration(void *optctx, const char *opt, const char *arg)
 
static AVInputFormat * iformat
 
#define AV_LOG_INFO
Standard information. 
 
enum AVMediaType codec_type
 
static void calculate_display_rect(SDL_Rect *rect, int scr_xleft, int scr_ytop, int scr_width, int scr_height, int pic_width, int pic_height, AVRational pic_sar)
 
AVSampleFormat
Audio sample formats. 
 
static void do_exit(VideoState *is)
 
#define AV_TIME_BASE_Q
Internal time base represented as fractional value. 
 
char * av_strdup(const char *s)
Duplicate the string s. 
 
int sample_rate
samples per second 
 
int linesize[AV_NUM_DATA_POINTERS]
For video, size in bytes of each picture line. 
 
AVIOContext * pb
I/O context. 
 
static int exit_on_keydown
 
main external API structure. 
 
AVCodec * avcodec_find_decoder(enum AVCodecID id)
Find a registered decoder with a matching codec ID. 
 
int av_copy_packet(AVPacket *dst, const AVPacket *src)
Copy packet, including contents. 
 
av_cold void swr_free(SwrContext **ss)
Free the given SwrContext and set the pointer to NULL. 
 
double max_frame_duration
 
void avsubtitle_free(AVSubtitle *sub)
Free all allocated data in the given subtitle struct. 
 
AVRational sample_aspect_ratio
Sample aspect ratio for the video frame, 0/1 if unknown/unspecified. 
 
static void decoder_start(Decoder *d, int(*fn)(void *), void *arg)
 
int attribute_align_arg sws_scale(struct SwsContext *c, const uint8_t *const srcSlice[], const int srcStride[], int srcSliceY, int srcSliceH, uint8_t *const dst[], const int dstStride[])
swscale wrapper, so we don't need to export the SwsContext. 
 
uint8_t pi<< 24) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_U8, uint8_t,(*(constuint8_t *) pi-0x80)*(1.0f/(1<< 7))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_U8, uint8_t,(*(constuint8_t *) pi-0x80)*(1.0/(1<< 7))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S16, int16_t,(*(constint16_t *) pi >>8)+0x80) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S16, int16_t,*(constint16_t *) pi *(1.0f/(1<< 15))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S16, int16_t,*(constint16_t *) pi *(1.0/(1<< 15))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S32, int32_t,(*(constint32_t *) pi >>24)+0x80) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S32, int32_t,*(constint32_t *) pi *(1.0f/(1U<< 31))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S32, int32_t,*(constint32_t *) pi *(1.0/(1U<< 31))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_FLT, float, av_clip_uint8(lrintf(*(constfloat *) pi *(1<< 7))+0x80)) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_FLT, float, av_clip_int16(lrintf(*(constfloat *) pi *(1<< 15)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_FLT, float, av_clipl_int32(llrintf(*(constfloat *) pi *(1U<< 31)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_DBL, double, av_clip_uint8(lrint(*(constdouble *) pi *(1<< 7))+0x80)) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_DBL, double, av_clip_int16(lrint(*(constdouble *) pi *(1<< 15)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_DBL, double, av_clipl_int32(llrint(*(constdouble *) pi *(1U<< 31))))#defineSET_CONV_FUNC_GROUP(ofmt, ifmt) staticvoidset_generic_function(AudioConvert *ac){}voidff_audio_convert_free(AudioConvert **ac){if(!*ac) return;ff_dither_free(&(*ac) ->dc);av_freep(ac);}AudioConvert *ff_audio_convert_alloc(AVAudioResampleContext *avr, enumAVSampleFormatout_fmt, enumAVSampleFormatin_fmt, intchannels, intsample_rate, intapply_map){AudioConvert *ac;intin_planar, out_planar;ac=av_mallocz(sizeof(*ac));if(!ac) returnNULL;ac->avr=avr;ac->out_fmt=out_fmt;ac->in_fmt=in_fmt;ac->channels=channels;ac->apply_map=apply_map;if(avr->dither_method!=AV_RESAMPLE_DITHER_NONE &&av_get_packed_sample_fmt(out_fmt)==AV_SAMPLE_FMT_S16 &&av_get_bytes_per_sample(in_fmt)>2){ac->dc=ff_dither_alloc(avr, out_fmt, in_fmt, channels, sample_rate, apply_map);if(!ac->dc){av_free(ac);returnNULL;}returnac;}in_planar=ff_sample_fmt_is_planar(in_fmt, channels);out_planar=ff_sample_fmt_is_planar(out_fmt, channels);if(in_planar==out_planar){ac->func_type=CONV_FUNC_TYPE_FLAT;ac->planes=in_planar?ac->channels:1;}elseif(in_planar) ac->func_type=CONV_FUNC_TYPE_INTERLEAVE;elseac->func_type=CONV_FUNC_TYPE_DEINTERLEAVE;set_generic_function(ac);if(ARCH_AARCH64) ff_audio_convert_init_aarch64(ac);if(ARCH_ARM) ff_audio_convert_init_arm(ac);if(ARCH_X86) ff_audio_convert_init_x86(ac);returnac;}intff_audio_convert(AudioConvert *ac, AudioData *out, AudioData *in){intuse_generic=1;intlen=in->nb_samples;intp;if(ac->dc){av_log(ac->avr, AV_LOG_TRACE,"%dsamples-audio_convert:%sto%s(dithered)\n", len, av_get_sample_fmt_name(ac->in_fmt), av_get_sample_fmt_name(ac->out_fmt));returnff_convert_dither(ac-> in
 
static double vp_duration(VideoState *is, Frame *vp, Frame *nextvp)
 
static const char * window_title
 
static Frame * frame_queue_peek_next(FrameQueue *f)
 
static int audio_thread(void *arg)
 
int av_dict_set(AVDictionary **pm, const char *key, const char *value, int flags)
Set the given entry in *pm, overwriting an existing entry. 
 
BYTE int const BYTE int int int height
 
static void frame_queue_signal(FrameQueue *f)
 
int sample_rate
Sample rate of the audio data. 
 
int configure_filtergraph(FilterGraph *fg)
 
static void free_picture(Frame *vp)
 
int av_frame_get_channels(const AVFrame *frame)
 
static const AVFilterPad inputs[]
 
int pad_idx
index of the filt_ctx pad to use for linking 
 
int av_samples_get_buffer_size(int *linesize, int nb_channels, int nb_samples, enum AVSampleFormat sample_fmt, int align)
Get the required buffer size for the given audio parameters. 
 
rational number numerator/denominator 
 
#define AV_SYNC_THRESHOLD_MIN
 
#define AV_OPT_FLAG_DECODING_PARAM
a generic parameter which can be set by the user for demuxing or decoding 
 
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...
 
static void video_audio_display(VideoState *s)
 
#define EXTERNAL_CLOCK_SPEED_MAX
 
struct SwsContext * sws_opts
 
static int decoder_decode_frame(Decoder *d, AVFrame *frame, AVSubtitle *sub)
 
discard useless packets like 0 size packets in avi 
 
size_t av_strlcatf(char *dst, size_t size, const char *fmt,...)
 
static int is_realtime(AVFormatContext *s)
 
static void check_external_clock_speed(VideoState *is)
 
int queue_attachments_req
 
int avcodec_open2(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options)
Initialize the AVCodecContext to use the given AVCodec. 
 
static void frame_queue_unref_item(Frame *vp)
 
int error
contains the error code or 0 if no error happened 
 
int attribute_align_arg swr_convert(struct SwrContext *s, uint8_t *out_arg[SWR_CH_MAX], int out_count, const uint8_t *in_arg[SWR_CH_MAX], int in_count)
 
SDL_cond * empty_queue_cond
 
int attribute_align_arg av_buffersrc_add_frame(AVFilterContext *ctx, AVFrame *frame)
Add a frame to the buffer source. 
 
int av_read_frame(AVFormatContext *s, AVPacket *pkt)
Return the next frame of a stream. 
 
int avformat_seek_file(AVFormatContext *s, int stream_index, int64_t min_ts, int64_t ts, int64_t max_ts, int flags)
Seek to timestamp ts. 
 
int64_t pkt_pts
PTS copied from the AVPacket that was decoded to produce this frame. 
 
double parse_number_or_die(const char *context, const char *numstr, int type, double min, double max)
Parse a string and return its corresponding value as a double. 
 
static int stream_component_open(VideoState *is, int stream_index)
 
char * name
unique name for this input/output in the list 
 
static int64_t cursor_last_shown
 
static int frame_queue_init(FrameQueue *f, PacketQueue *pktq, int max_size, int keep_last)
 
static int opt_frame_size(void *optctx, const char *opt, const char *arg)
 
#define RGB_TO_U_CCIR(r1, g1, b1, shift)
 
void av_frame_unref(AVFrame *frame)
Unreference all the buffers referenced by frame and reset the frame fields. 
 
static int64_t pts
Global timestamp for the audio frames. 
 
int64_t av_gettime_relative(void)
Get the current time in microseconds since some unspecified starting point. 
 
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. 
 
AVCodec * avcodec_find_decoder_by_name(const char *name)
Find a registered decoder with the specified name. 
 
static int queue_picture(VideoState *is, AVFrame *src_frame, double pts, double duration, int64_t pos, int serial)
 
int64_t start_time
Position of the first frame of the component, in AV_TIME_BASE fractional seconds. ...
 
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes. 
 
int av_get_bytes_per_sample(enum AVSampleFormat sample_fmt)
Return number of bytes per sample. 
 
static int synchronize_audio(VideoState *is, int nb_samples)
 
#define RGB_TO_V_CCIR(r1, g1, b1, shift)
 
SDL_cond * continue_read_thread
 
static void frame_queue_destory(FrameQueue *f)
 
static int64_t frame_queue_last_pos(FrameQueue *f)
 
int64_t pkt_dts
DTS copied from the AVPacket that triggered returning this frame. 
 
static int exit_on_mousedown
 
static int op(uint8_t **dst, const uint8_t *dst_end, GetByteContext *gb, int pixel, int count, int *x, int width, int linesize)
Perform decode operation. 
 
#define CODEC_FLAG_EMU_EDGE
 
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_fast_malloc(void *ptr, unsigned int *size, size_t min_size)
Allocate a buffer, reusing the given one if large enough. 
 
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples) 
 
#define YUVA_OUT(d, y, u, v, a)
 
static int video_thread(void *arg)
 
AVFilterInOut * avfilter_inout_alloc(void)
Allocate a single AVFilterInOut entry. 
 
static void set_default_window_size(int width, int height, AVRational sar)
 
AVDictionary * codec_opts
 
struct AudioParams audio_tgt
 
#define ALPHA_BLEND(a, oldp, newp, s)
 
AVRational av_codec_get_pkt_timebase(const AVCodecContext *avctx)
 
enum AVSampleFormat av_get_packed_sample_fmt(enum AVSampleFormat sample_fmt)
Get the packed alternative form of the given sample format. 
 
static int display_disable
 
int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options)
Read packets of a media file to get stream information. 
 
int64_t start_time
Decoding: pts of the first frame of the stream in presentation order, in stream time base...
 
static int opt_seek(void *optctx, const char *opt, const char *arg)
 
int av_dict_set_int(AVDictionary **pm, const char *key, int64_t value, int flags)
Convenience wrapper for av_dict_set that converts the value to a string and stores it...
 
int disposition
AV_DISPOSITION_* bit field. 
 
uint32_t start_display_time
 
static void update_video_pts(VideoState *is, double pts, int64_t pos, int serial)
 
AVRational time_base
time base in which the start/end timestamps are specified 
 
uint64_t channel_layout
channel layout of current buffer (see libavutil/channel_layout.h) 
 
void av_init_packet(AVPacket *pkt)
Initialize optional fields of a packet with default values. 
 
void uninit_opts(void)
Uninitialize the cmdutils option system, in particular free the *_opts contexts and their contents...
 
int channels
Number of channels. 
 
struct AVInputFormat * iformat
The input container format. 
 
void avformat_close_input(AVFormatContext **s)
Close an opened input AVFormatContext. 
 
#define RGB_TO_Y_CCIR(r, g, b)
 
#define GROW_ARRAY(array, nb_elems)
 
static av_always_inline int diff(const uint32_t a, const uint32_t b)
 
static int infinite_buffer
 
#define AVERROR_OPTION_NOT_FOUND
Option not found. 
 
int eof_reached
true if eof reached 
 
int channels
number of audio channels 
 
int64_t av_frame_get_pkt_pos(const AVFrame *frame)
 
unsigned int audio_buf1_size
 
void av_log_set_flags(int arg)
 
static void decoder_abort(Decoder *d, FrameQueue *fq)
 
static int packet_queue_put(PacketQueue *q, AVPacket *pkt)
 
void show_help_children(const AVClass *class, int flags)
Show help for all options with given flags in class and all its children. 
 
int avfilter_graph_parse_ptr(AVFilterGraph *graph, const char *filters, AVFilterInOut **inputs, AVFilterInOut **outputs, void *log_ctx)
Add a graph described by a string to a graph. 
 
uint8_t pi<< 24) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_U8, uint8_t,(*(constuint8_t *) pi-0x80)*(1.0f/(1<< 7))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_U8, uint8_t,(*(constuint8_t *) pi-0x80)*(1.0/(1<< 7))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S16, int16_t,(*(constint16_t *) pi >>8)+0x80) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S16, int16_t,*(constint16_t *) pi *(1.0f/(1<< 15))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S16, int16_t,*(constint16_t *) pi *(1.0/(1<< 15))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S32, int32_t,(*(constint32_t *) pi >>24)+0x80) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S32, int32_t,*(constint32_t *) pi *(1.0f/(1U<< 31))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S32, int32_t,*(constint32_t *) pi *(1.0/(1U<< 31))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_FLT, float, av_clip_uint8(lrintf(*(constfloat *) pi *(1<< 7))+0x80)) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_FLT, float, av_clip_int16(lrintf(*(constfloat *) pi *(1<< 15)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_FLT, float, av_clipl_int32(llrintf(*(constfloat *) pi *(1U<< 31)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_DBL, double, av_clip_uint8(lrint(*(constdouble *) pi *(1<< 7))+0x80)) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_DBL, double, av_clip_int16(lrint(*(constdouble *) pi *(1<< 15)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_DBL, double, av_clipl_int32(llrint(*(constdouble *) pi *(1U<< 31))))#defineSET_CONV_FUNC_GROUP(ofmt, ifmt) staticvoidset_generic_function(AudioConvert *ac){}voidff_audio_convert_free(AudioConvert **ac){if(!*ac) return;ff_dither_free(&(*ac) ->dc);av_freep(ac);}AudioConvert *ff_audio_convert_alloc(AVAudioResampleContext *avr, enumAVSampleFormatout_fmt, enumAVSampleFormatin_fmt, intchannels, intsample_rate, intapply_map){AudioConvert *ac;intin_planar, out_planar;ac=av_mallocz(sizeof(*ac));if(!ac) returnNULL;ac->avr=avr;ac->out_fmt=out_fmt;ac->in_fmt=in_fmt;ac->channels=channels;ac->apply_map=apply_map;if(avr->dither_method!=AV_RESAMPLE_DITHER_NONE &&av_get_packed_sample_fmt(out_fmt)==AV_SAMPLE_FMT_S16 &&av_get_bytes_per_sample(in_fmt)>2){ac->dc=ff_dither_alloc(avr, out_fmt, in_fmt, channels, sample_rate, apply_map);if(!ac->dc){av_free(ac);returnNULL;}returnac;}in_planar=ff_sample_fmt_is_planar(in_fmt, channels);out_planar=ff_sample_fmt_is_planar(out_fmt, channels);if(in_planar==out_planar){ac->func_type=CONV_FUNC_TYPE_FLAT;ac->planes=in_planar?ac->channels:1;}elseif(in_planar) ac->func_type=CONV_FUNC_TYPE_INTERLEAVE;elseac->func_type=CONV_FUNC_TYPE_DEINTERLEAVE;set_generic_function(ac);if(ARCH_AARCH64) ff_audio_convert_init_aarch64(ac);if(ARCH_ARM) ff_audio_convert_init_arm(ac);if(ARCH_X86) ff_audio_convert_init_x86(ac);returnac;}intff_audio_convert(AudioConvert *ac, AudioData *out, AudioData *in){intuse_generic=1;intlen=in->nb_samples;intp;if(ac->dc){av_log(ac->avr, AV_LOG_TRACE,"%dsamples-audio_convert:%sto%s(dithered)\n", len, av_get_sample_fmt_name(ac->in_fmt), av_get_sample_fmt_name(ac->out_fmt));returnff_convert_dither(ac-> out
 
int64_t dts
Decompression timestamp in AVStream->time_base units; the time at which the packet is decompressed...
 
int64_t av_get_default_channel_layout(int nb_channels)
Return default channel layout for a given number of channels. 
 
int bit_rate
Total stream bitrate in bit/s, 0 if not available. 
 
static enum AVSampleFormat sample_fmts[]
 
int64_t duration
Duration of the stream, in AV_TIME_BASE fractional seconds. 
 
static const char * video_codec_name
 
int64_t pts_correction_num_faulty_pts
Current statistics for PTS correction. 
 
static Frame * frame_queue_peek_writable(FrameQueue *f)
 
#define AV_DICT_IGNORE_SUFFIX
Return first entry in a dictionary whose first part corresponds to the search key, ignoring the suffix of the found key string. 
 
static int subtitle_thread(void *arg)
 
#define AV_LOG_FATAL
Something went wrong and recovery is not possible. 
 
static double get_master_clock(VideoState *is)
 
#define av_malloc_array(a, b)
 
int avio_feof(AVIOContext *s)
feof() equivalent for AVIOContext. 
 
#define FFSWAP(type, a, b)
 
const char * av_get_pix_fmt_name(enum AVPixelFormat pix_fmt)
Return the short name for a pixel format, NULL in case pix_fmt is unknown. 
 
AVRational time_base
This is the fundamental unit of time (in seconds) in terms of which frame timestamps are represented...
 
static double cr(void *priv, double x, double y)
 
unsigned int audio_buf_size
 
uint8_t ** extended_data
pointers to the data planes/channels. 
 
#define YUVA_IN(y, u, v, a, s, pal)
 
enum AVDiscard discard
Selects which packets can be discarded at will and do not need to be demuxed. 
 
static void video_display(VideoState *is)
 
static const char * wanted_stream_spec[AVMEDIA_TYPE_NB]
 
static int compute_mod(int a, int b)
 
AVPixelFormat
Pixel format. 
 
This structure stores compressed data. 
 
void av_register_all(void)
Initialize libavformat and register all the muxers, demuxers and protocols. 
 
int av_opt_set(void *obj, const char *name, const char *val, int search_flags)
 
static void sdl_audio_callback(void *opaque, Uint8 *stream, int len)
 
int nb_samples
number of audio samples (per channel) described by this frame 
 
void * av_mallocz(size_t size)
Allocate a block of size bytes with alignment suitable for all memory accesses (including vectors if ...
 
static void sync_clock_to_slave(Clock *c, Clock *slave)
 
static void toggle_full_screen(VideoState *is)
 
int64_t pts
Presentation timestamp in AVStream->time_base units; the time at which the decompressed packet will b...
 
static int fs_screen_height
 
AVPacket attached_pic
For streams with AV_DISPOSITION_ATTACHED_PIC disposition, this packet will contain the attached pictu...
 
#define AV_NOPTS_VALUE
Undefined timestamp value. 
 
av_cold int swr_init(struct SwrContext *s)
Initialize context after user parameters have been set. 
 
simple arithmetic expression evaluator 
 
static Frame * frame_queue_peek_readable(FrameQueue *f)