X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=ffplay.c;h=32ae45c0aebee5828de846df0dfcf6d047c20718;hb=1ae4518d73d4eb632cb98eda8f0e23d50d6757e4;hp=7ea077d3bd8835bcbe1e8109f379dbd319d697e0;hpb=c30a4489b444020ef951c1f0583afd8679c07c78;p=ffmpeg diff --git a/ffplay.c b/ffplay.c index 7ea077d3bd8..32ae45c0aeb 100644 --- a/ffplay.c +++ b/ffplay.c @@ -27,6 +27,7 @@ #include "libavdevice/avdevice.h" #include "libswscale/swscale.h" #include "libavcodec/audioconvert.h" +#include "libavcodec/opt.h" #include "cmdutils.h" @@ -207,7 +208,7 @@ static int idct = FF_IDCT_AUTO; static enum AVDiscard skip_frame= AVDISCARD_DEFAULT; static enum AVDiscard skip_idct= AVDISCARD_DEFAULT; static enum AVDiscard skip_loop_filter= AVDISCARD_DEFAULT; -static int error_resilience = FF_ER_CAREFUL; +static int error_recognition = FF_ER_CAREFUL; static int error_concealment = 3; static int decoder_reorder_pts= 0; @@ -731,10 +732,10 @@ static void video_image_display(VideoState *is) /* XXX: we suppose the screen has a 1.0 pixel ratio */ height = is->height; - width = ((int)rint(height * aspect_ratio)) & -3; + width = ((int)rint(height * aspect_ratio)) & ~1; if (width > is->width) { width = is->width; - height = ((int)rint(width / aspect_ratio)) & -3; + height = ((int)rint(width / aspect_ratio)) & ~1; } x = (is->width - width) / 2; y = (is->height - height) / 2; @@ -916,6 +917,7 @@ static Uint32 sdl_refresh_timer_cb(Uint32 interval, void *opaque) /* schedule a video refresh in 'delay' ms */ static void schedule_refresh(VideoState *is, int delay) { + if(!delay) delay=1; //SDL seems to be buggy when the delay is 0 SDL_AddTimer(delay, sdl_refresh_timer_cb, is); } @@ -1266,6 +1268,7 @@ static int queue_picture(VideoState *is, AVFrame *src_frame, double pts) pict.linesize[0] = vp->bmp->pitches[0]; pict.linesize[1] = vp->bmp->pitches[2]; pict.linesize[2] = vp->bmp->pitches[1]; + sws_flags = av_get_int(sws_opts, "sws_flags", NULL); img_convert_ctx = sws_getCachedContext(img_convert_ctx, is->video_st->codec->width, is->video_st->codec->height, is->video_st->codec->pix_fmt, @@ -1733,8 +1736,11 @@ static int stream_component_open(VideoState *is, int stream_index) enc->skip_frame= skip_frame; enc->skip_idct= skip_idct; enc->skip_loop_filter= skip_loop_filter; - enc->error_resilience= error_resilience; + enc->error_recognition= error_recognition; enc->error_concealment= error_concealment; + + set_context_opts(enc, avctx_opts[enc->codec_type], 0); + if (!codec || avcodec_open(enc, codec) < 0) return -1; @@ -2488,10 +2494,11 @@ static const OptionDef options[] = { { "skipframe", OPT_INT | HAS_ARG | OPT_EXPERT, {(void*)&skip_frame}, "", "" }, { "skipidct", OPT_INT | HAS_ARG | OPT_EXPERT, {(void*)&skip_idct}, "", "" }, { "idct", OPT_INT | HAS_ARG | OPT_EXPERT, {(void*)&idct}, "set idct algo", "algo" }, - { "er", OPT_INT | HAS_ARG | OPT_EXPERT, {(void*)&error_resilience}, "set error detection threshold (0-4)", "threshold" }, + { "er", OPT_INT | HAS_ARG | OPT_EXPERT, {(void*)&error_recognition}, "set error detection threshold (0-4)", "threshold" }, { "ec", OPT_INT | HAS_ARG | OPT_EXPERT, {(void*)&error_concealment}, "set error concealment options", "bit_mask" }, { "sync", HAS_ARG | OPT_FUNC2 | OPT_EXPERT, {(void*)opt_sync}, "set audio-video sync. type (type=audio/video/ext)", "type" }, { "threads", HAS_ARG | OPT_FUNC2 | OPT_EXPERT, {(void*)opt_thread_count}, "thread count", "count" }, + { "default", OPT_FUNC2 | HAS_ARG | OPT_AUDIO | OPT_VIDEO | OPT_EXPERT, {(void*)opt_default}, "generic catch all option", "" }, { NULL, }, }; @@ -2528,13 +2535,19 @@ static void opt_input_file(const char *filename) /* Called from the main */ int main(int argc, char **argv) { - int flags; + int flags, i; /* register all codecs, demux and protocols */ avcodec_register_all(); avdevice_register_all(); av_register_all(); + for(i=0; i