Commit deca66fb authored by Laurent Aimar's avatar Laurent Aimar

Used a sar for picture_New/Setup.

parent 63b7c098
...@@ -135,7 +135,7 @@ struct picture_t ...@@ -135,7 +135,7 @@ struct picture_t
* with picture_Hold and picture_Release. This default management will release * with picture_Hold and picture_Release. This default management will release
* p_sys, p_q, p_data_orig fields if non NULL. * p_sys, p_q, p_data_orig fields if non NULL.
*/ */
VLC_EXPORT( picture_t *, picture_New, ( vlc_fourcc_t i_chroma, int i_width, int i_height, int i_aspect ) ); VLC_EXPORT( picture_t *, picture_New, ( vlc_fourcc_t i_chroma, int i_width, int i_height, int i_sar_num, int i_sar_den ) );
/** /**
* This function will create a new picture using the given format. * This function will create a new picture using the given format.
...@@ -298,7 +298,7 @@ VLC_EXPORT( int, picture_Export, ( vlc_object_t *p_obj, block_t **pp_image, vide ...@@ -298,7 +298,7 @@ VLC_EXPORT( int, picture_Export, ( vlc_object_t *p_obj, block_t **pp_image, vide
* *
* It can be usefull to get the properties of planes. * It can be usefull to get the properties of planes.
*/ */
VLC_EXPORT( int, picture_Setup, ( picture_t *, vlc_fourcc_t i_chroma, int i_width, int i_height, int i_aspect ) ); VLC_EXPORT( int, picture_Setup, ( picture_t *, vlc_fourcc_t i_chroma, int i_width, int i_height, int i_sar_num, int i_sar_den ) );
/***************************************************************************** /*****************************************************************************
* Flags used to describe the status of a picture * Flags used to describe the status of a picture
......
...@@ -80,9 +80,9 @@ struct picture_heap_t ...@@ -80,9 +80,9 @@ struct picture_heap_t
* \param i_height the wanted height for the picture. * \param i_height the wanted height for the picture.
* \param i_aspect the wanted aspect ratio for the picture. * \param i_aspect the wanted aspect ratio for the picture.
*/ */
#define vout_AllocatePicture(a,b,c,d,e,f) \ #define vout_AllocatePicture(a,b,c,d,e,f,g) \
__vout_AllocatePicture(VLC_OBJECT(a),b,c,d,e,f) __vout_AllocatePicture(VLC_OBJECT(a),b,c,d,e,f,g)
VLC_EXPORT( int, __vout_AllocatePicture,( vlc_object_t *p_this, picture_t *p_pic, uint32_t i_chroma, int i_width, int i_height, int i_aspect ) ); VLC_EXPORT( int, __vout_AllocatePicture,( vlc_object_t *p_this, picture_t *p_pic, uint32_t i_chroma, int i_width, int i_height, int i_sar_num, int i_sar_den ) );
/** /**
......
...@@ -382,8 +382,7 @@ static int Open( vlc_object_t *p_this ) ...@@ -382,8 +382,7 @@ static int Open( vlc_object_t *p_this )
i_height = p_sys->height; i_height = p_sys->height;
if( picture_Setup( &p_sys->pic, VLC_CODEC_UYVY, if( picture_Setup( &p_sys->pic, VLC_CODEC_UYVY,
i_width, i_height, i_width, i_height, 1, 1 ) )
i_width * VOUT_ASPECT_FACTOR / i_height ) )
{ {
msg_Err( p_demux ,"unknown chroma" ); msg_Err( p_demux ,"unknown chroma" );
Close( p_this ); Close( p_this );
......
...@@ -340,7 +340,8 @@ void RenderCursor( demux_t *p_demux, int i_x, int i_y, ...@@ -340,7 +340,8 @@ void RenderCursor( demux_t *p_demux, int i_x, int i_y,
p_sys->fmt.video.i_chroma, p_sys->fmt.video.i_chroma,
p_sys->fmt.video.i_width, p_sys->fmt.video.i_width,
p_sys->fmt.video.i_height, p_sys->fmt.video.i_height,
p_sys->fmt.video.i_aspect ); p_sys->fmt.video.i_aspect * p_sys->fmt.video.i_height,
VOUT_ASPECT_FACTOR * p_sys->fmt.video.i_width );
if( !p_sys->p_blend ) if( !p_sys->p_blend )
{ {
p_sys->p_blend = vlc_object_create( p_demux, sizeof(filter_t) ); p_sys->p_blend = vlc_object_create( p_demux, sizeof(filter_t) );
......
...@@ -1085,8 +1085,8 @@ static int OpenVideoDev( demux_t *p_demux, char *psz_device ) ...@@ -1085,8 +1085,8 @@ static int OpenVideoDev( demux_t *p_demux, char *psz_device )
{ {
/* Fill in picture_t fields */ /* Fill in picture_t fields */
if( picture_Setup( &p_sys->pic, p_sys->i_fourcc, if( picture_Setup( &p_sys->pic, p_sys->i_fourcc,
p_sys->i_width, p_sys->i_height, p_sys->i_width * p_sys->i_width, p_sys->i_height,
VOUT_ASPECT_FACTOR / p_sys->i_height ) ) 1, 1 ) )
{ {
msg_Err( p_demux, "unsupported chroma" ); msg_Err( p_demux, "unsupported chroma" );
goto vdev_failed; goto vdev_failed;
......
...@@ -334,7 +334,7 @@ static block_t *SendFrame( decoder_t *p_dec, block_t *p_block ) ...@@ -334,7 +334,7 @@ static block_t *SendFrame( decoder_t *p_dec, block_t *p_block )
/* Fill in picture_t fields */ /* Fill in picture_t fields */
picture_Setup( &pic, p_dec->fmt_out.i_codec, picture_Setup( &pic, p_dec->fmt_out.i_codec,
p_dec->fmt_out.video.i_width, p_dec->fmt_out.video.i_width,
p_dec->fmt_out.video.i_height, VOUT_ASPECT_FACTOR ); p_dec->fmt_out.video.i_height, 0, 1 );
if( !pic.i_planes ) if( !pic.i_planes )
{ {
......
...@@ -592,7 +592,8 @@ static int Send( sout_stream_t *p_stream, sout_stream_id_t *id, ...@@ -592,7 +592,8 @@ static int Send( sout_stream_t *p_stream, sout_stream_id_t *id,
p_new_pic = picture_New( p_pic->format.i_chroma, p_new_pic = picture_New( p_pic->format.i_chroma,
p_pic->format.i_width, p_pic->format.i_height, p_pic->format.i_width, p_pic->format.i_height,
p_sys->p_decoder->fmt_out.video.i_aspect ); p_sys->p_decoder->fmt_out.video.i_aspect * p_pic->format.i_height,
VOUT_ASPECT_FACTOR * p_pic->format.i_width );
if( !p_new_pic ) if( !p_new_pic )
{ {
picture_Release( p_pic ); picture_Release( p_pic );
......
...@@ -615,8 +615,7 @@ static int UnpackFromFile( sout_stream_t *p_stream, const char *psz_file, ...@@ -615,8 +615,7 @@ static int UnpackFromFile( sout_stream_t *p_stream, const char *psz_file,
} }
if( picture_Setup( p_pic, VLC_CODEC_I420, if( picture_Setup( p_pic, VLC_CODEC_I420,
i_width, i_height, i_width, i_height, 1, 1 ) )
i_width * VOUT_ASPECT_FACTOR / i_height ) )
{ {
msg_Err( p_stream, "unknown chroma" ); msg_Err( p_stream, "unknown chroma" );
return -1; return -1;
......
...@@ -551,7 +551,7 @@ static picture_t *LoadImage( vlc_object_t *p_this, int nbChannels, int* i_values ...@@ -551,7 +551,7 @@ static picture_t *LoadImage( vlc_object_t *p_this, int nbChannels, int* i_values
moinsDix = 0.32*scale + 20; moinsDix = 0.32*scale + 20;
moinsVingt = 0.1*scale + 20; moinsVingt = 0.1*scale + 20;
p_pic = picture_New(VLC_FOURCC('Y','U','V','A'), i_width+20, scale+30, VOUT_ASPECT_FACTOR * (i_width+20)/(scale+30)); p_pic = picture_New(VLC_FOURCC('Y','U','V','A'), i_width+20, scale+30, 1, 1);
// blacken the whole picture // blacken the whole picture
for( i = 0 ; i < p_pic->i_planes ; i++ ) for( i = 0 ; i < p_pic->i_planes ; i++ )
......
...@@ -492,7 +492,9 @@ static int exec_DataSharedMem( filter_t *p_filter, ...@@ -492,7 +492,9 @@ static int exec_DataSharedMem( filter_t *p_filter,
1, 1 ); 1, 1 );
if( vout_AllocatePicture( p_filter, p_ovl->data.p_pic, if( vout_AllocatePicture( p_filter, p_ovl->data.p_pic,
p_ovl->format.i_chroma, p_params->i_width, p_ovl->format.i_chroma, p_params->i_width,
p_params->i_height, p_ovl->format.i_aspect ) ) p_params->i_height,
p_ovl->format.i_aspect * p_params->i_height,
VOUT_ASPECT_FACTOR * p_params->i_width ) )
{ {
msg_Err( p_filter, "Unable to allocate picture" ); msg_Err( p_filter, "Unable to allocate picture" );
free( p_ovl->data.p_pic ); free( p_ovl->data.p_pic );
......
...@@ -50,7 +50,8 @@ static inline void vout_filter_AllocateDirectBuffers( vout_thread_t *p_vout, int ...@@ -50,7 +50,8 @@ static inline void vout_filter_AllocateDirectBuffers( vout_thread_t *p_vout, int
vout_AllocatePicture( VLC_OBJECT(p_vout), p_pic, p_vout->output.i_chroma, vout_AllocatePicture( VLC_OBJECT(p_vout), p_pic, p_vout->output.i_chroma,
p_vout->output.i_width, p_vout->output.i_width,
p_vout->output.i_height, p_vout->output.i_height,
p_vout->output.i_aspect ); p_vout->output.i_aspect * p_vout->output.i_height,
VOUT_ASPECT_FACTOR * p_vout->output.i_width );
if( !p_pic->i_planes ) if( !p_pic->i_planes )
break; break;
......
...@@ -695,7 +695,7 @@ static void* vnc_worker_thread( vlc_object_t *p_thread_obj ) ...@@ -695,7 +695,7 @@ static void* vnc_worker_thread( vlc_object_t *p_thread_obj )
/* Create an empty picture for VNC the data */ /* Create an empty picture for VNC the data */
vlc_mutex_lock( &p_sys->lock ); vlc_mutex_lock( &p_sys->lock );
p_sys->p_pic = picture_New( VLC_CODEC_YUVA, p_sys->p_pic = picture_New( VLC_CODEC_YUVA,
p_sys->i_vnc_width, p_sys->i_vnc_height, VOUT_ASPECT_FACTOR ); p_sys->i_vnc_width, p_sys->i_vnc_height, 1, 1 );
if( !p_sys->p_pic ) if( !p_sys->p_pic )
{ {
vlc_mutex_unlock( &p_sys->lock ); vlc_mutex_unlock( &p_sys->lock );
......
...@@ -379,13 +379,13 @@ static int Init( filter_t *p_filter ) ...@@ -379,13 +379,13 @@ static int Init( filter_t *p_filter )
} }
if( p_sys->ctxA ) if( p_sys->ctxA )
{ {
p_sys->p_src_a = picture_New( VLC_CODEC_GREY, i_fmti_width, p_fmti->i_height, 0 ); p_sys->p_src_a = picture_New( VLC_CODEC_GREY, i_fmti_width, p_fmti->i_height, 0, 1 );
p_sys->p_dst_a = picture_New( VLC_CODEC_GREY, i_fmto_width, p_fmto->i_height, 0 ); p_sys->p_dst_a = picture_New( VLC_CODEC_GREY, i_fmto_width, p_fmto->i_height, 0, 1 );
} }
if( p_sys->i_extend_factor != 1 ) if( p_sys->i_extend_factor != 1 )
{ {
p_sys->p_src_e = picture_New( p_fmti->i_chroma, i_fmti_width, p_fmti->i_height, 0 ); p_sys->p_src_e = picture_New( p_fmti->i_chroma, i_fmti_width, p_fmti->i_height, 0, 1 );
p_sys->p_dst_e = picture_New( p_fmto->i_chroma, i_fmto_width, p_fmto->i_height, 0 ); p_sys->p_dst_e = picture_New( p_fmto->i_chroma, i_fmto_width, p_fmto->i_height, 0, 1 );
memset( p_sys->p_src_e->p[0].p_pixels, 0, p_sys->p_src_e->p[0].i_pitch * p_sys->p_src_e->p[0].i_lines ); memset( p_sys->p_src_e->p[0].p_pixels, 0, p_sys->p_src_e->p[0].i_pitch * p_sys->p_src_e->p[0].i_lines );
memset( p_sys->p_dst_e->p[0].p_pixels, 0, p_sys->p_dst_e->p[0].i_pitch * p_sys->p_dst_e->p[0].i_lines ); memset( p_sys->p_dst_e->p[0].p_pixels, 0, p_sys->p_dst_e->p[0].i_pitch * p_sys->p_dst_e->p[0].i_lines );
......
...@@ -259,7 +259,8 @@ static int NewPicture( vout_thread_t *p_vout, picture_t *p_pic ) ...@@ -259,7 +259,8 @@ static int NewPicture( vout_thread_t *p_vout, picture_t *p_pic )
/* Fill in picture_t fields */ /* Fill in picture_t fields */
picture_Setup( p_pic, p_vout->output.i_chroma, picture_Setup( p_pic, p_vout->output.i_chroma,
p_vout->output.i_width, p_vout->output.i_height, p_vout->output.i_width, p_vout->output.i_height,
p_vout->output.i_aspect ); p_vout->output.i_aspect * p_vout->output.i_height,
VOUT_ASPECT_FACTOR * p_vout->output.i_width );
p_pic->p_sys->p_image = new CascadeSharedMemZone(); p_pic->p_sys->p_image = new CascadeSharedMemZone();
if( p_pic->p_sys->p_image == NULL ) if( p_pic->p_sys->p_image == NULL )
......
...@@ -183,7 +183,8 @@ static int Init( vout_thread_t *p_vout ) ...@@ -183,7 +183,8 @@ static int Init( vout_thread_t *p_vout )
vout_AllocatePicture( p_vout, p_pic, p_vout->output.i_chroma, vout_AllocatePicture( p_vout, p_pic, p_vout->output.i_chroma,
p_vout->output.i_width, p_vout->output.i_height, p_vout->output.i_width, p_vout->output.i_height,
p_vout->output.i_aspect ); p_vout->output.i_aspect * p_vout->output.i_height,
VOUT_ASPECT_FACTOR * p_vout->output.i_width );
if( p_pic->i_planes == 0 ) if( p_pic->i_planes == 0 )
{ {
......
...@@ -318,7 +318,8 @@ static int Init(vout_thread_t *vout) ...@@ -318,7 +318,8 @@ static int Init(vout_thread_t *vout)
vout_AllocatePicture(VLC_OBJECT(vd), picture, vout_AllocatePicture(VLC_OBJECT(vd), picture,
vd->source.i_chroma, vd->source.i_chroma,
vd->source.i_width, vd->source.i_height, vd->source.i_width, vd->source.i_height,
vd->source.i_aspect); vd->source.i_aspect * vd->source.i_height,
VOUT_ASPECT_FACTOR * vd->source.i_width);
if (!picture->i_planes) if (!picture->i_planes)
break; break;
picture->p_sys->direct = NULL; picture->p_sys->direct = NULL;
......
...@@ -572,7 +572,7 @@ static picture_pool_t *Pool (vout_display_t *vd, unsigned requested_count) ...@@ -572,7 +572,7 @@ static picture_pool_t *Pool (vout_display_t *vd, unsigned requested_count)
if (!p_sys->pool) if (!p_sys->pool)
{ {
picture_t *pic = picture_New (vd->fmt.i_chroma, p_sys->att->width, picture_t *pic = picture_New (vd->fmt.i_chroma, p_sys->att->width,
p_sys->att->height, 0); p_sys->att->height, 0, 1);
if (!pic) if (!pic)
return NULL; return NULL;
......
...@@ -170,7 +170,8 @@ picture_t *vout_CreatePicture( vout_thread_t *p_vout, ...@@ -170,7 +170,8 @@ picture_t *vout_CreatePicture( vout_thread_t *p_vout,
vout_AllocatePicture( VLC_OBJECT(p_vout), vout_AllocatePicture( VLC_OBJECT(p_vout),
p_freepic, p_vout->render.i_chroma, p_freepic, p_vout->render.i_chroma,
p_vout->render.i_width, p_vout->render.i_height, p_vout->render.i_width, p_vout->render.i_height,
p_vout->render.i_aspect ); p_vout->render.i_aspect * p_vout->render.i_height,
VOUT_ASPECT_FACTOR * p_vout->render.i_width);
if( p_freepic->i_planes ) if( p_freepic->i_planes )
{ {
...@@ -408,7 +409,8 @@ picture_t *vout_RenderPicture( vout_thread_t *p_vout, picture_t *p_pic, ...@@ -408,7 +409,8 @@ picture_t *vout_RenderPicture( vout_thread_t *p_vout, picture_t *p_pic,
p_tmp_pic, p_vout->fmt_out.i_chroma, p_tmp_pic, p_vout->fmt_out.i_chroma,
p_vout->fmt_out.i_width, p_vout->fmt_out.i_width,
p_vout->fmt_out.i_height, p_vout->fmt_out.i_height,
p_vout->fmt_out.i_aspect ); p_vout->fmt_out.i_aspect * p_vout->fmt_out.i_height,
VOUT_ASPECT_FACTOR * p_vout->fmt_out.i_width );
p_tmp_pic->i_type = MEMORY_PICTURE; p_tmp_pic->i_type = MEMORY_PICTURE;
p_tmp_pic->i_status = RESERVED_PICTURE; p_tmp_pic->i_status = RESERVED_PICTURE;
} }
...@@ -553,7 +555,8 @@ void vout_PlacePicture( const vout_thread_t *p_vout, ...@@ -553,7 +555,8 @@ void vout_PlacePicture( const vout_thread_t *p_vout,
*/ */
int __vout_AllocatePicture( vlc_object_t *p_this, picture_t *p_pic, int __vout_AllocatePicture( vlc_object_t *p_this, picture_t *p_pic,
vlc_fourcc_t i_chroma, vlc_fourcc_t i_chroma,
int i_width, int i_height, int i_aspect ) int i_width, int i_height,
int i_sar_num, int i_sar_den )
{ {
VLC_UNUSED(p_this); VLC_UNUSED(p_this);
int i_index, i_width_aligned, i_height_aligned; int i_index, i_width_aligned, i_height_aligned;
...@@ -562,8 +565,8 @@ int __vout_AllocatePicture( vlc_object_t *p_this, picture_t *p_pic, ...@@ -562,8 +565,8 @@ int __vout_AllocatePicture( vlc_object_t *p_this, picture_t *p_pic,
i_width_aligned = (i_width + 15) >> 4 << 4; i_width_aligned = (i_width + 15) >> 4 << 4;
i_height_aligned = (i_height + 15) >> 4 << 4; i_height_aligned = (i_height + 15) >> 4 << 4;
if( picture_Setup( p_pic, i_chroma, if( picture_Setup( p_pic, i_chroma, i_width, i_height,
i_width, i_height, i_aspect ) != VLC_SUCCESS ) i_sar_num, i_sar_den ) != VLC_SUCCESS )
{ {
p_pic->i_planes = 0; p_pic->i_planes = 0;
return VLC_EGENERIC; return VLC_EGENERIC;
...@@ -693,7 +696,8 @@ void picture_Reset( picture_t *p_picture ) ...@@ -693,7 +696,8 @@ void picture_Reset( picture_t *p_picture )
/***************************************************************************** /*****************************************************************************
* *
*****************************************************************************/ *****************************************************************************/
int picture_Setup( picture_t *p_picture, vlc_fourcc_t i_chroma, int i_width, int i_height, int i_aspect ) int picture_Setup( picture_t *p_picture, vlc_fourcc_t i_chroma,
int i_width, int i_height, int i_sar_num, int i_sar_den )
{ {
int i_index, i_width_aligned, i_height_aligned; int i_index, i_width_aligned, i_height_aligned;
...@@ -715,7 +719,7 @@ int picture_Setup( picture_t *p_picture, vlc_fourcc_t i_chroma, int i_width, int ...@@ -715,7 +719,7 @@ int picture_Setup( picture_t *p_picture, vlc_fourcc_t i_chroma, int i_width, int
p_picture->p_q = NULL; p_picture->p_q = NULL;
video_format_Setup( &p_picture->format, i_chroma, i_width, i_height, video_format_Setup( &p_picture->format, i_chroma, i_width, i_height,
i_aspect * i_height, VOUT_ASPECT_FACTOR * i_width ); i_sar_num, i_sar_den );
/* Make sure the real dimensions are a multiple of 16 */ /* Make sure the real dimensions are a multiple of 16 */
i_width_aligned = (i_width + 15) >> 4 << 4; i_width_aligned = (i_width + 15) >> 4 << 4;
...@@ -959,7 +963,8 @@ picture_t *picture_NewFromResource( const video_format_t *p_fmt, const picture_r ...@@ -959,7 +963,8 @@ picture_t *picture_NewFromResource( const video_format_t *p_fmt, const picture_r
if( p_resource ) if( p_resource )
{ {
if( picture_Setup( p_picture, fmt.i_chroma, fmt.i_width, fmt.i_height, fmt.i_aspect ) ) if( picture_Setup( p_picture, fmt.i_chroma, fmt.i_width, fmt.i_height,
fmt.i_sar_num, fmt.i_sar_den ) )
{ {
free( p_picture ); free( p_picture );
return NULL; return NULL;
...@@ -976,7 +981,8 @@ picture_t *picture_NewFromResource( const video_format_t *p_fmt, const picture_r ...@@ -976,7 +981,8 @@ picture_t *picture_NewFromResource( const video_format_t *p_fmt, const picture_r
else else
{ {
if( __vout_AllocatePicture( NULL, p_picture, if( __vout_AllocatePicture( NULL, p_picture,
fmt.i_chroma, fmt.i_width, fmt.i_height, fmt.i_aspect ) ) fmt.i_chroma, fmt.i_width, fmt.i_height,
fmt.i_sar_num, fmt.i_sar_den ) )
{ {
free( p_picture ); free( p_picture );
return NULL; return NULL;
...@@ -994,13 +1000,13 @@ picture_t *picture_NewFromFormat( const video_format_t *p_fmt ) ...@@ -994,13 +1000,13 @@ picture_t *picture_NewFromFormat( const video_format_t *p_fmt )
{ {
return picture_NewFromResource( p_fmt, NULL ); return picture_NewFromResource( p_fmt, NULL );
} }
picture_t *picture_New( vlc_fourcc_t i_chroma, int i_width, int i_height, int i_aspect ) picture_t *picture_New( vlc_fourcc_t i_chroma, int i_width, int i_height, int i_sar_num, int i_sar_den )
{ {
video_format_t fmt; video_format_t fmt;
memset( &fmt, 0, sizeof(fmt) ); memset( &fmt, 0, sizeof(fmt) );
video_format_Setup( &fmt, i_chroma, i_width, i_height, video_format_Setup( &fmt, i_chroma, i_width, i_height,
i_aspect * i_height, VOUT_ASPECT_FACTOR * i_width ); i_sar_num, i_sar_den );
return picture_NewFromFormat( &fmt ); return picture_NewFromFormat( &fmt );
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment