[Libva] [PATCH intel-driver 09/11] test: jpeg/enc: return empty TestInput::Shared if fourcc not handled

U. Artie Eoff ullysses.a.eoff at intel.com
Wed Sep 28 20:36:09 UTC 2016


Move JPEG::Encode::TestInput member initialization to its static
"create" routine so that an empty/invalid Shared can be returned
if the input fourcc is not handled/implemented.  This will allow
a caller/test to react appropriately.

Signed-off-by: U. Artie Eoff <ullysses.a.eoff at intel.com>
---
 test/i965_jpeg_test_data.cpp | 87 ++++++++++++++++++++++++--------------------
 test/i965_jpeg_test_data.h   |  2 +-
 2 files changed, 48 insertions(+), 41 deletions(-)

diff --git a/test/i965_jpeg_test_data.cpp b/test/i965_jpeg_test_data.cpp
index c1ff6276323a..da7d440b7855 100644
--- a/test/i965_jpeg_test_data.cpp
+++ b/test/i965_jpeg_test_data.cpp
@@ -777,18 +777,53 @@ namespace Encode {
     TestInput::Shared TestInput::create(
         const unsigned fourcc, const unsigned w, const unsigned h)
     {
-        return Shared(new TestInput(fourcc, w, h));
+        Shared t(new TestInput);
+
+        switch(fourcc) {
+        case VA_FOURCC_I420:
+            t->planes = 3;
+            t->widths = {w + (w & 1), (w + 1) >> 1, (w + 1) >> 1};
+            t->heights = {h + (h & 1), (h + 1) >> 1, (h + 1) >> 1};
+            t->format = VA_RT_FORMAT_YUV420;
+            t->fourcc_output = VA_FOURCC_IMC3;
+            break;
+        case VA_FOURCC_NV12:
+            t->planes = 2;
+            t->widths = {w + (w & 1), w + (w & 1), 0};
+            t->heights = {h + (h & 1), (h + 1) >> 1, 0};
+            t->format = VA_RT_FORMAT_YUV420;
+            t->fourcc_output = VA_FOURCC_IMC3;
+            break;
+        default:
+            return Shared(); // fourcc is unsupported
+        }
+
+        t->fourcc = fourcc;
+        t->picture.picture_width = ALIGN(w, 2);
+        t->picture.picture_height = ALIGN(h, 2);
+
+        for (size_t i(0); i < t->planes; ++i)
+            t->sizes[i] = t->widths[i] * t->heights[i];
+
+        for (size_t i(1); i < t->planes; ++i)
+            t->offsets[i] = t->sizes[i - 1] + t->offsets[i - 1];
+
+        // Allocate bytes. Values are arbitrary. Caller is responsible for
+        // assigning byte values as appropriate.
+        t->bytes.resize(
+            std::accumulate(std::begin(t->sizes), std::end(t->sizes), 0u));
+
+        return t;
     }
 
-    TestInput::TestInput(
-        const unsigned fourcc, const unsigned w, const unsigned h)
-        : bytes() // caller must fill this in after instantiation
+    TestInput::TestInput()
+        : bytes()
         , picture(defaultPictureParameter)
         , matrix(defaultIQMatrix)
         , huffman(defaultHuffmanTable)
         , slice(defaultSliceParameter)
-        , fourcc(fourcc)
-        , fourcc_output(fourcc)
+        , fourcc(0)
+        , fourcc_output(0)
         , format(0)
         , planes(0)
         , widths{0,0,0}
@@ -796,37 +831,7 @@ namespace Encode {
         , offsets{0,0,0}
         , sizes{0,0,0}
     {
-        picture.picture_width = ALIGN(w, 2);
-        picture.picture_height = ALIGN(h, 2);
-
-        switch(fourcc) {
-        case VA_FOURCC_I420:
-            planes = 3;
-            widths = {w + (w & 1), (w + 1) >> 1, (w + 1) >> 1};
-            heights = {h + (h & 1), (h + 1) >> 1, (h + 1) >> 1};
-            format = VA_RT_FORMAT_YUV420;
-            fourcc_output = VA_FOURCC_IMC3;
-            break;
-        case VA_FOURCC_NV12:
-            planes = 2;
-            widths = {w + (w & 1), w + (w & 1), 0};
-            heights = {h + (h & 1), (h + 1) >> 1, 0};
-            format = VA_RT_FORMAT_YUV420;
-            fourcc_output = VA_FOURCC_IMC3;
-            break;
-        default:
-            return;
-        }
-
-        for (size_t i(0); i < planes; ++i)
-            sizes[i] = widths[i] * heights[i];
-
-        for (size_t i(1); i < planes; ++i)
-            offsets[i] = sizes[i - 1] + offsets[i - 1];
-
-        // Allocate bytes. Values are arbitrary.
-        bytes.resize(
-            std::accumulate(std::begin(sizes), std::end(sizes), 0u));
+        return;
     }
 
     const unsigned TestInput::width() const
@@ -895,9 +900,11 @@ namespace Encode {
         const std::array<unsigned, 2> res = getResolution();
 
         TestInput::Shared input(TestInput::create(fourcc, res[0], res[1]));
-        std::generate_n(
-            std::begin(input->bytes), input->bytes.size(),
-            RandomValueGenerator<uint8_t>(0x00, 0xff));
+        if (input.get()) {
+            std::generate_n(
+                std::begin(input->bytes), input->bytes.size(),
+                RandomValueGenerator<uint8_t>(0x00, 0xff));
+        }
         return input;
     }
 
diff --git a/test/i965_jpeg_test_data.h b/test/i965_jpeg_test_data.h
index 520c7f5c0daa..f29e579fead7 100644
--- a/test/i965_jpeg_test_data.h
+++ b/test/i965_jpeg_test_data.h
@@ -424,7 +424,7 @@ namespace Encode {
         std::array<size_t, 3> sizes;
 
     private:
-        TestInput(const unsigned, const unsigned, const unsigned);
+        TestInput();
     };
 
     class TestInputCreator
-- 
2.4.11



More information about the Libva mailing list