@ -125,7 +125,6 @@ int av_image_fill_pointers(uint8_t *data[4], enum AVPixelFormat pix_fmt, int hei
if ( desc - > flags & AV_PIX_FMT_FLAG_PAL | |
if ( desc - > flags & AV_PIX_FMT_FLAG_PAL | |
desc - > flags & AV_PIX_FMT_FLAG_PSEUDOPAL ) {
desc - > flags & AV_PIX_FMT_FLAG_PSEUDOPAL ) {
size [ 0 ] = ( size [ 0 ] + 3 ) & ~ 3 ;
data [ 1 ] = ptr + size [ 0 ] ; /* palette is stored here as 256 32 bits words */
data [ 1 ] = ptr + size [ 0 ] ; /* palette is stored here as 256 32 bits words */
return size [ 0 ] + 256 * 4 ;
return size [ 0 ] + 256 * 4 ;
}
}
@ -216,8 +215,13 @@ int av_image_alloc(uint8_t *pointers[4], int linesizes[4],
av_free ( buf ) ;
av_free ( buf ) ;
return ret ;
return ret ;
}
}
if ( desc - > flags & AV_PIX_FMT_FLAG_PAL | | desc - > flags & AV_PIX_FMT_FLAG_PSEUDOPAL )
if ( desc - > flags & AV_PIX_FMT_FLAG_PAL | | desc - > flags & AV_PIX_FMT_FLAG_PSEUDOPAL ) {
avpriv_set_systematic_pal2 ( ( uint32_t * ) pointers [ 1 ] , pix_fmt ) ;
avpriv_set_systematic_pal2 ( ( uint32_t * ) pointers [ 1 ] , pix_fmt ) ;
if ( align < 4 ) {
av_log ( NULL , AV_LOG_ERROR , " Formats with a palette require a minimum alignment of 4 \n " ) ;
return AVERROR ( EINVAL ) ;
}
}
if ( ( desc - > flags & AV_PIX_FMT_FLAG_PAL | |
if ( ( desc - > flags & AV_PIX_FMT_FLAG_PAL | |
desc - > flags & AV_PIX_FMT_FLAG_PSEUDOPAL ) & &
desc - > flags & AV_PIX_FMT_FLAG_PSEUDOPAL ) & &
@ -385,7 +389,6 @@ int av_image_copy_to_buffer(uint8_t *dst, int dst_size,
int i , j , nb_planes = 0 , linesize [ 4 ] ;
int i , j , nb_planes = 0 , linesize [ 4 ] ;
int size = av_image_get_buffer_size ( pix_fmt , width , height , align ) ;
int size = av_image_get_buffer_size ( pix_fmt , width , height , align ) ;
const AVPixFmtDescriptor * desc = av_pix_fmt_desc_get ( pix_fmt ) ;
const AVPixFmtDescriptor * desc = av_pix_fmt_desc_get ( pix_fmt ) ;
uint8_t * orig_dst = dst ;
if ( size > dst_size | | size < 0 | | ! desc )
if ( size > dst_size | | size < 0 | | ! desc )
return AVERROR ( EINVAL ) ;
return AVERROR ( EINVAL ) ;
@ -409,10 +412,7 @@ int av_image_copy_to_buffer(uint8_t *dst, int dst_size,
}
}
if ( desc - > flags & AV_PIX_FMT_FLAG_PAL ) {
if ( desc - > flags & AV_PIX_FMT_FLAG_PAL ) {
uint32_t * d32 = ( uint32_t * ) ( ( ( size_t ) dst + 3 ) & ~ 3 ) ;
uint32_t * d32 = ( uint32_t * ) dst ;
if ( dst_size - 1024 < ( uint8_t * ) d32 - orig_dst )
d32 = ( uint32_t * ) dst ;
for ( i = 0 ; i < 256 ; i + + )
for ( i = 0 ; i < 256 ; i + + )
AV_WL32 ( d32 + i , AV_RN32 ( src_data [ 1 ] + 4 * i ) ) ;
AV_WL32 ( d32 + i , AV_RN32 ( src_data [ 1 ] + 4 * i ) ) ;