Skip to content

Commit

Permalink
sws: use shift for chroma sample up convertion
Browse files Browse the repository at this point in the history
sws: use shifts for non full range luma sample upconvertion

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
  • Loading branch information
michaelni committed Aug 25, 2011
1 parent ee0ff05 commit abe0b8e
Show file tree
Hide file tree
Showing 9 changed files with 72 additions and 59 deletions.
33 changes: 23 additions & 10 deletions libswscale/swscale_unscaled.c
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -444,6 +444,7 @@ static int planarCopyWrapper(SwsContext *c, const uint8_t* src[], int srcStride[
int height= (plane==0 || plane==3) ? srcSliceH: -((-srcSliceH)>>c->chrDstVSubSample); int height= (plane==0 || plane==3) ? srcSliceH: -((-srcSliceH)>>c->chrDstVSubSample);
const uint8_t *srcPtr= src[plane]; const uint8_t *srcPtr= src[plane];
uint8_t *dstPtr= dst[plane] + dstStride[plane]*y; uint8_t *dstPtr= dst[plane] + dstStride[plane]*y;
int shiftonly= plane==1 || plane==2 || (!c->srcRange && plane==0);


if (!dst[plane]) continue; if (!dst[plane]) continue;
// ignore palette for GRAY8 // ignore palette for GRAY8
Expand All @@ -469,25 +470,37 @@ static int planarCopyWrapper(SwsContext *c, const uint8_t* src[], int srcStride[
} }
} else if (src_depth == 8) { } else if (src_depth == 8) {
for (i = 0; i < height; i++) { for (i = 0; i < height; i++) {
#define COPY816(w)\
if(shiftonly){\
for (j = 0; j < length; j++)\
w(&dstPtr2[j], srcPtr[j]<<(dst_depth-8));\
}else{\
for (j = 0; j < length; j++)\
w(&dstPtr2[j], (srcPtr[j]<<(dst_depth-8)) |\
(srcPtr[j]>>(2*8-dst_depth)));\
}
if(isBE(c->dstFormat)){ if(isBE(c->dstFormat)){
for (j = 0; j < length; j++) COPY816(AV_WB16)
AV_WB16(&dstPtr2[j], (srcPtr[j]<<(dst_depth-8)) |
(srcPtr[j]>>(2*8-dst_depth)));
} else { } else {
for (j = 0; j < length; j++) COPY816(AV_WL16)
AV_WL16(&dstPtr2[j], (srcPtr[j]<<(dst_depth-8)) |
(srcPtr[j]>>(2*8-dst_depth)));
} }
dstPtr2 += dstStride[plane]/2; dstPtr2 += dstStride[plane]/2;
srcPtr += srcStride[plane]; srcPtr += srcStride[plane];
} }
} else if (src_depth <= dst_depth) { } else if (src_depth <= dst_depth) {
for (i = 0; i < height; i++) { for (i = 0; i < height; i++) {
#define COPY_UP(r,w) \ #define COPY_UP(r,w) \
for (j = 0; j < length; j++){ \ if(shiftonly){\
unsigned int v= r(&srcPtr2[j]);\ for (j = 0; j < length; j++){ \
w(&dstPtr2[j], (v<<(dst_depth-src_depth)) | \ unsigned int v= r(&srcPtr2[j]);\
(v>>(2*src_depth-dst_depth)));\ w(&dstPtr2[j], v<<(dst_depth-src_depth));\
}\
}else{\
for (j = 0; j < length; j++){ \
unsigned int v= r(&srcPtr2[j]);\
w(&dstPtr2[j], (v<<(dst_depth-src_depth)) | \
(v>>(2*src_depth-dst_depth)));\
}\
} }
if(isBE(c->srcFormat)){ if(isBE(c->srcFormat)){
if(isBE(c->dstFormat)){ if(isBE(c->dstFormat)){
Expand Down
2 changes: 1 addition & 1 deletion tests/ref/fate/v210
Original file line number Original file line Diff line number Diff line change
@@ -1 +1 @@
0, 0, 3686400, 0x75ee1dde 0, 0, 3686400, 0x8d5c3847
16 changes: 8 additions & 8 deletions tests/ref/lavfi/pixdesc
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ bgr565le 1dfdd03995c287e3c754b164bf26a355
bgr8 24bd566170343d06fec6fccfff5abc54 bgr8 24bd566170343d06fec6fccfff5abc54
bgra 76a18a5151242fa137133f604cd624d2 bgra 76a18a5151242fa137133f604cd624d2
gray db08f7f0751900347e6b8649e4164d21 gray db08f7f0751900347e6b8649e4164d21
gray16be 7becf34ae825a3df3969bf4c6bfeb5e2 gray16be b44458c2254aa7a3d7b8dbf53be91979
gray16le 10bd87059b5c189f3caef2837f4f2b5c gray16le ecda5143f8a55fca1f6c7dfb238ddcba
monob 668ebe8b8103b9046b251b2fa8a1d88f monob 668ebe8b8103b9046b251b2fa8a1d88f
monow 9251497f3b0634f1165d12d5a289d943 monow 9251497f3b0634f1165d12d5a289d943
nv12 e0af357888584d36eec5aa0f673793ef nv12 e0af357888584d36eec5aa0f673793ef
Expand All @@ -31,12 +31,12 @@ uyvy422 adcf64516a19fce44df77082bdb16291
yuv410p 2d9225153c83ee1132397d619d94d1b3 yuv410p 2d9225153c83ee1132397d619d94d1b3
yuv411p 8b298af3e43348ca1b11eb8a3252ac6c yuv411p 8b298af3e43348ca1b11eb8a3252ac6c
yuv420p eba2f135a08829387e2f698ff72a2939 yuv420p eba2f135a08829387e2f698ff72a2939
yuv420p10be 7605e266c088d0fcf68c7b27c3ceff5f yuv420p10be ea2aee509286fa3d07a6c68fec9967a5
yuv420p10le 4228ee628c6deec123a13b9784516cc7 yuv420p10le 645ef73e06de41c83a7bc724179d2ce3
yuv420p16be 16c009a235cd52b74791a895423152a3 yuv420p16be ba858ff4246368c28f03152487f57ef3
yuv420p16le 2d59c4f1d0314a5a957a7cfc4b6fabcc yuv420p16le de239729a4fe1d4cfa3743e006654e78
yuv420p9be ce880fa07830e5297c22acf6e20555ce yuv420p9be 64e36fd90573f67ac2006d103972a79b
yuv420p9le 16543fda8f87d94a6cf857d2e8d4461a yuv420p9le 9ed4b1dfabc53fd9e586ff6c4c43af80
yuv422p c9bba4529821d796a6ab09f6a5fd355a yuv422p c9bba4529821d796a6ab09f6a5fd355a
yuv422p10be bdc13b630fd668b34c6fe1aae28dfc71 yuv422p10be bdc13b630fd668b34c6fe1aae28dfc71
yuv422p10le d0607c260a45c973e6639f4e449730ad yuv422p10le d0607c260a45c973e6639f4e449730ad
Expand Down
16 changes: 8 additions & 8 deletions tests/ref/lavfi/pixfmts_copy
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ bgr565le 1dfdd03995c287e3c754b164bf26a355
bgr8 24bd566170343d06fec6fccfff5abc54 bgr8 24bd566170343d06fec6fccfff5abc54
bgra 76a18a5151242fa137133f604cd624d2 bgra 76a18a5151242fa137133f604cd624d2
gray db08f7f0751900347e6b8649e4164d21 gray db08f7f0751900347e6b8649e4164d21
gray16be 7becf34ae825a3df3969bf4c6bfeb5e2 gray16be b44458c2254aa7a3d7b8dbf53be91979
gray16le 10bd87059b5c189f3caef2837f4f2b5c gray16le ecda5143f8a55fca1f6c7dfb238ddcba
monob 668ebe8b8103b9046b251b2fa8a1d88f monob 668ebe8b8103b9046b251b2fa8a1d88f
monow 9251497f3b0634f1165d12d5a289d943 monow 9251497f3b0634f1165d12d5a289d943
nv12 e0af357888584d36eec5aa0f673793ef nv12 e0af357888584d36eec5aa0f673793ef
Expand All @@ -31,12 +31,12 @@ uyvy422 adcf64516a19fce44df77082bdb16291
yuv410p 2d9225153c83ee1132397d619d94d1b3 yuv410p 2d9225153c83ee1132397d619d94d1b3
yuv411p 8b298af3e43348ca1b11eb8a3252ac6c yuv411p 8b298af3e43348ca1b11eb8a3252ac6c
yuv420p eba2f135a08829387e2f698ff72a2939 yuv420p eba2f135a08829387e2f698ff72a2939
yuv420p10be 7605e266c088d0fcf68c7b27c3ceff5f yuv420p10be ea2aee509286fa3d07a6c68fec9967a5
yuv420p10le 4228ee628c6deec123a13b9784516cc7 yuv420p10le 645ef73e06de41c83a7bc724179d2ce3
yuv420p16be 16c009a235cd52b74791a895423152a3 yuv420p16be ba858ff4246368c28f03152487f57ef3
yuv420p16le 2d59c4f1d0314a5a957a7cfc4b6fabcc yuv420p16le de239729a4fe1d4cfa3743e006654e78
yuv420p9be ce880fa07830e5297c22acf6e20555ce yuv420p9be 64e36fd90573f67ac2006d103972a79b
yuv420p9le 16543fda8f87d94a6cf857d2e8d4461a yuv420p9le 9ed4b1dfabc53fd9e586ff6c4c43af80
yuv422p c9bba4529821d796a6ab09f6a5fd355a yuv422p c9bba4529821d796a6ab09f6a5fd355a
yuv422p10be bdc13b630fd668b34c6fe1aae28dfc71 yuv422p10be bdc13b630fd668b34c6fe1aae28dfc71
yuv422p10le d0607c260a45c973e6639f4e449730ad yuv422p10le d0607c260a45c973e6639f4e449730ad
Expand Down
8 changes: 4 additions & 4 deletions tests/ref/lavfi/pixfmts_crop
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ bgr565le 891664e5a54ae5968901347da92bc5e9
bgr8 4b7159e05765bd4703180072d86423c8 bgr8 4b7159e05765bd4703180072d86423c8
bgra 395c9f706fccda721471acaa5c96c16c bgra 395c9f706fccda721471acaa5c96c16c
gray 8c4850e66562a587a292dc728a65ea4a gray 8c4850e66562a587a292dc728a65ea4a
gray16be daa5a6b98fb4a280c57c57bff1a2ab5a gray16be 257b4339925b0e672f552d8c9511f2c3
gray16le 84f5ea7259073edcb893113b42213c8e gray16le 67cf7b26cda55356cc25e0f4e42cc136
rgb24 3b90ed64b687d3dc186c6ef521dc71a8 rgb24 3b90ed64b687d3dc186c6ef521dc71a8
rgb48be e6fd353c0eb9bea889423954414bea35 rgb48be e6fd353c0eb9bea889423954414bea35
rgb48le 68a1723da11ce08b502d42e204376503 rgb48le 68a1723da11ce08b502d42e204376503
Expand All @@ -26,8 +26,8 @@ rgba fd00b24c7597268c32759a84a1de2de4
yuv410p a9f2eaa747bf988b7bebe4f442b9c67a yuv410p a9f2eaa747bf988b7bebe4f442b9c67a
yuv411p 3334d3aef8dba238658090ac172375d1 yuv411p 3334d3aef8dba238658090ac172375d1
yuv420p bfea0188ddd4889787c403caae119cc7 yuv420p bfea0188ddd4889787c403caae119cc7
yuv420p16be 8365eff38b8c329aeb95fc605fa229bb yuv420p16be eb2f96b638a174377f5fc42cfc849ff5
yuv420p16le 5e8dd38d973d5854abe1ad4efad20cc1 yuv420p16le 3eae4c172d620b6d4ef2aeca403c4f54
yuv422p f2f930a91fe00d4252c4720b5ecd8961 yuv422p f2f930a91fe00d4252c4720b5ecd8961
yuv422p16be 167e4338811a7d272925a4c6417d60da yuv422p16be 167e4338811a7d272925a4c6417d60da
yuv422p16le 3359395d5875d581fa1e975013d30114 yuv422p16le 3359395d5875d581fa1e975013d30114
Expand Down
8 changes: 4 additions & 4 deletions tests/ref/lavfi/pixfmts_hflip
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ bgr565le 3703466e19e1b52e03a34fd244a8e8e4
bgr8 50b505a889f0428242305acb642da107 bgr8 50b505a889f0428242305acb642da107
bgra 01ca21e7e6a8d1281b4553bde8e8a404 bgra 01ca21e7e6a8d1281b4553bde8e8a404
gray 03efcb4ab52a24c0af0e03cfd26c9377 gray 03efcb4ab52a24c0af0e03cfd26c9377
gray16be 9bcbca979601ddc4869f846f08f3d1dd gray16be 632535b46edec78a6534ef18d37f2b71
gray16le c1b8965adcc7f847ee343149ff507073 gray16le 5c24e6f847bf9a41a40760c0d15df161
rgb24 754f1722fc738590cc407ac65749bfe8 rgb24 754f1722fc738590cc407ac65749bfe8
rgb48be d690412ca5fada031b5da47b87096248 rgb48be d690412ca5fada031b5da47b87096248
rgb48le c901feb564232f5d0bc0eabd66dae3e7 rgb48le c901feb564232f5d0bc0eabd66dae3e7
Expand All @@ -26,8 +26,8 @@ rgba d3d0dc1ecef3ed72f26a2986d0efc204
yuv410p acb543ebbbf63eefe533e6faffc006da yuv410p acb543ebbbf63eefe533e6faffc006da
yuv411p c626cf6d191139b4ca7efc0155f957f1 yuv411p c626cf6d191139b4ca7efc0155f957f1
yuv420p 2d5c80f9ba2ddd85b2aeda3564cc7d64 yuv420p 2d5c80f9ba2ddd85b2aeda3564cc7d64
yuv420p16be 758b0c1e2113b15e7afde48da4e4d024 yuv420p16be 1c4fa93d0744de3cdc6d34ab55db3fb4
yuv420p16le 480ccd951dcb806bc875d307e02e50a0 yuv420p16le 92c74f5759068c381e4a066fe7faf2e0
yuv422p 6e728f4eb9eae287c224f396d84be6ea yuv422p 6e728f4eb9eae287c224f396d84be6ea
yuv422p16be 69cf0605496c321546899a8442ee64fb yuv422p16be 69cf0605496c321546899a8442ee64fb
yuv422p16le f0b443fea72f4b6f462859a73b159664 yuv422p16le f0b443fea72f4b6f462859a73b159664
Expand Down
16 changes: 8 additions & 8 deletions tests/ref/lavfi/pixfmts_null
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ bgr565le 1dfdd03995c287e3c754b164bf26a355
bgr8 24bd566170343d06fec6fccfff5abc54 bgr8 24bd566170343d06fec6fccfff5abc54
bgra 76a18a5151242fa137133f604cd624d2 bgra 76a18a5151242fa137133f604cd624d2
gray db08f7f0751900347e6b8649e4164d21 gray db08f7f0751900347e6b8649e4164d21
gray16be 7becf34ae825a3df3969bf4c6bfeb5e2 gray16be b44458c2254aa7a3d7b8dbf53be91979
gray16le 10bd87059b5c189f3caef2837f4f2b5c gray16le ecda5143f8a55fca1f6c7dfb238ddcba
monob 668ebe8b8103b9046b251b2fa8a1d88f monob 668ebe8b8103b9046b251b2fa8a1d88f
monow 9251497f3b0634f1165d12d5a289d943 monow 9251497f3b0634f1165d12d5a289d943
nv12 e0af357888584d36eec5aa0f673793ef nv12 e0af357888584d36eec5aa0f673793ef
Expand All @@ -31,12 +31,12 @@ uyvy422 adcf64516a19fce44df77082bdb16291
yuv410p 2d9225153c83ee1132397d619d94d1b3 yuv410p 2d9225153c83ee1132397d619d94d1b3
yuv411p 8b298af3e43348ca1b11eb8a3252ac6c yuv411p 8b298af3e43348ca1b11eb8a3252ac6c
yuv420p eba2f135a08829387e2f698ff72a2939 yuv420p eba2f135a08829387e2f698ff72a2939
yuv420p10be 7605e266c088d0fcf68c7b27c3ceff5f yuv420p10be ea2aee509286fa3d07a6c68fec9967a5
yuv420p10le 4228ee628c6deec123a13b9784516cc7 yuv420p10le 645ef73e06de41c83a7bc724179d2ce3
yuv420p16be 16c009a235cd52b74791a895423152a3 yuv420p16be ba858ff4246368c28f03152487f57ef3
yuv420p16le 2d59c4f1d0314a5a957a7cfc4b6fabcc yuv420p16le de239729a4fe1d4cfa3743e006654e78
yuv420p9be ce880fa07830e5297c22acf6e20555ce yuv420p9be 64e36fd90573f67ac2006d103972a79b
yuv420p9le 16543fda8f87d94a6cf857d2e8d4461a yuv420p9le 9ed4b1dfabc53fd9e586ff6c4c43af80
yuv422p c9bba4529821d796a6ab09f6a5fd355a yuv422p c9bba4529821d796a6ab09f6a5fd355a
yuv422p10be bdc13b630fd668b34c6fe1aae28dfc71 yuv422p10be bdc13b630fd668b34c6fe1aae28dfc71
yuv422p10le d0607c260a45c973e6639f4e449730ad yuv422p10le d0607c260a45c973e6639f4e449730ad
Expand Down
16 changes: 8 additions & 8 deletions tests/ref/lavfi/pixfmts_scale
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ bgr565le 614897eaeb422bd9a972f8ee51909be5
bgr8 7f007fa6c153a16e808a9c51605a4016 bgr8 7f007fa6c153a16e808a9c51605a4016
bgra 01cfdda1f72fcabb6c46424e27f8c519 bgra 01cfdda1f72fcabb6c46424e27f8c519
gray d7786a7d9d99ac74230cc045cab5632c gray d7786a7d9d99ac74230cc045cab5632c
gray16be b554d6c1cc8da23967445be4dd3e4a86 gray16be a8fc0d7fea36407b5c319e3e736c7127
gray16le 715a33aa1c19cb26b14f5cc000e7a3d1 gray16le 495c89186178308ef171d385bbd8bd70
monob cb62f31b701c6e987b574974d1b31e32 monob cb62f31b701c6e987b574974d1b31e32
monow fd5d417ab7728acddffc06870661df61 monow fd5d417ab7728acddffc06870661df61
nv12 4676d59db43d657dc12841f6bc3ab452 nv12 4676d59db43d657dc12841f6bc3ab452
Expand All @@ -31,12 +31,12 @@ uyvy422 314bd486277111a95d9369b944fa0400
yuv410p 7df8f6d69b56a8dcb6c7ee908e5018b5 yuv410p 7df8f6d69b56a8dcb6c7ee908e5018b5
yuv411p 1143e7c5cc28fe0922b051b17733bc4c yuv411p 1143e7c5cc28fe0922b051b17733bc4c
yuv420p fdad2d8df8985e3d17e73c71f713cb14 yuv420p fdad2d8df8985e3d17e73c71f713cb14
yuv420p10be d7695b9117d5b52819c569459e42669b yuv420p10be dfa4d57bbc0e1a81f86a3895ab4feac0
yuv420p10le 0ac6d448db2df5f3d1346aa81f2b5f50 yuv420p10le af898206e757b0fca844a336f71d0091
yuv420p16be 9688e33e03b8c8275ab2fb1df0f06bee yuv420p16be 2a75942af24fbdc1fdfe189c6e7bf589
yuv420p16le cba8b390ad5e7b8678e419b8ce79c008 yuv420p16le c4264d92a7c273967a778f4f5daddbe3
yuv420p9be 8fa6e007b1a40f34eaa3e2beb73ea8af yuv420p9be 046091d96f2a78e224036f203d8c9601
yuv420p9le a7b131a7dd06906a5aef2e36d117b972 yuv420p9le c9abfffee99fcf5fcbfc5adcda14e4b4
yuv422p 918e37701ee7377d16a8a6c119c56a40 yuv422p 918e37701ee7377d16a8a6c119c56a40
yuv422p10be 35206fcd7e00ee582a8c366b37d57d1d yuv422p10be 35206fcd7e00ee582a8c366b37d57d1d
yuv422p10le 396f930e2da02f149ab9dd5b781cbe8d yuv422p10le 396f930e2da02f149ab9dd5b781cbe8d
Expand Down
16 changes: 8 additions & 8 deletions tests/ref/lavfi/pixfmts_vflip
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ bgr565le fdb617533e1e7ff512ea5b6b6233e738
bgr8 c60f93fd152c6903391d1fe9decd3547 bgr8 c60f93fd152c6903391d1fe9decd3547
bgra 7f9b799fb48544e49ce93e91d7f9fca8 bgra 7f9b799fb48544e49ce93e91d7f9fca8
gray 30d9014a9d43b5f37e7aa64be3a3ecfc gray 30d9014a9d43b5f37e7aa64be3a3ecfc
gray16be 6b84b85d3326182fa1217e138249edc5 gray16be 9e8319fa0d4945e587b8c095277be8de
gray16le 66bb8faa09dc149734aca3c768a6d4e1 gray16le 790031119f8e874d75ee6f01b4654185
monob d0cf8732677a5360b6160133043590d8 monob d0cf8732677a5360b6160133043590d8
monow ff9869d067ecb94eb9d90c9750c31fea monow ff9869d067ecb94eb9d90c9750c31fea
nv12 046f00f598ce14d9854a3534a5c99114 nv12 046f00f598ce14d9854a3534a5c99114
Expand All @@ -31,12 +31,12 @@ uyvy422 ffbd36720c77398d9a0d03ce2625928f
yuv410p 7bfb39d7afb49d6a6173e6b23ae321eb yuv410p 7bfb39d7afb49d6a6173e6b23ae321eb
yuv411p 4a90048cc3a65fac150e53289700efe1 yuv411p 4a90048cc3a65fac150e53289700efe1
yuv420p 2e6d6062e8cad37fb3ab2c433b55f382 yuv420p 2e6d6062e8cad37fb3ab2c433b55f382
yuv420p10be df97d20b3b4a10c174d4360552c4160d yuv420p10be fac8e0ae5a81861cddac97ddc4100b66
yuv420p10le 4b5249208602b941332945c926f80ae9 yuv420p10le cb83ed3552113e0292e30adee774359c
yuv420p16be 539076782902664a8acf381bf4f713e8 yuv420p16be b6d25ba55bc1831d352f379311b42b6d
yuv420p16le 0f609e588e5a258644ef85170d70e030 yuv420p16le 1d7ef427b6f79a02b93948738dab5442
yuv420p9be be40ec975fb2873891643cbbbddbc3b0 yuv420p9be 9865bf5c4392b56b1c4eb4f5a3fd32f9
yuv420p9le 7e606310d3f5ff12badf911e8f333471 yuv420p9le 0f1e371a1374d3cba2205b70cc7cac90
yuv422p d7f5cb44d9b0210d66d6a8762640ab34 yuv422p d7f5cb44d9b0210d66d6a8762640ab34
yuv422p10be 588fe319b96513c32e21d3e32b45447f yuv422p10be 588fe319b96513c32e21d3e32b45447f
yuv422p10le 11b57f2bd9661024153f3973b9090cdb yuv422p10le 11b57f2bd9661024153f3973b9090cdb
Expand Down

0 comments on commit abe0b8e

Please sign in to comment.