static filter_t *CreateFilter( vlc_object_t *p_this, const es_format_t *p_fmt_in, vlc_fourcc_t fmt_out ) { filter_t *p_filter; p_filter = vlc_object_create( p_this, sizeof(filter_t) ); if (unlikely(p_filter == NULL)) return NULL; p_filter->owner.video.buffer_new = (picture_t *(*)(filter_t *))video_new_buffer; es_format_InitFromVideo( &p_filter->fmt_in, &p_fmt_in->video ); es_format_InitFromVideo( &p_filter->fmt_out, &p_fmt_in->video ); p_filter->fmt_in.i_codec = p_filter->fmt_in.video.i_chroma = VLC_CODEC_D3D11_OPAQUE; p_filter->fmt_out.i_codec = p_filter->fmt_out.video.i_chroma = fmt_out; p_filter->p_module = module_need( p_filter, "video filter2", NULL, false ); if( !p_filter->p_module ) { msg_Dbg( p_filter, "no video filter found" ); DeleteFilter( p_filter ); return NULL; } return p_filter; }
static decoder_t *CreateDecoder( vlc_object_t *p_this, const video_format_t *fmt ) { decoder_t *p_dec; p_dec = vlc_custom_create( p_this, sizeof( *p_dec ), "image decoder" ); if( p_dec == NULL ) return NULL; p_dec->p_module = NULL; es_format_InitFromVideo( &p_dec->fmt_in, fmt ); es_format_Init( &p_dec->fmt_out, VIDEO_ES, 0 ); p_dec->b_frame_drop_allowed = false; p_dec->pf_vout_format_update = video_update_format; p_dec->pf_vout_buffer_new = video_new_buffer; /* Find a suitable decoder module */ p_dec->p_module = module_need( p_dec, "video decoder", "$codec", false ); if( !p_dec->p_module ) { msg_Err( p_dec, "no suitable decoder module for fourcc `%4.4s'. " "VLC probably does not support this image format.", (char*)&p_dec->fmt_in.i_codec ); DeleteDecoder( p_dec ); return NULL; } return p_dec; }
static encoder_t *CreateEncoder( vlc_object_t *p_this, const video_format_t *fmt_in, const video_format_t *fmt_out ) { encoder_t *p_enc; p_enc = sout_EncoderCreate( p_this ); if( p_enc == NULL ) return NULL; p_enc->p_module = NULL; es_format_InitFromVideo( &p_enc->fmt_in, fmt_in ); if( p_enc->fmt_in.video.i_visible_width == 0 || p_enc->fmt_in.video.i_visible_height == 0 || p_enc->fmt_out.video.i_visible_width == 0 || p_enc->fmt_out.video.i_visible_height == 0 ) { if( fmt_out->i_width > 0 && fmt_out->i_height > 0 ) { p_enc->fmt_in.video.i_width = fmt_out->i_width; p_enc->fmt_in.video.i_height = fmt_out->i_height; if( fmt_out->i_visible_width > 0 && fmt_out->i_visible_height > 0 ) { p_enc->fmt_in.video.i_visible_width = fmt_out->i_visible_width; p_enc->fmt_in.video.i_visible_height = fmt_out->i_visible_height; } else { p_enc->fmt_in.video.i_visible_width = fmt_out->i_width; p_enc->fmt_in.video.i_visible_height = fmt_out->i_height; } } } else if( fmt_out->i_sar_num && fmt_out->i_sar_den && fmt_out->i_sar_num * fmt_in->i_sar_den != fmt_out->i_sar_den * fmt_in->i_sar_num ) { p_enc->fmt_in.video.i_width = fmt_in->i_sar_num * (int64_t)fmt_out->i_sar_den * fmt_in->i_width / fmt_in->i_sar_den / fmt_out->i_sar_num; p_enc->fmt_in.video.i_visible_width = fmt_in->i_sar_num * (int64_t)fmt_out->i_sar_den * fmt_in->i_visible_width / fmt_in->i_sar_den / fmt_out->i_sar_num; } p_enc->fmt_in.video.i_frame_rate = 25; p_enc->fmt_in.video.i_frame_rate_base = 1; es_format_InitFromVideo( &p_enc->fmt_out, fmt_out ); p_enc->fmt_out.video.i_width = p_enc->fmt_in.video.i_width; p_enc->fmt_out.video.i_height = p_enc->fmt_in.video.i_height; /* Find a suitable decoder module */ p_enc->p_module = module_need( p_enc, "encoder", NULL, false ); if( !p_enc->p_module ) { msg_Err( p_enc, "no suitable encoder module for fourcc `%4.4s'.\n" "VLC probably does not support this image format.", (char*)&p_enc->fmt_out.i_codec ); DeleteEncoder( p_enc ); return NULL; } p_enc->fmt_in.video.i_chroma = p_enc->fmt_in.i_codec; return p_enc; }