@ -60,105 +60,38 @@ int av_fill_image_linesizes(int linesize[4], enum PixelFormat pix_fmt, int width
}
int av_fill_image_pointers ( uint8_t * data [ 4 ] , enum PixelFormat pix_fmt , int height ,
uint8_t * ptr , const int linesize [ 4 ] )
uint8_t * ptr , const int linesizes [ 4 ] )
{
int size , h2 , size2 ;
int i , total_size , size [ 4 ] , has_plane [ 4 ] ;
const AVPixFmtDescriptor * desc = & av_pix_fmt_descriptors [ pix_fmt ] ;
memset ( data , 0 , sizeof ( data [ 0 ] ) * 4 ) ;
memset ( size , 0 , sizeof ( size ) ) ;
memset ( has_plane , 0 , sizeof ( has_plane ) ) ;
if ( desc - > flags & PIX_FMT_HWACCEL )
return AVERROR ( EINVAL ) ;
size = linesize [ 0 ] * height ;
switch ( pix_fmt ) {
case PIX_FMT_YUV420P :
case PIX_FMT_YUV422P :
case PIX_FMT_YUV444P :
case PIX_FMT_YUV410P :
case PIX_FMT_YUV411P :
case PIX_FMT_YUV440P :
case PIX_FMT_YUVJ420P :
case PIX_FMT_YUVJ422P :
case PIX_FMT_YUVJ444P :
case PIX_FMT_YUVJ440P :
case PIX_FMT_YUV420P16LE :
case PIX_FMT_YUV422P16LE :
case PIX_FMT_YUV444P16LE :
case PIX_FMT_YUV420P16BE :
case PIX_FMT_YUV422P16BE :
case PIX_FMT_YUV444P16BE :
h2 = ( height + ( 1 < < desc - > log2_chroma_h ) - 1 ) > > desc - > log2_chroma_h ;
size2 = linesize [ 1 ] * h2 ;
data [ 0 ] = ptr ;
data [ 1 ] = data [ 0 ] + size ;
data [ 2 ] = data [ 1 ] + size2 ;
data [ 3 ] = NULL ;
return size + 2 * size2 ;
case PIX_FMT_YUVA420P :
h2 = ( height + ( 1 < < desc - > log2_chroma_h ) - 1 ) > > desc - > log2_chroma_h ;
size2 = linesize [ 1 ] * h2 ;
data [ 0 ] = ptr ;
data [ 1 ] = data [ 0 ] + size ;
data [ 2 ] = data [ 1 ] + size2 ;
data [ 3 ] = data [ 1 ] + size2 + size2 ;
return 2 * size + 2 * size2 ;
case PIX_FMT_NV12 :
case PIX_FMT_NV21 :
h2 = ( height + ( 1 < < desc - > log2_chroma_h ) - 1 ) > > desc - > log2_chroma_h ;
size2 = linesize [ 1 ] * h2 ;
data [ 0 ] = ptr ;
data [ 1 ] = data [ 0 ] + size ;
data [ 2 ] = NULL ;
data [ 3 ] = NULL ;
return size + size2 ;
case PIX_FMT_RGB24 :
case PIX_FMT_BGR24 :
case PIX_FMT_ARGB :
case PIX_FMT_ABGR :
case PIX_FMT_RGBA :
case PIX_FMT_BGRA :
case PIX_FMT_RGB48BE :
case PIX_FMT_RGB48LE :
case PIX_FMT_GRAY16BE :
case PIX_FMT_GRAY16LE :
case PIX_FMT_BGR444BE :
case PIX_FMT_BGR444LE :
case PIX_FMT_BGR555BE :
case PIX_FMT_BGR555LE :
case PIX_FMT_BGR565BE :
case PIX_FMT_BGR565LE :
case PIX_FMT_RGB444BE :
case PIX_FMT_RGB444LE :
case PIX_FMT_RGB555BE :
case PIX_FMT_RGB555LE :
case PIX_FMT_RGB565BE :
case PIX_FMT_RGB565LE :
case PIX_FMT_YUYV422 :
case PIX_FMT_UYVY422 :
case PIX_FMT_UYYVYY411 :
case PIX_FMT_RGB4 :
case PIX_FMT_BGR4 :
case PIX_FMT_MONOWHITE :
case PIX_FMT_MONOBLACK :
case PIX_FMT_Y400A :
data [ 0 ] = ptr ;
data [ 1 ] = NULL ;
data [ 2 ] = NULL ;
data [ 3 ] = NULL ;
return size ;
case PIX_FMT_PAL8 :
case PIX_FMT_RGB8 :
case PIX_FMT_BGR8 :
case PIX_FMT_RGB4_BYTE :
case PIX_FMT_BGR4_BYTE :
case PIX_FMT_GRAY8 :
size2 = ( size + 3 ) & ~ 3 ;
data [ 0 ] = ptr ;
data [ 1 ] = ptr + size2 ; /* palette is stored here as 256 32 bit words */
data [ 2 ] = NULL ;
data [ 3 ] = NULL ;
return size2 + 256 * 4 ;
default :
data [ 0 ] = NULL ;
data [ 1 ] = NULL ;
data [ 2 ] = NULL ;
data [ 3 ] = NULL ;
return - 1 ;
size [ 0 ] = linesizes [ 0 ] * height ;
if ( desc - > flags & PIX_FMT_PAL ) {
size [ 0 ] = ( size [ 0 ] + 3 ) & ~ 3 ;
data [ 1 ] = ptr + size [ 0 ] ; /* palette is stored here as 256 32 bits words */
return size [ 0 ] + 256 * 4 ;
}
for ( i = 0 ; i < 4 ; i + + )
has_plane [ desc - > comp [ i ] . plane ] = 1 ;
total_size = size [ 0 ] ;
for ( i = 1 ; has_plane [ i ] & & i < 4 ; i + + ) {
int h , s = ( i = = 1 | | i = = 2 ) ? desc - > log2_chroma_h : 0 ;
data [ i ] = data [ i - 1 ] + size [ i - 1 ] ;
h = ( height + ( 1 < < s ) - 1 ) > > s ;
size [ i ] = h * linesizes [ i ] ;
total_size + = size [ i ] ;
}
return total_size ;
}