From: Laurent Aimar Date: Tue, 15 Dec 2009 20:08:30 +0000 (+0100) Subject: Used a sar for picture_New/Setup. X-Git-Tag: 1.1.0-ff~1931 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=deca66fb30c2d05690b6bfb77c7281213965c4d7;p=vlc Used a sar for picture_New/Setup. --- diff --git a/include/vlc_picture.h b/include/vlc_picture.h index d13d86ea57..a97048f2c6 100644 --- a/include/vlc_picture.h +++ b/include/vlc_picture.h @@ -135,7 +135,7 @@ struct picture_t * with picture_Hold and picture_Release. This default management will release * 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. @@ -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. */ -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 diff --git a/include/vlc_vout.h b/include/vlc_vout.h index fb5f6245a4..d8ca180d7f 100644 --- a/include/vlc_vout.h +++ b/include/vlc_vout.h @@ -80,9 +80,9 @@ struct picture_heap_t * \param i_height the wanted height for the picture. * \param i_aspect the wanted aspect ratio for the picture. */ -#define vout_AllocatePicture(a,b,c,d,e,f) \ - __vout_AllocatePicture(VLC_OBJECT(a),b,c,d,e,f) -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 ) ); +#define vout_AllocatePicture(a,b,c,d,e,f,g) \ + __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_sar_num, int i_sar_den ) ); /** diff --git a/modules/access/dc1394.c b/modules/access/dc1394.c index 83c5119fa3..9575d8adf8 100644 --- a/modules/access/dc1394.c +++ b/modules/access/dc1394.c @@ -382,8 +382,7 @@ static int Open( vlc_object_t *p_this ) i_height = p_sys->height; if( picture_Setup( &p_sys->pic, VLC_CODEC_UYVY, - i_width, i_height, - i_width * VOUT_ASPECT_FACTOR / i_height ) ) + i_width, i_height, 1, 1 ) ) { msg_Err( p_demux ,"unknown chroma" ); Close( p_this ); diff --git a/modules/access/screen/screen.c b/modules/access/screen/screen.c index 8076c3be58..7ad87dee6e 100644 --- a/modules/access/screen/screen.c +++ b/modules/access/screen/screen.c @@ -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_width, 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 ) { p_sys->p_blend = vlc_object_create( p_demux, sizeof(filter_t) ); diff --git a/modules/access/v4l.c b/modules/access/v4l.c index fed09f95bb..d54bd501df 100644 --- a/modules/access/v4l.c +++ b/modules/access/v4l.c @@ -1085,8 +1085,8 @@ static int OpenVideoDev( demux_t *p_demux, char *psz_device ) { /* Fill in picture_t fields */ if( picture_Setup( &p_sys->pic, p_sys->i_fourcc, - p_sys->i_width, p_sys->i_height, p_sys->i_width * - VOUT_ASPECT_FACTOR / p_sys->i_height ) ) + p_sys->i_width, p_sys->i_height, + 1, 1 ) ) { msg_Err( p_demux, "unsupported chroma" ); goto vdev_failed; diff --git a/modules/codec/rawvideo.c b/modules/codec/rawvideo.c index b487422aa3..6ab227259b 100644 --- a/modules/codec/rawvideo.c +++ b/modules/codec/rawvideo.c @@ -334,7 +334,7 @@ static block_t *SendFrame( decoder_t *p_dec, block_t *p_block ) /* Fill in picture_t fields */ picture_Setup( &pic, p_dec->fmt_out.i_codec, 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 ) { diff --git a/modules/stream_out/mosaic_bridge.c b/modules/stream_out/mosaic_bridge.c index 449da23d4c..54c986b9c1 100644 --- a/modules/stream_out/mosaic_bridge.c +++ b/modules/stream_out/mosaic_bridge.c @@ -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_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 ) { picture_Release( p_pic ); diff --git a/modules/stream_out/switcher.c b/modules/stream_out/switcher.c index 783c31bc40..1478059664 100644 --- a/modules/stream_out/switcher.c +++ b/modules/stream_out/switcher.c @@ -615,8 +615,7 @@ static int UnpackFromFile( sout_stream_t *p_stream, const char *psz_file, } if( picture_Setup( p_pic, VLC_CODEC_I420, - i_width, i_height, - i_width * VOUT_ASPECT_FACTOR / i_height ) ) + i_width, i_height, 1, 1 ) ) { msg_Err( p_stream, "unknown chroma" ); return -1; diff --git a/modules/video_filter/audiobargraph_v.c b/modules/video_filter/audiobargraph_v.c index 0a14e822b1..a7279e64c8 100644 --- a/modules/video_filter/audiobargraph_v.c +++ b/modules/video_filter/audiobargraph_v.c @@ -551,7 +551,7 @@ static picture_t *LoadImage( vlc_object_t *p_this, int nbChannels, int* i_values moinsDix = 0.32*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 for( i = 0 ; i < p_pic->i_planes ; i++ ) diff --git a/modules/video_filter/dynamicoverlay/dynamicoverlay_commands.c b/modules/video_filter/dynamicoverlay/dynamicoverlay_commands.c index 73299a6dc6..766c5c5bb3 100644 --- a/modules/video_filter/dynamicoverlay/dynamicoverlay_commands.c +++ b/modules/video_filter/dynamicoverlay/dynamicoverlay_commands.c @@ -492,7 +492,9 @@ static int exec_DataSharedMem( filter_t *p_filter, 1, 1 ); if( vout_AllocatePicture( p_filter, p_ovl->data.p_pic, 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" ); free( p_ovl->data.p_pic ); diff --git a/modules/video_filter/filter_common.h b/modules/video_filter/filter_common.h index 2f3e40e987..38ad25b567 100644 --- a/modules/video_filter/filter_common.h +++ b/modules/video_filter/filter_common.h @@ -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, 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 ) break; diff --git a/modules/video_filter/remoteosd.c b/modules/video_filter/remoteosd.c index 260e9bb810..68a464c02c 100644 --- a/modules/video_filter/remoteosd.c +++ b/modules/video_filter/remoteosd.c @@ -695,7 +695,7 @@ static void* vnc_worker_thread( vlc_object_t *p_thread_obj ) /* Create an empty picture for VNC the data */ vlc_mutex_lock( &p_sys->lock ); 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 ) { vlc_mutex_unlock( &p_sys->lock ); diff --git a/modules/video_filter/swscale.c b/modules/video_filter/swscale.c index 2355c05935..6dc7416d36 100644 --- a/modules/video_filter/swscale.c +++ b/modules/video_filter/swscale.c @@ -379,13 +379,13 @@ static int Init( filter_t *p_filter ) } 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_dst_a = picture_New( VLC_CODEC_GREY, i_fmto_width, p_fmto->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, 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_dst_e = picture_New( p_fmto->i_chroma, i_fmto_width, p_fmto->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, 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_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 ); diff --git a/modules/video_output/hd1000v.cpp b/modules/video_output/hd1000v.cpp index 56392a3be0..5b55b0bd22 100644 --- a/modules/video_output/hd1000v.cpp +++ b/modules/video_output/hd1000v.cpp @@ -259,7 +259,8 @@ static int NewPicture( vout_thread_t *p_vout, picture_t *p_pic ) /* Fill in picture_t fields */ picture_Setup( p_pic, p_vout->output.i_chroma, 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(); if( p_pic->p_sys->p_image == NULL ) diff --git a/modules/video_output/svgalib.c b/modules/video_output/svgalib.c index fbe3fda623..fb50526cbc 100644 --- a/modules/video_output/svgalib.c +++ b/modules/video_output/svgalib.c @@ -183,7 +183,8 @@ static int Init( vout_thread_t *p_vout ) 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_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 ) { diff --git a/modules/video_output/wrapper.c b/modules/video_output/wrapper.c index 6243893f14..edf19fb174 100644 --- a/modules/video_output/wrapper.c +++ b/modules/video_output/wrapper.c @@ -318,7 +318,8 @@ static int Init(vout_thread_t *vout) vout_AllocatePicture(VLC_OBJECT(vd), picture, vd->source.i_chroma, 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) break; picture->p_sys->direct = NULL; diff --git a/modules/video_output/xcb/xvideo.c b/modules/video_output/xcb/xvideo.c index 03e9670bb6..aae1bf4d77 100644 --- a/modules/video_output/xcb/xvideo.c +++ b/modules/video_output/xcb/xvideo.c @@ -572,7 +572,7 @@ static picture_pool_t *Pool (vout_display_t *vd, unsigned requested_count) if (!p_sys->pool) { 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) return NULL; diff --git a/src/video_output/vout_pictures.c b/src/video_output/vout_pictures.c index 9a1e994ce1..499557623b 100644 --- a/src/video_output/vout_pictures.c +++ b/src/video_output/vout_pictures.c @@ -170,7 +170,8 @@ picture_t *vout_CreatePicture( vout_thread_t *p_vout, vout_AllocatePicture( VLC_OBJECT(p_vout), p_freepic, p_vout->render.i_chroma, 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 ) { @@ -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_vout->fmt_out.i_width, 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_status = RESERVED_PICTURE; } @@ -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, 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); 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, i_width_aligned = (i_width + 15) >> 4 << 4; i_height_aligned = (i_height + 15) >> 4 << 4; - if( picture_Setup( p_pic, i_chroma, - i_width, i_height, i_aspect ) != VLC_SUCCESS ) + if( picture_Setup( p_pic, i_chroma, i_width, i_height, + i_sar_num, i_sar_den ) != VLC_SUCCESS ) { p_pic->i_planes = 0; return VLC_EGENERIC; @@ -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; @@ -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; 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 */ 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 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 ); return NULL; @@ -976,7 +981,8 @@ picture_t *picture_NewFromResource( const video_format_t *p_fmt, const picture_r else { 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 ); return NULL; @@ -994,13 +1000,13 @@ picture_t *picture_NewFromFormat( const video_format_t *p_fmt ) { 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; memset( &fmt, 0, sizeof(fmt) ); 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 ); }