| 
				
				
					
				
				
				 | 
			
			 | 
			@@ -776,7 +776,8 @@ av_cold int ff_yuv2rgb_c_init_tables(SwsContext *c, const int inv_table[4], | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    uint16_t *y_table16; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    uint32_t *y_table32; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    int i, base, rbase, gbase, bbase, av_uninit(abase), needAlpha; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    const int yoffs = fullRange ? 384 : 326; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    const int yoffs = (fullRange ? 384 : 326) + YUVRGB_TABLE_LUMA_HEADROOM; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    const int table_plane_size = 1024 + 2*YUVRGB_TABLE_LUMA_HEADROOM; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    int64_t crv =  inv_table[0]; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    int64_t cbu =  inv_table[1]; | 
		
		
	
	
		
			
				| 
				
					
				
				
					
				
				
				 | 
			
			 | 
			@@ -833,10 +834,10 @@ av_cold int ff_yuv2rgb_c_init_tables(SwsContext *c, const int inv_table[4], | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            return AVERROR(ENOMEM); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    switch (bpp) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    case 1: | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        ALLOC_YUV_TABLE(1024); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        ALLOC_YUV_TABLE(table_plane_size); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        y_table     = c->yuvTable; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        yb = -(384 << 16) - oy; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        for (i = 0; i < 1024 - 110; i++) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        yb = -(384 << 16) - YUVRGB_TABLE_LUMA_HEADROOM*cy - oy; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        for (i = 0; i < table_plane_size - 110; i++) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            y_table[i + 110]  = av_clip_uint8((yb + 0x8000) >> 16) >> 7; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            yb               += cy; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        } | 
		
		
	
	
		
			
				| 
				
				
				
					
				
				 | 
			
			 | 
			@@ -848,60 +849,60 @@ av_cold int ff_yuv2rgb_c_init_tables(SwsContext *c, const int inv_table[4], | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        rbase       = isRgb ? 3 : 0; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        gbase       = 1; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        bbase       = isRgb ? 0 : 3; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        ALLOC_YUV_TABLE(1024 * 3); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        ALLOC_YUV_TABLE(table_plane_size * 3); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        y_table     = c->yuvTable; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        yb = -(384 << 16) - oy; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        for (i = 0; i < 1024 - 110; i++) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        yb = -(384 << 16) - YUVRGB_TABLE_LUMA_HEADROOM*cy - oy; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        for (i = 0; i < table_plane_size - 110; i++) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            int yval                = av_clip_uint8((yb + 0x8000) >> 16); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            y_table[i + 110]        = (yval >> 7)        << rbase; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            y_table[i +  37 + 1024] = ((yval + 43) / 85) << gbase; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            y_table[i + 110 + 2048] = (yval >> 7)        << bbase; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            y_table[i +  37 +   table_plane_size] = ((yval + 43) / 85) << gbase; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            y_table[i + 110 + 2*table_plane_size] = (yval >> 7)        << bbase; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            yb += cy; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        fill_table(c->table_rV, 1, crv, y_table + yoffs); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        fill_table(c->table_gU, 1, cgu, y_table + yoffs + 1024); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        fill_table(c->table_bU, 1, cbu, y_table + yoffs + 2048); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        fill_table(c->table_gU, 1, cgu, y_table + yoffs +   table_plane_size); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        fill_table(c->table_bU, 1, cbu, y_table + yoffs + 2*table_plane_size); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        fill_gv_table(c->table_gV, 1, cgv); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        break; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    case 8: | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        rbase       = isRgb ? 5 : 0; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        gbase       = isRgb ? 2 : 3; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        bbase       = isRgb ? 0 : 6; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        ALLOC_YUV_TABLE(1024 * 3); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        ALLOC_YUV_TABLE(table_plane_size * 3); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        y_table     = c->yuvTable; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        yb = -(384 << 16) - oy; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        for (i = 0; i < 1024 - 38; i++) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        yb = -(384 << 16) - YUVRGB_TABLE_LUMA_HEADROOM*cy - oy; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        for (i = 0; i < table_plane_size - 38; i++) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            int yval               = av_clip_uint8((yb + 0x8000) >> 16); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            y_table[i + 16]        = ((yval + 18) / 36) << rbase; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            y_table[i + 16 + 1024] = ((yval + 18) / 36) << gbase; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            y_table[i + 37 + 2048] = ((yval + 43) / 85) << bbase; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            y_table[i + 16 +   table_plane_size] = ((yval + 18) / 36) << gbase; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            y_table[i + 37 + 2*table_plane_size] = ((yval + 43) / 85) << bbase; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            yb += cy; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        fill_table(c->table_rV, 1, crv, y_table + yoffs); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        fill_table(c->table_gU, 1, cgu, y_table + yoffs + 1024); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        fill_table(c->table_bU, 1, cbu, y_table + yoffs + 2048); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        fill_table(c->table_gU, 1, cgu, y_table + yoffs +   table_plane_size); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        fill_table(c->table_bU, 1, cbu, y_table + yoffs + 2*table_plane_size); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        fill_gv_table(c->table_gV, 1, cgv); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        break; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    case 12: | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        rbase       = isRgb ? 8 : 0; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        gbase       = 4; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        bbase       = isRgb ? 0 : 8; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        ALLOC_YUV_TABLE(1024 * 3 * 2); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        ALLOC_YUV_TABLE(table_plane_size * 3 * 2); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        y_table16   = c->yuvTable; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        yb = -(384 << 16) - oy; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        for (i = 0; i < 1024; i++) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        yb = -(384 << 16) - YUVRGB_TABLE_LUMA_HEADROOM*cy - oy; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        for (i = 0; i < table_plane_size; i++) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            uint8_t yval        = av_clip_uint8((yb + 0x8000) >> 16); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            y_table16[i]        = (yval >> 4) << rbase; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            y_table16[i + 1024] = (yval >> 4) << gbase; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            y_table16[i + 2048] = (yval >> 4) << bbase; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            y_table16[i +   table_plane_size] = (yval >> 4) << gbase; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            y_table16[i + 2*table_plane_size] = (yval >> 4) << bbase; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            yb += cy; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        if (isNotNe) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            for (i = 0; i < 1024 * 3; i++) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            for (i = 0; i < table_plane_size * 3; i++) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                y_table16[i] = av_bswap16(y_table16[i]); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        fill_table(c->table_rV, 2, crv, y_table16 + yoffs); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        fill_table(c->table_gU, 2, cgu, y_table16 + yoffs + 1024); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        fill_table(c->table_bU, 2, cbu, y_table16 + yoffs + 2048); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        fill_table(c->table_gU, 2, cgu, y_table16 + yoffs +   table_plane_size); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        fill_table(c->table_bU, 2, cbu, y_table16 + yoffs + 2*table_plane_size); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        fill_gv_table(c->table_gV, 2, cgv); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        break; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    case 15: | 
		
		
	
	
		
			
				| 
				
				
				
					
				
				 | 
			
			 | 
			@@ -909,30 +910,30 @@ av_cold int ff_yuv2rgb_c_init_tables(SwsContext *c, const int inv_table[4], | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        rbase       = isRgb ? bpp - 5 : 0; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        gbase       = 5; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        bbase       = isRgb ? 0 : (bpp - 5); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        ALLOC_YUV_TABLE(1024 * 3 * 2); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        ALLOC_YUV_TABLE(table_plane_size * 3 * 2); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        y_table16   = c->yuvTable; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        yb = -(384 << 16) - oy; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        for (i = 0; i < 1024; i++) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        yb = -(384 << 16) - YUVRGB_TABLE_LUMA_HEADROOM*cy - oy; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        for (i = 0; i < table_plane_size; i++) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            uint8_t yval        = av_clip_uint8((yb + 0x8000) >> 16); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            y_table16[i]        = (yval >> 3)          << rbase; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            y_table16[i + 1024] = (yval >> (18 - bpp)) << gbase; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            y_table16[i + 2048] = (yval >> 3)          << bbase; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            y_table16[i +   table_plane_size] = (yval >> (18 - bpp)) << gbase; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            y_table16[i + 2*table_plane_size] = (yval >> 3)          << bbase; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            yb += cy; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        if (isNotNe) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            for (i = 0; i < 1024 * 3; i++) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            for (i = 0; i < table_plane_size * 3; i++) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                y_table16[i] = av_bswap16(y_table16[i]); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        fill_table(c->table_rV, 2, crv, y_table16 + yoffs); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        fill_table(c->table_gU, 2, cgu, y_table16 + yoffs + 1024); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        fill_table(c->table_bU, 2, cbu, y_table16 + yoffs + 2048); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        fill_table(c->table_gU, 2, cgu, y_table16 + yoffs +   table_plane_size); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        fill_table(c->table_bU, 2, cbu, y_table16 + yoffs + 2*table_plane_size); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        fill_gv_table(c->table_gV, 2, cgv); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        break; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    case 24: | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    case 48: | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        ALLOC_YUV_TABLE(1024); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        ALLOC_YUV_TABLE(table_plane_size); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        y_table     = c->yuvTable; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        yb = -(384 << 16) - oy; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        for (i = 0; i < 1024; i++) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        yb = -(384 << 16) - YUVRGB_TABLE_LUMA_HEADROOM*cy - oy; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        for (i = 0; i < table_plane_size; i++) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            y_table[i]  = av_clip_uint8((yb + 0x8000) >> 16); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            yb         += cy; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        } | 
		
		
	
	
		
			
				| 
				
				
				
					
				
				 | 
			
			 | 
			@@ -951,20 +952,20 @@ av_cold int ff_yuv2rgb_c_init_tables(SwsContext *c, const int inv_table[4], | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        needAlpha = CONFIG_SWSCALE_ALPHA && isALPHA(c->srcFormat); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        if (!needAlpha) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            abase = (base + 24) & 31; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        ALLOC_YUV_TABLE(1024 * 3 * 4); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        ALLOC_YUV_TABLE(table_plane_size * 3 * 4); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        y_table32   = c->yuvTable; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        yb = -(384 << 16) - oy; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        for (i = 0; i < 1024; i++) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        yb = -(384 << 16) - YUVRGB_TABLE_LUMA_HEADROOM*cy - oy; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        for (i = 0; i < table_plane_size; i++) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            unsigned yval       = av_clip_uint8((yb + 0x8000) >> 16); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            y_table32[i]        = (yval << rbase) + | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                  (needAlpha ? 0 : (255u << abase)); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            y_table32[i + 1024] =  yval << gbase; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            y_table32[i + 2048] =  yval << bbase; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            y_table32[i +   table_plane_size] =  yval << gbase; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            y_table32[i + 2*table_plane_size] =  yval << bbase; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            yb += cy; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        fill_table(c->table_rV, 4, crv, y_table32 + yoffs); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        fill_table(c->table_gU, 4, cgu, y_table32 + yoffs + 1024); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        fill_table(c->table_bU, 4, cbu, y_table32 + yoffs + 2048); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        fill_table(c->table_gU, 4, cgu, y_table32 + yoffs +   table_plane_size); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        fill_table(c->table_bU, 4, cbu, y_table32 + yoffs + 2*table_plane_size); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        fill_gv_table(c->table_gV, 4, cgv); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        break; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    default: | 
		
		
	
	
		
			
				| 
				
					
				
				
				
				 | 
			
			 | 
			
  |