Use hsample and vsample factor in printComponentDataTo to avoid invalid indexes into the data array.
This fixes a segfault in the jpeg fourcc tests that may be triggered during 'make check'. Signed-off-by: U. Artie Eoff <[email protected]> --- test/i965_jpeg_decode_test.cpp | 65 +++++++++++++++++++++--------------------- 1 file changed, 32 insertions(+), 33 deletions(-) diff --git a/test/i965_jpeg_decode_test.cpp b/test/i965_jpeg_decode_test.cpp index 6a17d1e98d18..3a1c68f1fa4d 100644 --- a/test/i965_jpeg_decode_test.cpp +++ b/test/i965_jpeg_decode_test.cpp @@ -133,43 +133,42 @@ protected: } } - TestPattern::SharedConst testPattern; - PictureData::SharedConst pd; -}; - -void printComponentDataTo(std::ostream& os, const uint8_t * const data, - unsigned w, unsigned h, unsigned pitch) -{ - os << " "; - for (unsigned i(0); i < w; ++i) - os << std::setw(4) << i << " "; - os << std::endl; - - const uint8_t *row = data; - for (unsigned i(0); i < h; ++i) { - os << std::dec << std::setfill(' ') << std::setw(3) << (i * w) << " "; - for (size_t j(0); j < w; ++j) { - os << "0x" << std::hex << std::setfill('0') << std::setw(2) - << (uint32_t)row[j] << ","; + void printComponentDataTo(std::ostream& os, const uint8_t * const data, + unsigned w, unsigned h, unsigned pitch, unsigned hsample = 1, + unsigned vsample = 1) + { + const uint8_t *row = data; + for (unsigned i(0); i < (h/vsample); ++i) { + for (size_t j(0); j < (w/hsample); ++j) { + os << "0x" << std::hex << std::setfill('0') << std::setw(2) + << (uint32_t)row[j] << ","; + } + os << std::endl; + row += pitch; } - os << std::endl; - row += pitch; + os << std::setw(0) << std::setfill(' ') << std::dec << std::endl; } - os << std::setw(0) << std::setfill(' ') << std::dec << std::endl; -} -void printImageOutputTo(std::ostream& os, const VAImage& image, - const uint8_t * const output) -{ - printComponentDataTo(os, output + image.offsets[0], image.width, - image.height, image.pitches[0]); // Y - - printComponentDataTo(os, output + image.offsets[1], image.width, - image.height, image.pitches[1]); // U + void printImageOutputTo(std::ostream& os, const VAImage& image, + const uint8_t * const output) + { + printComponentDataTo(os, output + image.offsets[0], image.width, + image.height, image.pitches[0]); // Y + + printComponentDataTo(os, output + image.offsets[1], image.width, + image.height, image.pitches[1], + pd->pparam.components[0].h_sampling_factor, + pd->pparam.components[0].v_sampling_factor); // U + + printComponentDataTo(os, output + image.offsets[2], image.width, + image.height, image.pitches[2], + pd->pparam.components[0].h_sampling_factor, + pd->pparam.components[0].v_sampling_factor); // V + } - printComponentDataTo(os, output + image.offsets[2], image.width, - image.height, image.pitches[2]); // V -} + TestPattern::SharedConst testPattern; + PictureData::SharedConst pd; +}; #define ASSERT_NO_FAILURE(statement) \ statement; \ -- 2.1.0 _______________________________________________ Libva mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/libva
