[FFmpeg-cvslog] ffmpeg: Replace -deinterlace (which was broken by the buffer ref stuff) with yadif injection
Michael Niedermayer
git at videolan.org
Thu Mar 21 14:40:19 CET 2013
ffmpeg | branch: master | Michael Niedermayer <michaelni at gmx.at> | Thu Mar 21 13:54:04 2013 +0100| [4257b804e2354db07e66ebfd966d7d13f49c7895] | committer: Michael Niedermayer
ffmpeg: Replace -deinterlace (which was broken by the buffer ref stuff) with yadif injection
Signed-off-by: Michael Niedermayer <michaelni at gmx.at>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=4257b804e2354db07e66ebfd966d7d13f49c7895
---
ffmpeg.c | 46 ----------------------------------------------
ffmpeg_filter.c | 18 ++++++++++++++++++
ffmpeg_opt.c | 13 +------------
3 files changed, 19 insertions(+), 58 deletions(-)
diff --git a/ffmpeg.c b/ffmpeg.c
index 12c7a28..17740d1 100644
--- a/ffmpeg.c
+++ b/ffmpeg.c
@@ -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 056b1df..654c19d 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 4b2cfeb..716696c 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 },
More information about the ffmpeg-cvslog
mailing list