@ -671,23 +671,8 @@ static void getSubSampleFactors(int *h, int *v, enum PixelFormat format)
* v = av_pix_fmt_descriptors [ format ] . log2_chroma_h ;
}
static uint16_t roundToInt16 ( int64_t f )
{
int r = ( f + ( 1 < < 15 ) ) > > 16 ;
if ( r < - 0x7FFF ) return 0x8000 ;
else if ( r > 0x7FFF ) return 0x7FFF ;
else return r ;
}
int sws_setColorspaceDetails ( SwsContext * c , const int inv_table [ 4 ] , int srcRange , const int table [ 4 ] , int dstRange , int brightness , int contrast , int saturation )
{
int64_t crv = inv_table [ 0 ] ;
int64_t cbu = inv_table [ 1 ] ;
int64_t cgu = - inv_table [ 2 ] ;
int64_t cgv = - inv_table [ 3 ] ;
int64_t cy = 1 < < 16 ;
int64_t oy = 0 ;
memcpy ( c - > srcColorspaceTable , inv_table , sizeof ( int ) * 4 ) ;
memcpy ( c - > dstColorspaceTable , table , sizeof ( int ) * 4 ) ;
@ -698,41 +683,6 @@ int sws_setColorspaceDetails(SwsContext *c, const int inv_table[4], int srcRange
c - > dstRange = dstRange ;
if ( isYUV ( c - > dstFormat ) | | isGray ( c - > dstFormat ) ) return - 1 ;
c - > uOffset = 0x0400040004000400LL ;
c - > vOffset = 0x0400040004000400LL ;
if ( ! srcRange ) {
cy = ( cy * 255 ) / 219 ;
oy = 16 < < 16 ;
} else {
crv = ( crv * 224 ) / 255 ;
cbu = ( cbu * 224 ) / 255 ;
cgu = ( cgu * 224 ) / 255 ;
cgv = ( cgv * 224 ) / 255 ;
}
cy = ( cy * contrast ) > > 16 ;
crv = ( crv * contrast * saturation ) > > 32 ;
cbu = ( cbu * contrast * saturation ) > > 32 ;
cgu = ( cgu * contrast * saturation ) > > 32 ;
cgv = ( cgv * contrast * saturation ) > > 32 ;
oy - = 256 * brightness ;
c - > yCoeff = roundToInt16 ( cy * 8192 ) * 0x0001000100010001ULL ;
c - > vrCoeff = roundToInt16 ( crv * 8192 ) * 0x0001000100010001ULL ;
c - > ubCoeff = roundToInt16 ( cbu * 8192 ) * 0x0001000100010001ULL ;
c - > vgCoeff = roundToInt16 ( cgv * 8192 ) * 0x0001000100010001ULL ;
c - > ugCoeff = roundToInt16 ( cgu * 8192 ) * 0x0001000100010001ULL ;
c - > yOffset = roundToInt16 ( oy * 8 ) * 0x0001000100010001ULL ;
c - > yuv2rgb_y_coeff = ( int16_t ) roundToInt16 ( cy < < 13 ) ;
c - > yuv2rgb_y_offset = ( int16_t ) roundToInt16 ( oy < < 9 ) ;
c - > yuv2rgb_v2r_coeff = ( int16_t ) roundToInt16 ( crv < < 13 ) ;
c - > yuv2rgb_v2g_coeff = ( int16_t ) roundToInt16 ( cgv < < 13 ) ;
c - > yuv2rgb_u2g_coeff = ( int16_t ) roundToInt16 ( cgu < < 13 ) ;
c - > yuv2rgb_u2b_coeff = ( int16_t ) roundToInt16 ( cbu < < 13 ) ;
ff_yuv2rgb_c_init_tables ( c , inv_table , srcRange , brightness , contrast , saturation ) ;
//FIXME factorize