[FFmpeg-cvslog] sws: use shift for chroma sample up convertion

Michael Niedermayer git at videolan.org
Thu Aug 25 14:50:09 CEST 2011


ffmpeg | branch: master | Michael Niedermayer <michaelni at gmx.at> | Thu Aug 25 13:54:43 2011 +0200| [abe0b8e9f378a0f8781c1a3da6714d20cfd19594] | committer: Michael Niedermayer

sws: use shift for chroma sample up convertion
sws: use shifts for non full range luma sample upconvertion

Signed-off-by: Michael Niedermayer <michaelni at gmx.at>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=abe0b8e9f378a0f8781c1a3da6714d20cfd19594
---

 libswscale/swscale_unscaled.c |   33 +++++++++++++++++++++++----------
 tests/ref/fate/v210           |    2 +-
 tests/ref/lavfi/pixdesc       |   16 ++++++++--------
 tests/ref/lavfi/pixfmts_copy  |   16 ++++++++--------
 tests/ref/lavfi/pixfmts_crop  |    8 ++++----
 tests/ref/lavfi/pixfmts_hflip |    8 ++++----
 tests/ref/lavfi/pixfmts_null  |   16 ++++++++--------
 tests/ref/lavfi/pixfmts_scale |   16 ++++++++--------
 tests/ref/lavfi/pixfmts_vflip |   16 ++++++++--------
 9 files changed, 72 insertions(+), 59 deletions(-)

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



More information about the ffmpeg-cvslog mailing list