[FFmpeg-devel] [PATCH 3/3] swscale/swscale_unscaled: fix packed16togbra16() for formats with bpc between 9-14 bits

James Almer jamrial at gmail.com
Mon May 19 00:17:08 EEST 2025


On 5/18/2025 6:14 PM, James Almer wrote:
> On 5/18/2025 5:52 PM, Ramiro Polla wrote:
>> Currently, packed16togbra16() always sets the alpha value to 0xFFFF,
>> without taking the bit depth into consideration.
>>
>> This commit restricts the alpha value to the bit depth.
> 
> packed16togbra16() seems to only be called for BGR48 and BGRA64, both of 
> which are 16bits, so this change is superfluous.

Ah, nevermind, i was looking at the src formats, not dst.

Are there no tests that cover these paths? I added a bunch a couple 
months ago, so maybe it could be extended.

> 
>> ---
>>   libswscale/swscale_unscaled.c | 8 ++++----
>>   1 file changed, 4 insertions(+), 4 deletions(-)
>>
>> diff --git a/libswscale/swscale_unscaled.c b/libswscale/ 
>> swscale_unscaled.c
>> index 8d71a88c23..488db43e0b 100644
>> --- a/libswscale/swscale_unscaled.c
>> +++ b/libswscale/swscale_unscaled.c
>> @@ -699,7 +699,7 @@ static void packed16togbra16(const uint8_t *src, 
>> int srcStride,
>>                       dst[0][x] = av_bswap16(av_bswap16(*src_line++) 
>> >> shift);
>>                       dst[1][x] = av_bswap16(av_bswap16(*src_line++) 
>> >> shift);
>>                       dst[2][x] = av_bswap16(av_bswap16(*src_line++) 
>> >> shift);
>> -                    dst[3][x] = 0xFFFF;
>> +                    dst[3][x] = av_bswap16(0xFFFF >> shift);
>>                   }
>>               } else if (src_alpha) {
>>                   for (x = 0; x < width; x++) {
>> @@ -729,7 +729,7 @@ static void packed16togbra16(const uint8_t *src, 
>> int srcStride,
>>                       dst[0][x] = av_bswap16(*src_line++ >> shift);
>>                       dst[1][x] = av_bswap16(*src_line++ >> shift);
>>                       dst[2][x] = av_bswap16(*src_line++ >> shift);
>> -                    dst[3][x] = 0xFFFF;
>> +                    dst[3][x] = av_bswap16(0xFFFF >> shift);
>>                   }
>>               } else if (src_alpha) {
>>                   for (x = 0; x < width; x++) {
>> @@ -759,7 +759,7 @@ static void packed16togbra16(const uint8_t *src, 
>> int srcStride,
>>                       dst[0][x] = av_bswap16(*src_line++) >> shift;
>>                       dst[1][x] = av_bswap16(*src_line++) >> shift;
>>                       dst[2][x] = av_bswap16(*src_line++) >> shift;
>> -                    dst[3][x] = 0xFFFF;
>> +                    dst[3][x] = 0xFFFF >> shift;
>>                   }
>>               } else if (src_alpha) {
>>                   for (x = 0; x < width; x++) {
>> @@ -789,7 +789,7 @@ static void packed16togbra16(const uint8_t *src, 
>> int srcStride,
>>                       dst[0][x] = *src_line++ >> shift;
>>                       dst[1][x] = *src_line++ >> shift;
>>                       dst[2][x] = *src_line++ >> shift;
>> -                    dst[3][x] = 0xFFFF;
>> +                    dst[3][x] = 0xFFFF >> shift;
>>                   }
>>               } else if (src_alpha) {
>>                   for (x = 0; x < width; x++) {
> 

-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_signature.asc
Type: application/pgp-signature
Size: 495 bytes
Desc: OpenPGP digital signature
URL: <https://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20250518/d712619b/attachment.sig>


More information about the ffmpeg-devel mailing list