# include "config.h"
#endif
-#include <errno.h> /* ENOMEM */
-
#include <vlc_common.h>
#include <vlc_plugin.h>
#include <vlc_sout.h>
#include <vlc_image.h>
#include <vlc_filter.h>
+#include <vlc_modules.h>
#include "../video_filter/mosaic.h"
static int video_filter_buffer_allocation_init( filter_t *p_filter, void *p_data )
{
- p_filter->pf_vout_buffer_new = video_new_buffer_filter;
- p_filter->pf_vout_buffer_del = video_del_buffer_filter;
+ p_filter->pf_video_buffer_new = video_new_buffer_filter;
+ p_filter->pf_video_buffer_del = video_del_buffer_filter;
p_filter->p_owner = p_data;
return VLC_SUCCESS;
}
return NULL;
/* Create decoder object */
- p_sys->p_decoder = vlc_object_create( p_stream, VLC_OBJECT_DECODER );
+ p_sys->p_decoder = vlc_object_create( p_stream, sizeof( decoder_t ) );
if( !p_sys->p_decoder )
return NULL;
vlc_object_attach( p_sys->p_decoder, p_stream );
p_sys->p_decoder->p_owner = malloc( sizeof(decoder_owner_sys_t) );
if( !p_sys->p_decoder->p_owner )
{
- vlc_object_detach( p_sys->p_decoder );
vlc_object_release( p_sys->p_decoder );
return NULL;
}
msg_Err( p_stream, "cannot find decoder" );
}
free( p_sys->p_decoder->p_owner );
- vlc_object_detach( p_sys->p_decoder );
vlc_object_release( p_sys->p_decoder );
return NULL;
}
if( p_sys->p_decoder->p_description )
vlc_meta_Delete( p_sys->p_decoder->p_description );
- vlc_object_detach( p_sys->p_decoder );
vlc_object_release( p_sys->p_decoder );
free( p_owner );
else
fmt_out.i_chroma = VLC_CODEC_I420;
+ const unsigned i_fmt_in_aspect =
+ (int64_t)VOUT_ASPECT_FACTOR *
+ fmt_in.i_sar_num * fmt_in.i_width /
+ (fmt_in.i_sar_den * fmt_in.i_height);
if ( !p_sys->i_height )
{
fmt_out.i_width = p_sys->i_width;
fmt_out.i_height = (p_sys->i_width * VOUT_ASPECT_FACTOR
- * p_sys->i_sar_num / p_sys->i_sar_den / fmt_in.i_aspect)
+ * p_sys->i_sar_num / p_sys->i_sar_den / i_fmt_in_aspect)
& ~0x1;
}
else if ( !p_sys->i_width )
{
fmt_out.i_height = p_sys->i_height;
- fmt_out.i_width = (p_sys->i_height * fmt_in.i_aspect
+ fmt_out.i_width = (p_sys->i_height * i_fmt_in_aspect
* p_sys->i_sar_den / p_sys->i_sar_num / VOUT_ASPECT_FACTOR)
& ~0x1;
}
p_new_pic = picture_New( p_pic->format.i_chroma,
p_pic->format.i_width, p_pic->format.i_height,
- p_sys->p_decoder->fmt_out.video.i_aspect * p_pic->format.i_height,
- VOUT_ASPECT_FACTOR * p_pic->format.i_width );
+ p_sys->p_decoder->fmt_out.video.i_sar_num,
+ p_sys->p_decoder->fmt_out.video.i_sar_den );
if( !p_new_pic )
{
picture_Release( p_pic );
if( fmt_out->video.i_width != p_sys->video.i_width ||
fmt_out->video.i_height != p_sys->video.i_height ||
fmt_out->video.i_chroma != p_sys->video.i_chroma ||
- fmt_out->video.i_aspect != p_sys->video.i_aspect )
+ (int64_t)fmt_out->video.i_sar_num * p_sys->video.i_sar_den !=
+ (int64_t)fmt_out->video.i_sar_den * p_sys->video.i_sar_num )
{
- if( !fmt_out->video.i_sar_num ||
- !fmt_out->video.i_sar_den )
- {
- fmt_out->video.i_sar_num =
- fmt_out->video.i_aspect * fmt_out->video.i_height;
-
- fmt_out->video.i_sar_den =
- VOUT_ASPECT_FACTOR * fmt_out->video.i_width;
- }
-
vlc_ureduce( &fmt_out->video.i_sar_num,
&fmt_out->video.i_sar_den,
fmt_out->video.i_sar_num,