Signed-off-by: Michael Niedermayer <michaelni@gmx.at>tags/n2.0
@@ -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, | static void do_subtitle_out(AVFormatContext *s, | ||||
OutputStream *ost, | OutputStream *ost, | ||||
InputStream *ist, | InputStream *ist, | ||||
@@ -1712,9 +1669,6 @@ static int decode_video(InputStream *ist, AVPacket *pkt, int *got_output) | |||||
} | } | ||||
pkt->size = 0; | pkt->size = 0; | ||||
#if FF_API_DEINTERLACE | |||||
pre_process_video_frame(ist, (AVPicture *)decoded_frame, &buffer_to_free); | |||||
#endif | |||||
rate_emu_sleep(ist); | rate_emu_sleep(ist); | ||||
@@ -604,6 +604,24 @@ static int configure_input_video_filter(FilterGraph *fg, InputFilter *ifilter, | |||||
pad_idx = 0; | 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) | if ((ret = avfilter_link(ifilter->filter, 0, first_filter, pad_idx)) < 0) | ||||
return ret; | return ret; | ||||
return 0; | return 0; | ||||
@@ -2233,15 +2233,6 @@ static int opt_vsync(void *optctx, const char *opt, const char *arg) | |||||
return 0; | 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) | static int opt_timecode(void *optctx, const char *opt, const char *arg) | ||||
{ | { | ||||
OptionsContext *o = optctx; | OptionsContext *o = optctx; | ||||
@@ -2656,10 +2647,8 @@ const OptionDef options[] = { | |||||
{ "passlogfile", OPT_VIDEO | HAS_ARG | OPT_STRING | OPT_EXPERT | OPT_SPEC | | { "passlogfile", OPT_VIDEO | HAS_ARG | OPT_STRING | OPT_EXPERT | OPT_SPEC | | ||||
OPT_OUTPUT, { .off = OFFSET(passlogfiles) }, | OPT_OUTPUT, { .off = OFFSET(passlogfiles) }, | ||||
"select two pass log file name prefix", "prefix" }, | "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" }, | "this option is deprecated, use the yadif filter instead" }, | ||||
#endif | |||||
{ "psnr", OPT_VIDEO | OPT_BOOL | OPT_EXPERT, { &do_psnr }, | { "psnr", OPT_VIDEO | OPT_BOOL | OPT_EXPERT, { &do_psnr }, | ||||
"calculate PSNR of compressed frames" }, | "calculate PSNR of compressed frames" }, | ||||
{ "vstats", OPT_VIDEO | OPT_EXPERT , { &opt_vstats }, | { "vstats", OPT_VIDEO | OPT_EXPERT , { &opt_vstats }, | ||||