diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2013-03-21 13:54:04 +0100 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2013-03-21 13:54:04 +0100 |
commit | 4257b804e2354db07e66ebfd966d7d13f49c7895 (patch) | |
tree | c33fbe3ef3fe68ff196094483aa9a7d7fc6b53b4 | |
parent | f3980b75f82b83217260c50e71db8606390a2340 (diff) | |
download | ffmpeg-4257b804e2354db07e66ebfd966d7d13f49c7895.tar.gz |
ffmpeg: Replace -deinterlace (which was broken by the buffer ref stuff) with yadif injection
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r-- | ffmpeg.c | 46 | ||||
-rw-r--r-- | ffmpeg_filter.c | 18 | ||||
-rw-r--r-- | ffmpeg_opt.c | 13 |
3 files changed, 19 insertions, 58 deletions
@@ -701,49 +701,6 @@ static void do_audio_out(AVFormatContext *s, OutputStream *ost, } } -#if FF_API_DEINTERLACE -static void pre_process_video_frame(InputStream *ist, AVPicture *picture, void **bufp) -{ - AVCodecContext *dec; - AVPicture *picture2; - AVPicture picture_tmp; - uint8_t *buf = 0; - - dec = ist->st->codec; - - /* deinterlace : must be done before any resize */ - if (FF_API_DEINTERLACE && do_deinterlace) { - int size; - - /* create temporary picture */ - size = avpicture_get_size(dec->pix_fmt, dec->width, dec->height); - if (size < 0) - return; - buf = av_malloc(size); - if (!buf) - return; - - picture2 = &picture_tmp; - avpicture_fill(picture2, buf, dec->pix_fmt, dec->width, dec->height); - - if (avpicture_deinterlace(picture2, picture, - dec->pix_fmt, dec->width, dec->height) < 0) { - /* if error, do not deinterlace */ - av_log(NULL, AV_LOG_WARNING, "Deinterlacing failed\n"); - av_free(buf); - buf = NULL; - picture2 = picture; - } - } else { - picture2 = picture; - } - - if (picture != picture2) - *picture = *picture2; - *bufp = buf; -} -#endif - static void do_subtitle_out(AVFormatContext *s, OutputStream *ost, InputStream *ist, @@ -1712,9 +1669,6 @@ static int decode_video(InputStream *ist, AVPacket *pkt, int *got_output) } pkt->size = 0; -#if FF_API_DEINTERLACE - pre_process_video_frame(ist, (AVPicture *)decoded_frame, &buffer_to_free); -#endif rate_emu_sleep(ist); diff --git a/ffmpeg_filter.c b/ffmpeg_filter.c index 056b1df1c1..654c19d4c3 100644 --- a/ffmpeg_filter.c +++ b/ffmpeg_filter.c @@ -604,6 +604,24 @@ static int configure_input_video_filter(FilterGraph *fg, InputFilter *ifilter, pad_idx = 0; } + if (do_deinterlace) { + AVFilterContext *yadif; + + snprintf(name, sizeof(name), "deinterlace input from stream %d:%d", + ist->file_index, ist->st->index); + if ((ret = avfilter_graph_create_filter(&yadif, + avfilter_get_by_name("yadif"), + name, "", NULL, + fg->graph)) < 0) + return ret; + + if ((ret = avfilter_link(yadif, 0, first_filter, pad_idx)) < 0) + return ret; + + first_filter = yadif; + pad_idx = 0; + } + if ((ret = avfilter_link(ifilter->filter, 0, first_filter, pad_idx)) < 0) return ret; return 0; diff --git a/ffmpeg_opt.c b/ffmpeg_opt.c index 4b2cfeb794..716696c8f3 100644 --- a/ffmpeg_opt.c +++ b/ffmpeg_opt.c @@ -2233,15 +2233,6 @@ static int opt_vsync(void *optctx, const char *opt, const char *arg) return 0; } -#if FF_API_DEINTERLACE -static int opt_deinterlace(void *optctx, const char *opt, const char *arg) -{ - av_log(NULL, AV_LOG_WARNING, "-%s is deprecated, use -filter:v yadif instead\n", opt); - do_deinterlace = 1; - return 0; -} -#endif - static int opt_timecode(void *optctx, const char *opt, const char *arg) { OptionsContext *o = optctx; @@ -2656,10 +2647,8 @@ const OptionDef options[] = { { "passlogfile", OPT_VIDEO | HAS_ARG | OPT_STRING | OPT_EXPERT | OPT_SPEC | OPT_OUTPUT, { .off = OFFSET(passlogfiles) }, "select two pass log file name prefix", "prefix" }, -#if FF_API_DEINTERLACE - { "deinterlace", OPT_VIDEO | OPT_EXPERT , { .func_arg = opt_deinterlace }, + { "deinterlace", OPT_VIDEO | OPT_BOOL | OPT_EXPERT, { &do_deinterlace }, "this option is deprecated, use the yadif filter instead" }, -#endif { "psnr", OPT_VIDEO | OPT_BOOL | OPT_EXPERT, { &do_psnr }, "calculate PSNR of compressed frames" }, { "vstats", OPT_VIDEO | OPT_EXPERT , { &opt_vstats }, |