FFmpeg
|
Motion Compensation Deinterlacer Ported from MPlayer libmpcodecs/vf_mcdeint.c. More...
#include "libavutil/opt.h"
#include "libavutil/pixdesc.h"
#include "libavcodec/avcodec.h"
#include "avfilter.h"
#include "formats.h"
#include "internal.h"
Go to the source code of this file.
Data Structures | |
struct | MCDeintContext |
Macros | |
#define | OFFSET(x) offsetof(MCDeintContext, x) |
#define | FLAGS AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_FILTERING_PARAM |
#define | CONST(name, help, val, unit) { name, help, 0, AV_OPT_TYPE_CONST, {.i64=val}, INT_MIN, INT_MAX, FLAGS, unit } |
#define | DELTA(j) av_clip(j, -x, w-1-x) |
#define | GET_SCORE_EDGE(j) |
#define | GET_SCORE(j) |
#define | CHECK_EDGE(j) |
#define | CHECK(j) |
Enumerations | |
enum | MCDeintMode { MODE_FAST = 0, MODE_MEDIUM, MODE_SLOW, MODE_EXTRA_SLOW, MODE_NB } |
enum | MCDeintParity { PARITY_TFF = 0, PARITY_BFF = 1 } |
Functions | |
AVFILTER_DEFINE_CLASS (mcdeint) | |
static int | config_props (AVFilterLink *inlink) |
static av_cold void | uninit (AVFilterContext *ctx) |
static int | query_formats (AVFilterContext *ctx) |
static int | filter_frame (AVFilterLink *inlink, AVFrame *inpic) |
CHECK (-1) CHECK(-2)}}}}CHECK(1) CHECK(2)}}}}}if(diff0+diff1 > 0) temp- | |
for (y=0;y< h;y++) | |
if (ret< 0) | |
return | ff_filter_frame (outlink, outpic) |
Variables | |
static const AVOption | mcdeint_options [] |
else int | spatial_score = GET_SCORE(0) - 1 |
else | temp = (diff0 + diff1 + FFABS(FFABS(diff0) - FFABS(diff1)) / 2) / 2 |
* | filp = *dstp = temp > 255U ? ~(temp>>31) : temp |
else | |
mcdeint | parity = 1 |
end | __pad0__ |
av_frame_free & | inpic |
static const AVFilterPad | mcdeint_inputs [] |
static const AVFilterPad | mcdeint_outputs [] |
AVFilter | ff_vf_mcdeint |
Motion Compensation Deinterlacer Ported from MPlayer libmpcodecs/vf_mcdeint.c.
Known Issues:
The motion estimation is somewhat at the mercy of the input, if the input frames are created purely based on spatial interpolation then for example a thin black line or another random and not interpolateable pattern will cause problems. Note: completely ignoring the "unavailable" lines during motion estimation did not look any better, so the most obvious solution would be to improve tfields or penalize problematic motion vectors.
If non iterative ME is used then snow currently ignores the OBMC window and as a result sometimes creates artifacts.
Only past frames are used, we should ideally use future frames too, something like filtering the whole movie in forward and then backward direction seems like an interesting idea but the current filter framework is FAR from supporting such things.
Combining the motion compensated image with the input image also is not as trivial as it seems, simple blindly taking even lines from one and odd ones from the other does not work at all as ME/MC sometimes has nothing in the previous frames which matches the current. The current algorithm has been found by trial and error and almost certainly can be improved...
Definition in file vf_mcdeint.c.
#define OFFSET | ( | x | ) | offsetof(MCDeintContext, x) |
Definition at line 80 of file vf_mcdeint.c.
#define FLAGS AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_FILTERING_PARAM |
Definition at line 81 of file vf_mcdeint.c.
#define CONST | ( | name, | |
help, | |||
val, | |||
unit | |||
) | { name, help, 0, AV_OPT_TYPE_CONST, {.i64=val}, INT_MIN, INT_MAX, FLAGS, unit } |
Definition at line 82 of file vf_mcdeint.c.
#define DELTA | ( | j | ) | av_clip(j, -x, w-1-x) |
#define GET_SCORE_EDGE | ( | j | ) |
Referenced by filter_frame().
#define GET_SCORE | ( | j | ) |
#define CHECK_EDGE | ( | j | ) |
Referenced by filter_frame().
#define CHECK | ( | j | ) |
enum MCDeintMode |
Enumerator | |
---|---|
MODE_FAST | |
MODE_MEDIUM | |
MODE_SLOW | |
MODE_EXTRA_SLOW | |
MODE_NB |
Definition at line 59 of file vf_mcdeint.c.
enum MCDeintParity |
Enumerator | |
---|---|
PARITY_TFF |
top field first |
PARITY_BFF |
bottom field first |
Definition at line 67 of file vf_mcdeint.c.
AVFILTER_DEFINE_CLASS | ( | mcdeint | ) |
|
static |
Definition at line 101 of file vf_mcdeint.c.
|
static |
Definition at line 153 of file vf_mcdeint.c.
|
static |
Definition at line 160 of file vf_mcdeint.c.
|
static |
Definition at line 171 of file vf_mcdeint.c.
CHECK | ( | - | 1 | ) |
Referenced by aud(), dht(), dqt(), filler(), frame(), frame_header_obu(), frame_obu(), frame_size(), frame_size_with_refs(), global_motion_params(), hrd_parameters(), metadata_obu(), pps(), sei(), sei_payload(), sei_pic_timing(), sequence_header_obu(), slice_header(), slice_segment_header(), sps(), sps_extension(), tile_group_obu(), uncompressed_header(), vps(), and vui_parameters().
for | ( | ) |
Definition at line 265 of file vf_mcdeint.c.
if | ( | ) |
Definition at line 279 of file vf_mcdeint.c.
Referenced by aac_encode_init(), add_audio_device(), add_video_device(), adpcm_encode_init(), adx_encode_frame(), amf_init_context(), amr_wb_encode_frame(), ape_decode_value_3860(), ape_decode_value_3900(), ape_read_header(), apply_filter(), apply_lpc(), asf_read_pts(), asf_read_subpayload(), atrac3p_decode_frame(), av_encryption_init_info_add_side_data(), av_hwdevice_ctx_create(), av_hwdevice_ctx_create_derived(), av_hwdevice_ctx_init(), av_hwdevice_get_hwframe_constraints(), av_hwdevice_hwconfig_alloc(), av_hwframe_ctx_create_derived(), av_hwframe_ctx_init(), av_hwframe_get_buffer(), av_hwframe_map(), av_hwframe_transfer_get_formats(), av_opt_query_ranges(), av_reduce(), av_timecode_init_from_string(), avcodec_get_hw_frames_parameters(), avcodec_open2(), avcodec_string(), average_quantized_coeffs(), avformat_find_stream_info(), avformat_open_input(), avgblur_opencl_filter_frame(), avi_write_header(), best_codebook_path_cost(), bilateral_obmc(), binkb_read_bundle(), buffer_needs_copy(), buffer_offset(), build_frame_code(), calculate_bitrate(), check_header_mismatch(), check_idct(), check_idct_dc4(), check_loopfilter_simple(), check_luma_dc_wht(), cinaudio_decode_frame(), cmv_decode_inter(), cng_encode_frame(), commit_bitstream_and_slice_buffer(), config_output(), config_props(), config_video_output(), construct_perm_table(), control_port_cb(), convert_coeffs(), deblocking_filter_CTB(), decklink_autodetect(), decklink_write_video_packet(), decode_5(), decode_block(), decode_buffering_period(), decode_cabac_mb_skip(), decode_channel(), decode_exp_vlc(), decode_frame(), decode_init(), decode_lowdelay(), decode_mb_mode(), decode_mode(), decode_move(), decode_nal_sei_pic_timing(), decode_picture(), decode_picture_timing(), decode_ppc(), decode_receive_frame_internal(), decode_rgbx(), decode_slice_header(), decode_subframe(), decode_tilehdr(), decode_ybr10(), decode_yry10(), decompress_texture_thread(), dnxhd_decode_frame(), dpcm_decode_frame(), dshow_cycle_pins(), dshow_set_audio_buffer_size(), dump_audioservicetype(), dump_cpb(), dump_fir(), dump_spherical(), dv_extract_audio(), dv_inject_audio(), dvdsub_parse_extradata(), dvvideo_decode_init(), ebml_parse_elem(), ebml_parse_nest(), encode_frame(), encode_init(), encode_mb_internal(), encode_mode(), encode_residual_ch(), envelope_instant16(), envelope_peak16(), event_loop(), evrc_decode_frame(), expand_timestamps(), extract_extradata_mpeg12(), failing_write_packet(), fbdev_write_packet(), ff_ac3_compute_coupling_strategy(), ff_alloc_picture(), ff_bwdif_init_x86(), ff_cavs_mv(), ff_cavs_next_mb(), ff_celt_bitalloc(), ff_combine_frame(), ff_dca_lbr_parse(), ff_decode_get_hw_frames_ctx(), ff_determine_signal_peak(), ff_dnn_execute_model_native(), ff_dnn_free_model_tf(), ff_dxva2_common_frame_params(), ff_dxva2_decode_init(), ff_er_frame_end(), ff_estimate_p_frame_motion(), ff_filter_init_hw_frames(), ff_framesync_configure(), ff_get_format(), ff_h264_build_ref_list(), ff_h264_decode_picture_parameter_set(), ff_h264_decode_seq_parameter_set(), ff_h264_init_poc(), ff_h264_queue_decode_slice(), ff_hevc_split_coding_unit_flag_decode(), ff_id3v2_write_apic(), ff_img_read_packet(), ff_init_vscale_pfn(), ff_interleave_add_packet(), ff_intrax8_decode_picture(), ff_jpeg2000_set_significance(), ff_jpegls_decode_lse(), ff_mjpeg_decode_frame(), ff_mpeg4_encode_mb(), ff_nvdec_start_frame(), ff_nvenc_encode_init(), ff_opencl_filter_config_input(), ff_opencl_filter_work_size_from_image(), ff_qsv_enc_init(), ff_qsvvpp_create(), ff_rate_control_init(), ff_rate_estimate_qscale(), ff_read_frame_flush(), ff_slice_thread_init(), ff_sws_init_swscale_x86(), ff_thread_await_progress(), ff_thread_report_progress(), ff_update_hdr_metadata(), ff_vaapi_common_frame_params(), ff_vdpau_common_frame_params(), ff_vdpau_common_init(), ff_vmafmotion_init(), ff_voc_get_packet(), ff_vp9_decode_block(), ff_xvmc_decode_mb(), ff_xvmc_field_start(), ff_yadif_init_x86(), fill_picture_parameters(), filter(), filter_channel(), filter_frame(), filter_slice(), find_ref_mvs(), fir_channel(), fir_frame(), fits_encode_frame(), flashsv_encode_frame(), flic_decode_init(), flush_packet(), free_section(), g723_1_decode_frame(), generate_intervals(), generate_joint_tables(), get_audio_frame(), get_block_sizes(), get_delayed_pic(), get_surface(), gif_encode_frame(), gif_image_write_image(), h261_decode_mb_skipped(), h263_probe(), h264_init_ps(), h264_probe(), h264_slice_header_parse(), handle_packet(), hds_write_packet(), hevc_parse_slice_header(), hevc_probe(), hl_decode_mb_444(), hls_coding_unit(), hls_slice_header(), hq_decode_frame(), hqx_decode_422a(), hqx_decode_444a(), hwmap_config_output(), iff_read_header(), imc_refine_bit_allocation(), init(), init_dequant_tables(), init_out_session(), init_processing_chain(), init_video_param(), init_vpp_session(), input_callback(), inter_pred(), ipmovie_read_header(), ipvideo_decode_block_opcode_0x8(), ipvideo_decode_block_opcode_0xA(), ivi_dc_transform(), ivi_decode_coded_blocks(), j2kenc_init(), kempf_decode_tile(), libgsm_encode_frame(), librsvg_decode_frame(), libspeex_decode_frame(), load_palette(), loop_filter(), magy_decode_frame(), magy_decode_slice10(), matroska_probe(), mc_part_std(), mc_part_weighted(), mc_subpel(), mcompand_channel(), mlp_encode_frame(), mlp_parse(), mm_decode_inter(), mmsh_close(), motion_search(), mov_parse_mpeg2_frame(), mov_parse_vc1_frame(), mov_read_packet(), mov_read_seek(), mov_realloc_extradata(), mov_write_trailer(), mp_decode_frame(), mpeg1_encode_sequence_header(), mpeg4_decode_mb(), mpeg4_decode_partitioned_mb(), mpeg4video_probe(), mpeg_decode_mb(), mpeg_decode_slice(), mpeg_mux_init(), mpegps_probe(), mtv_read_header(), multiple_resample(), mxf_get_sorted_table_segments(), mxf_handle_missing_index_segment(), mxf_interleave_get_packet(), mxf_parse_mpeg2_frame(), mxf_parse_structural_metadata(), mxf_write_partition(), ndi_read_close(), ndi_write_video_packet(), normalize(), nppscale_filter_frame(), npptranspose_filter_frame(), nvdec_hevc_start_frame(), nvenc_setup_device(), ogg_read_page(), open_input_file(), optimum_use15_7(), output_segment_list(), pack_yuv(), parse_high_res_grid(), parse_mb_skip(), parse_nal_units(), parse_packet(), parse_strk(), pcm_dvd_decode_frame(), pcm_encode_frame(), piz_uncompress(), plot_cqt(), png_handle_row(), pnm_decode_frame(), postfilter(), pred_spatial_direct_motion(), pred_temp_direct_motion(), print_pkt_side_data(), process_float(), process_frame(), program_opencl_run(), put_dc(), qcelp_decode_frame(), qdm2_decode(), qdm2_fft_tone_synthesizer(), qsv_decode_init(), qsv_frame_alloc(), qsv_frame_lock(), qsv_init_child_ctx(), qsv_map_from(), ra144_encode_frame(), read_header(), read_major_sync(), read_old_huffman_tables(), read_var_block_data(), remove_wasted_bits(), rfc4175_handle_packet(), rkmpp_send_packet(), rpza_decode_stream(), rtsp_read_packet(), s302m_decode_frame(), s337m_probe(), sbr_hf_calc_npatches(), sbr_make_f_master(), seg_write_packet(), select_input_picture(), send_next_delayed_frame(), seqvideo_decode(), ser_read_packet(), set_channel_info(), set_control(), set_frame_data(), set_input_output_native(), set_palette(), shorten_decode_frame(), show_frame(), smc_decode_stream(), store_packet(), submit_frame(), svq3_decode_frame(), svq3_decode_init(), svq3_decode_mb(), swr_init(), synth_block_fcb_acb(), synth_superframe(), tcp_open(), teletext_decode_frame(), test_derivation(), test_device(), tm2_decode_blocks(), tonemap_opencl_init(), uncompressed_header(), uninit_options(), unpack_superblocks(), unpack_vlcs(), unpack_yuv(), update_initial_timestamps(), vaapi_encode_h265_init_picture_params(), vaapi_encode_issue(), vaapi_encode_mjpeg_write_extra_buffer(), vaapi_encode_vp9_init_picture_params(), vaapi_frames_init(), vaapi_vp9_start_frame(), vc1_decode_b_mb(), vc1_decode_b_mb_intfi(), vc1_decode_b_mb_intfr(), vc1_decode_i_block(), vc1_decode_p_mb_intfi(), vc1_decode_p_mb_intfr(), decklink_input_callback::VideoInputFrameArrived(), videotoolbox_postproc_frame(), vmd_decode(), vmdaudio_decode_frame(), vorbis_parse_setup_hdr_codebooks(), wiener_denoise(), wma_decode_init(), wma_decode_superframe(), wsd_read_header(), XAVS_init(), xvid_ff_2pass_create(), yuv2rgb_1_c_template(), yuv2rgb_2_c_template(), and yuv4_write_packet().
return ff_filter_frame | ( | outlink | , |
outpic | |||
) |
|
static |
Definition at line 84 of file vf_mcdeint.c.
Definition at line 247 of file vf_mcdeint.c.
Referenced by filter_frame().
Definition at line 256 of file vf_mcdeint.c.
Referenced by a64_compress_colram(), acb_search(), adpcm_decode_frame(), at1_subband_synthesis(), av_div_sf(), backward_filter(), bink_idct_c(), bink_idct_put_c(), bit8x8_c(), celt_frame_mdct(), comp_autocorr(), comp_interp_index(), compute_network0(), compute_network0_i16(), config_input(), dct_max8x8_c(), dct_sad8x8_c(), decode_8_pulses_31bits(), decode_plane(), decode_rgb_frame_TMPL(), decompress_p(), diagonal_transformation(), do_block_ssd(), do_block_ssd16(), encode_mode(), estimate_pitch(), evalfunc_0(), evalfunc_1(), ff_atrac_iqmf(), ff_avg_h264_qpel16_mc12_mmi(), ff_avg_h264_qpel16_mc21_mmi(), ff_avg_h264_qpel16_mc22_mmi(), ff_avg_h264_qpel16_mc23_mmi(), ff_avg_h264_qpel16_mc32_mmi(), ff_avg_h264_qpel8_mc12_mmi(), ff_avg_h264_qpel8_mc21_mmi(), ff_avg_h264_qpel8_mc22_mmi(), ff_avg_h264_qpel8_mc23_mmi(), ff_avg_h264_qpel8_mc32_mmi(), ff_block_permute(), ff_celt_bitalloc(), ff_ea_idct_put_c(), ff_faandct(), ff_faandct248(), ff_faanidct(), ff_faanidct_add(), ff_faanidct_put(), ff_g723_1_inverse_quant(), ff_h264_chroma422_dc_dequant_idct(), ff_h264_chroma422_dc_dequant_idct_8_mmi(), ff_h264_luma_dc_dequant_idct(), ff_mjpegenc_huffman_compute_bits(), ff_mkdir_p(), ff_put_h264_qpel16_mc12_mmi(), ff_put_h264_qpel16_mc21_mmi(), ff_put_h264_qpel16_mc22_mmi(), ff_put_h264_qpel16_mc23_mmi(), ff_put_h264_qpel16_mc32_mmi(), ff_put_h264_qpel8_mc12_mmi(), ff_put_h264_qpel8_mc21_mmi(), ff_put_h264_qpel8_mc22_mmi(), ff_put_h264_qpel8_mc23_mmi(), ff_put_h264_qpel8_mc32_mmi(), ff_put_wav_header(), ff_vorbis_inverse_coupling(), filter(), filter_frame(), find_new_headers(), flac_parse(), flac_parse_close(), formant_postfilter(), ftx_2d(), gain_scale(), gen_fcb_excitation(), get_fcb_param(), get_tilt_comp(), h261_loop_filter(), hadamard8_diff8x8_c(), hadamard8_intra8x8_c(), handle_file(), harmonic_filter(), harmonic_noise_sub(), hnm_flip_buffers(), horizontal_compose_daub97i_TMPL(), horizontal_compose_dirac53i_TMPL(), horizontal_compose_haar0i_TMPL(), horizontal_compose_haar1i_TMPL(), horizontal_compose_haari_TMPL(), http_write(), hybrid6_cx(), hypot(), idct(), idct_put(), idctRowCondDC(), imdct_and_windowing(), imdct_and_windowing_960(), imdct_and_windowing_eld(), ivr_read_header(), levinson_durbin(), lpc2lsp(), ls_encode_runterm(), ls_get_code_runterm(), magy_huffman_compute_bits(), main(), matroska_parse_laces(), on2avc_reconstruct_channel(), pack_bitstream(), postfilter(), pp_get_mode_by_name_and_quality(), qian_thresholding(), quant_psnr8x8_c(), rd8x8_c(), read16(), read32(), read_time(), render_slice(), rtmp_server_handshake(), rv34_idct_add_c(), rv34_inv_transform_noround_c(), sbc_unpack_frame(), sbr_gain_calc(), sbr_make_f_derived(), sbr_make_f_master(), scale_coefs(), set_noise_profile(), setup_classifs(), simple_idct_add_msa(), simple_idct_msa(), simple_idct_put_msa(), soft_thresholding(), ssim_plane(), ssim_plane_16bit(), store_slice16_c(), store_slice2_c(), store_slice_c(), sub_acb_contrib(), sub_left_prediction(), svq1_encode_plane(), svq3_luma_dc_dequant_idct_c(), synth_percept_filter(), tta_encode_frame(), unpack_bitstream(), vc1_inv_trans_8x8_c(), and wavpack_encode_block().
Definition at line 257 of file vf_mcdeint.c.
Referenced by filter_frame().
else |
Definition at line 258 of file vf_mcdeint.c.
mcdeint parity = 1 |
Definition at line 274 of file vf_mcdeint.c.
Referenced by aptx_check_parity(), aptx_pack_codeword(), aptx_quantized_parity(), aptxhd_pack_codeword(), call_kernel(), extract_line(), filter(), pic_as_field(), pullup_submit_field(), read_access_unit(), split_field_copy(), and write_substrs().
end __pad0__ |
Definition at line 277 of file vf_mcdeint.c.
av_frame_free& inpic |
Definition at line 278 of file vf_mcdeint.c.
Referenced by filter_frame(), and for().
|
static |
Definition at line 286 of file vf_mcdeint.c.
|
static |
Definition at line 296 of file vf_mcdeint.c.
AVFilter ff_vf_mcdeint |
Definition at line 304 of file vf_mcdeint.c.