Blame encoder/vaapiencoder_jpeg_unittest.cpp

Packit 1244b8
/*
Packit 1244b8
 * Copyright 2016 Intel Corporation
Packit 1244b8
 *
Packit 1244b8
 * Licensed under the Apache License, Version 2.0 (the "License");
Packit 1244b8
 * you may not use this file except in compliance with the License.
Packit 1244b8
 * You may obtain a copy of the License at
Packit 1244b8
 *
Packit 1244b8
 *     http://www.apache.org/licenses/LICENSE-2.0
Packit 1244b8
 *
Packit 1244b8
 * Unless required by applicable law or agreed to in writing, software
Packit 1244b8
 * distributed under the License is distributed on an "AS IS" BASIS,
Packit 1244b8
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Packit 1244b8
 * See the License for the specific language governing permissions and
Packit 1244b8
 * limitations under the License.
Packit 1244b8
 */
Packit 1244b8
Packit 1244b8
#ifdef HAVE_CONFIG_H
Packit 1244b8
#include "config.h"
Packit 1244b8
#endif
Packit 1244b8
Packit 1244b8
//
Packit 1244b8
// The unittest header must be included before va_x11.h (which might be included
Packit 1244b8
// indirectly).  The va_x11.h includes Xlib.h and X.h.  And the X headers
Packit 1244b8
// define 'Bool' and 'None' preprocessor types.  Gtest uses the same names
Packit 1244b8
// to define some struct placeholders.  Thus, this creates a compile conflict
Packit 1244b8
// if X defines them before gtest.  Hence, the include order requirement here
Packit 1244b8
// is the only fix for this right now.
Packit 1244b8
//
Packit 1244b8
// See bug filed on gtest at https://github.com/google/googletest/issues/371
Packit 1244b8
// for more details.
Packit 1244b8
//
Packit 1244b8
#include "common/factory_unittest.h"
Packit 1244b8
Packit 1244b8
// primary header
Packit 1244b8
#include "vaapiencoder_jpeg.h"
Packit 1244b8
Packit 1244b8
// library headers
Packit 1244b8
#include "common/Array.h"
Packit 1244b8
#include "common/utils.h"
Packit 1244b8
Packit 1244b8
// system headers
Packit 1244b8
#include <string>
Packit 1244b8
#include <vector>
Packit 1244b8
Packit 1244b8
const static std::array<uint8_t, 150> g_SimpleSmallI420 = {
Packit 1244b8
    0x37, 0x38, 0x39, 0x39, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x38, 0x38,
Packit 1244b8
    0x39, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x39, 0x39, 0x3b, 0x3b,
Packit 1244b8
    0x3c, 0x3e, 0x3e, 0x40, 0x41, 0x42, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
Packit 1244b8
    0x40, 0x41, 0x42, 0x43, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42,
Packit 1244b8
    0x43, 0x44, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x40, 0x42, 0x43, 0x44, 0x45,
Packit 1244b8
    0x3c, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x46, 0x47, 0x3e, 0x3f,
Packit 1244b8
    0x40, 0x41, 0x42, 0x43, 0x44, 0x46, 0x46, 0x47, 0x3f, 0x40, 0x41, 0x42,
Packit 1244b8
    0x43, 0x45, 0x45, 0x46, 0x48, 0x48, 0x40, 0x41, 0x42, 0x43, 0x44, 0x46,
Packit 1244b8
    0x46, 0x47, 0x49, 0x49, 0xe9, 0xda, 0xcb, 0xbd, 0xaf, 0xda, 0xcb, 0xbd,
Packit 1244b8
    0xaf, 0xa1, 0xcb, 0xbd, 0xaf, 0xa0, 0x92, 0xbd, 0xae, 0xa0, 0x92, 0x83,
Packit 1244b8
    0xaf, 0xa0, 0x92, 0x83, 0x74, 0x63, 0x73, 0x83, 0x92, 0xa2, 0x73, 0x83,
Packit 1244b8
    0x92, 0xa2, 0xb1, 0x82, 0x92, 0xa1, 0xb1, 0xc1, 0x92, 0xa1, 0xb0, 0xc0,
Packit 1244b8
    0xcf, 0xa0, 0xb0, 0xc0, 0xcf, 0xde
Packit 1244b8
};
Packit 1244b8
Packit 1244b8
const static std::array<uint8_t, 150> g_SimpleSmallNV12 = {
Packit 1244b8
    0x37, 0x38, 0x39, 0x39, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x38, 0x38,
Packit 1244b8
    0x39, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x39, 0x39, 0x3b, 0x3b,
Packit 1244b8
    0x3c, 0x3e, 0x3e, 0x40, 0x41, 0x42, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
Packit 1244b8
    0x40, 0x41, 0x42, 0x43, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42,
Packit 1244b8
    0x43, 0x44, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x40, 0x42, 0x43, 0x44, 0x45,
Packit 1244b8
    0x3c, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x46, 0x47, 0x3e, 0x3f,
Packit 1244b8
    0x40, 0x41, 0x42, 0x43, 0x44, 0x46, 0x46, 0x47, 0x3f, 0x40, 0x41, 0x42,
Packit 1244b8
    0x43, 0x45, 0x45, 0x46, 0x48, 0x48, 0x40, 0x41, 0x42, 0x43, 0x44, 0x46,
Packit 1244b8
    0x46, 0x47, 0x49, 0x49, 0xe9, 0x63, 0xda, 0x73, 0xcb, 0x83, 0xbd, 0x92,
Packit 1244b8
    0xaf, 0xa2, 0xda, 0x73, 0xcb, 0x83, 0xbd, 0x92, 0xaf, 0xa2, 0xa1, 0xb1,
Packit 1244b8
    0xcb, 0x82, 0xbd, 0x92, 0xaf, 0xa1, 0xa0, 0xb1, 0x92, 0xc1, 0xbd, 0x92,
Packit 1244b8
    0xae, 0xa1, 0xa0, 0xb0, 0x92, 0xc0, 0x83, 0xcf, 0xaf, 0xa0, 0xa0, 0xb0,
Packit 1244b8
    0x92, 0xc0, 0x83, 0xcf, 0x74, 0xde
Packit 1244b8
};
Packit 1244b8
Packit 1244b8
const static std::array<uint8_t, 150> g_SimpleSmallYV12 = {
Packit 1244b8
    0x37, 0x38, 0x39, 0x39, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x38, 0x38,
Packit 1244b8
    0x39, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x39, 0x39, 0x3b, 0x3b,
Packit 1244b8
    0x3c, 0x3e, 0x3e, 0x40, 0x41, 0x42, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
Packit 1244b8
    0x40, 0x41, 0x42, 0x43, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42,
Packit 1244b8
    0x43, 0x44, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x40, 0x42, 0x43, 0x44, 0x45,
Packit 1244b8
    0x3c, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x46, 0x47, 0x3e, 0x3f,
Packit 1244b8
    0x40, 0x41, 0x42, 0x43, 0x44, 0x46, 0x46, 0x47, 0x3f, 0x40, 0x41, 0x42,
Packit 1244b8
    0x43, 0x45, 0x45, 0x46, 0x48, 0x48, 0x40, 0x41, 0x42, 0x43, 0x44, 0x46,
Packit 1244b8
    0x46, 0x47, 0x49, 0x49, 0x5f, 0x6f, 0x7f, 0x8e, 0x9d, 0x6f, 0x7f, 0x8e,
Packit 1244b8
    0x9e, 0xad, 0x7e, 0x8e, 0x9d, 0xad, 0xbd, 0x8e, 0x9e, 0xac, 0xbc, 0xcb,
Packit 1244b8
    0x9c, 0xac, 0xbc, 0xcb, 0xda, 0xec, 0xdd, 0xce, 0xc0, 0xb2, 0xde, 0xcf,
Packit 1244b8
    0xc1, 0xb2, 0xa4, 0xcf, 0xc0, 0xb2, 0xa3, 0x95, 0xc1, 0xb2, 0xa3, 0x95,
Packit 1244b8
    0x86, 0xb2, 0xa3, 0x95, 0x87, 0x77
Packit 1244b8
};
Packit 1244b8
Packit 1244b8
const static std::array<uint8_t, 200> g_SimpleSmallUYVY = {
Packit 1244b8
    0xec, 0x37, 0x5f, 0x38, 0xdd, 0x39, 0x6f, 0x39, 0xce, 0x3b, 0x7f, 0x3c,
Packit 1244b8
    0xc0, 0x3d, 0x8e, 0x3e, 0xb2, 0x3f, 0x9d, 0x40, 0xe5, 0x38, 0x67, 0x38,
Packit 1244b8
    0xd6, 0x39, 0x77, 0x3b, 0xc7, 0x3c, 0x86, 0x3d, 0xb9, 0x3e, 0x96, 0x3f,
Packit 1244b8
    0xab, 0x40, 0xa6, 0x41, 0xde, 0x39, 0x6f, 0x39, 0xcf, 0x3b, 0x7f, 0x3b,
Packit 1244b8
    0xc1, 0x3c, 0x8e, 0x3e, 0xb2, 0x3e, 0x9e, 0x40, 0xa4, 0x41, 0xad, 0x42,
Packit 1244b8
    0xd6, 0x3a, 0x76, 0x3b, 0xc7, 0x3c, 0x86, 0x3d, 0xb9, 0x3e, 0x95, 0x3f,
Packit 1244b8
    0xab, 0x40, 0xa5, 0x41, 0x9d, 0x42, 0xb5, 0x43, 0xcf, 0x3b, 0x7e, 0x3c,
Packit 1244b8
    0xc0, 0x3d, 0x8e, 0x3e, 0xb2, 0x3f, 0x9d, 0x40, 0xa3, 0x41, 0xad, 0x42,
Packit 1244b8
    0x95, 0x43, 0xbd, 0x44, 0xc7, 0x3c, 0x86, 0x3d, 0xb9, 0x3e, 0x95, 0x3f,
Packit 1244b8
    0xab, 0x40, 0xa4, 0x40, 0x9c, 0x42, 0xb5, 0x43, 0x8e, 0x44, 0xc4, 0x45,
Packit 1244b8
    0xc1, 0x3c, 0x8e, 0x3e, 0xb2, 0x3f, 0x9e, 0x40, 0xa3, 0x41, 0xac, 0x42,
Packit 1244b8
    0x95, 0x43, 0xbc, 0x44, 0x86, 0x46, 0xcb, 0x47, 0xb9, 0x3e, 0x95, 0x3f,
Packit 1244b8
    0xaa, 0x40, 0xa4, 0x41, 0x9c, 0x42, 0xb4, 0x43, 0x8e, 0x44, 0xc4, 0x46,
Packit 1244b8
    0x7f, 0x46, 0xd2, 0x47, 0xb2, 0x3f, 0x9c, 0x40, 0xa3, 0x41, 0xac, 0x42,
Packit 1244b8
    0x95, 0x43, 0xbc, 0x45, 0x87, 0x45, 0xcb, 0x46, 0x77, 0x48, 0xda, 0x48,
Packit 1244b8
    0xab, 0x40, 0xa4, 0x41, 0x9c, 0x42, 0xb4, 0x43, 0x8e, 0x44, 0xc4, 0x46,
Packit 1244b8
    0x7f, 0x46, 0xd3, 0x47, 0x70, 0x49, 0xe2, 0x49
Packit 1244b8
};
Packit 1244b8
Packit 1244b8
const static std::array<uint8_t, 200> g_SimpleSmallYUY2 = {
Packit 1244b8
    0x37, 0xec, 0x38, 0x5f, 0x39, 0xdd, 0x39, 0x6f, 0x3b, 0xce, 0x3c, 0x7f,
Packit 1244b8
    0x3d, 0xc0, 0x3e, 0x8e, 0x3f, 0xb2, 0x40, 0x9d, 0x38, 0xe5, 0x38, 0x67,
Packit 1244b8
    0x39, 0xd6, 0x3b, 0x77, 0x3c, 0xc7, 0x3d, 0x86, 0x3e, 0xb9, 0x3f, 0x96,
Packit 1244b8
    0x40, 0xab, 0x41, 0xa6, 0x39, 0xde, 0x39, 0x6f, 0x3b, 0xcf, 0x3b, 0x7f,
Packit 1244b8
    0x3c, 0xc1, 0x3e, 0x8e, 0x3e, 0xb2, 0x40, 0x9e, 0x41, 0xa4, 0x42, 0xad,
Packit 1244b8
    0x3a, 0xd6, 0x3b, 0x76, 0x3c, 0xc7, 0x3d, 0x86, 0x3e, 0xb9, 0x3f, 0x95,
Packit 1244b8
    0x40, 0xab, 0x41, 0xa5, 0x42, 0x9d, 0x43, 0xb5, 0x3b, 0xcf, 0x3c, 0x7e,
Packit 1244b8
    0x3d, 0xc0, 0x3e, 0x8e, 0x3f, 0xb2, 0x40, 0x9d, 0x41, 0xa3, 0x42, 0xad,
Packit 1244b8
    0x43, 0x95, 0x44, 0xbd, 0x3c, 0xc7, 0x3d, 0x86, 0x3e, 0xb9, 0x3f, 0x95,
Packit 1244b8
    0x40, 0xab, 0x40, 0xa4, 0x42, 0x9c, 0x43, 0xb5, 0x44, 0x8e, 0x45, 0xc4,
Packit 1244b8
    0x3c, 0xc1, 0x3e, 0x8e, 0x3f, 0xb2, 0x40, 0x9e, 0x41, 0xa3, 0x42, 0xac,
Packit 1244b8
    0x43, 0x95, 0x44, 0xbc, 0x46, 0x86, 0x47, 0xcb, 0x3e, 0xb9, 0x3f, 0x95,
Packit 1244b8
    0x40, 0xaa, 0x41, 0xa4, 0x42, 0x9c, 0x43, 0xb4, 0x44, 0x8e, 0x46, 0xc4,
Packit 1244b8
    0x46, 0x7f, 0x47, 0xd2, 0x3f, 0xb2, 0x40, 0x9c, 0x41, 0xa3, 0x42, 0xac,
Packit 1244b8
    0x43, 0x95, 0x45, 0xbc, 0x45, 0x87, 0x46, 0xcb, 0x48, 0x77, 0x48, 0xda,
Packit 1244b8
    0x40, 0xab, 0x41, 0xa4, 0x42, 0x9c, 0x43, 0xb4, 0x44, 0x8e, 0x46, 0xc4,
Packit 1244b8
    0x46, 0x7f, 0x47, 0xd3, 0x49, 0x70, 0x49, 0xe2
Packit 1244b8
};
Packit 1244b8
Packit 1244b8
const static std::array<uint8_t, 400> g_SimpleSmallBGRX = {
Packit 1244b8
    0xff, 0x1b, 0x00, 0xff, 0xf2, 0x19, 0x0d, 0xff, 0xe5, 0x17, 0x1a, 0xff,
Packit 1244b8
    0xd5, 0x13, 0x27, 0xff, 0xc9, 0x12, 0x36, 0xff, 0xbc, 0x10, 0x43, 0xff,
Packit 1244b8
    0xaf, 0x0d, 0x51, 0xff, 0xa2, 0x0b, 0x5f, 0xff, 0x95, 0x08, 0x6c, 0xff,
Packit 1244b8
    0x96, 0x09, 0x6e, 0xff, 0xf2, 0x19, 0x0d, 0xff, 0xe4, 0x15, 0x19, 0xff,
Packit 1244b8
    0xd5, 0x13, 0x27, 0xff, 0xc9, 0x13, 0x35, 0xff, 0xbc, 0x10, 0x43, 0xff,
Packit 1244b8
    0xaf, 0x0d, 0x51, 0xff, 0xa2, 0x0b, 0x5f, 0xff, 0x95, 0x09, 0x6b, 0xff,
Packit 1244b8
    0x88, 0x06, 0x79, 0xff, 0x89, 0x08, 0x7a, 0xff, 0xe5, 0x17, 0x1a, 0xff,
Packit 1244b8
    0xd5, 0x13, 0x27, 0xff, 0xc9, 0x12, 0x36, 0xff, 0xbb, 0x0f, 0x42, 0xff,
Packit 1244b8
    0xae, 0x0c, 0x4f, 0xff, 0xa2, 0x0b, 0x5f, 0xff, 0x94, 0x07, 0x6b, 0xff,
Packit 1244b8
    0x88, 0x06, 0x79, 0xff, 0x7b, 0x04, 0x87, 0xff, 0x7c, 0x05, 0x88, 0xff,
Packit 1244b8
    0xd6, 0x15, 0x27, 0xff, 0xc9, 0x13, 0x35, 0xff, 0xbc, 0x10, 0x43, 0xff,
Packit 1244b8
    0xaf, 0x0d, 0x51, 0xff, 0xa2, 0x0c, 0x5d, 0xff, 0x93, 0x09, 0x6b, 0xff,
Packit 1244b8
    0x86, 0x07, 0x79, 0xff, 0x79, 0x04, 0x87, 0xff, 0x6c, 0x02, 0x95, 0xff,
Packit 1244b8
    0x6d, 0x03, 0x96, 0xff, 0xc9, 0x13, 0x35, 0xff, 0xbc, 0x10, 0x43, 0xff,
Packit 1244b8
    0xaf, 0x0d, 0x51, 0xff, 0xa2, 0x0c, 0x5d, 0xff, 0x95, 0x09, 0x6b, 0xff,
Packit 1244b8
    0x86, 0x07, 0x79, 0xff, 0x79, 0x04, 0x87, 0xff, 0x6c, 0x02, 0x95, 0xff,
Packit 1244b8
    0x5f, 0x00, 0xa3, 0xff, 0x60, 0x00, 0xa4, 0xff, 0xbc, 0x10, 0x43, 0xff,
Packit 1244b8
    0xad, 0x0f, 0x4f, 0xff, 0xa0, 0x0c, 0x5d, 0xff, 0x93, 0x09, 0x6b, 0xff,
Packit 1244b8
    0x86, 0x08, 0x77, 0xff, 0x78, 0x04, 0x84, 0xff, 0x6c, 0x02, 0x93, 0xff,
Packit 1244b8
    0x5d, 0x00, 0xa1, 0xff, 0x50, 0x00, 0xaf, 0xff, 0x51, 0x00, 0xb0, 0xff,
Packit 1244b8
    0xae, 0x0c, 0x4f, 0xff, 0xa0, 0x0c, 0x5d, 0xff, 0x93, 0x09, 0x6b, 0xff,
Packit 1244b8
    0x86, 0x08, 0x77, 0xff, 0x79, 0x05, 0x85, 0xff, 0x6c, 0x02, 0x93, 0xff,
Packit 1244b8
    0x5f, 0x00, 0xa1, 0xff, 0x50, 0x00, 0xad, 0xff, 0x44, 0x00, 0xbc, 0xff,
Packit 1244b8
    0x46, 0x00, 0xbe, 0xff, 0xa2, 0x0c, 0x5d, 0xff, 0x93, 0x0a, 0x69, 0xff,
Packit 1244b8
    0x86, 0x08, 0x77, 0xff, 0x79, 0x05, 0x85, 0xff, 0x6c, 0x02, 0x93, 0xff,
Packit 1244b8
    0x5d, 0x01, 0x9f, 0xff, 0x50, 0x00, 0xad, 0xff, 0x44, 0x00, 0xbc, 0xff,
Packit 1244b8
    0x34, 0x00, 0xc8, 0xff, 0x35, 0x00, 0xc9, 0xff, 0x95, 0x0a, 0x69, 0xff,
Packit 1244b8
    0x86, 0x08, 0x77, 0xff, 0x79, 0x05, 0x85, 0xff, 0x6c, 0x02, 0x93, 0xff,
Packit 1244b8
    0x5f, 0x00, 0xa1, 0xff, 0x51, 0x00, 0xaf, 0xff, 0x43, 0x00, 0xbb, 0xff,
Packit 1244b8
    0x34, 0x00, 0xc8, 0xff, 0x28, 0x00, 0xd7, 0xff, 0x28, 0x00, 0xd7, 0xff,
Packit 1244b8
    0x96, 0x0b, 0x6a, 0xff, 0x87, 0x09, 0x78, 0xff, 0x7a, 0x06, 0x86, 0xff,
Packit 1244b8
    0x6d, 0x04, 0x94, 0xff, 0x60, 0x01, 0xa2, 0xff, 0x53, 0x01, 0xb0, 0xff,
Packit 1244b8
    0x44, 0x00, 0xbc, 0xff, 0x35, 0x00, 0xc9, 0xff, 0x2a, 0x00, 0xd8, 0xff,
Packit 1244b8
    0x2a, 0x00, 0xd8, 0xff
Packit 1244b8
};
Packit 1244b8
Packit 1244b8
const static std::array <uint8_t, 400> g_SimpleSmallRGBX = {
Packit 1244b8
    0x00, 0x1b, 0xff, 0xff, 0x0d, 0x19, 0xf2, 0xff, 0x1a, 0x17, 0xe5, 0xff,
Packit 1244b8
    0x27, 0x13, 0xd5, 0xff, 0x36, 0x12, 0xc9, 0xff, 0x43, 0x10, 0xbc, 0xff,
Packit 1244b8
    0x51, 0x0d, 0xaf, 0xff, 0x5f, 0x0b, 0xa2, 0xff, 0x6c, 0x08, 0x95, 0xff,
Packit 1244b8
    0x6e, 0x09, 0x96, 0xff, 0x0d, 0x19, 0xf2, 0xff, 0x19, 0x15, 0xe4, 0xff,
Packit 1244b8
    0x27, 0x13, 0xd5, 0xff, 0x35, 0x13, 0xc9, 0xff, 0x43, 0x10, 0xbc, 0xff,
Packit 1244b8
    0x51, 0x0d, 0xaf, 0xff, 0x5f, 0x0b, 0xa2, 0xff, 0x6b, 0x09, 0x95, 0xff,
Packit 1244b8
    0x79, 0x06, 0x88, 0xff, 0x7a, 0x08, 0x89, 0xff, 0x1a, 0x17, 0xe5, 0xff,
Packit 1244b8
    0x27, 0x13, 0xd5, 0xff, 0x36, 0x12, 0xc9, 0xff, 0x42, 0x0f, 0xbb, 0xff,
Packit 1244b8
    0x4f, 0x0c, 0xae, 0xff, 0x5f, 0x0b, 0xa2, 0xff, 0x6b, 0x07, 0x94, 0xff,
Packit 1244b8
    0x79, 0x06, 0x88, 0xff, 0x87, 0x04, 0x7b, 0xff, 0x88, 0x05, 0x7c, 0xff,
Packit 1244b8
    0x27, 0x15, 0xd6, 0xff, 0x35, 0x13, 0xc9, 0xff, 0x43, 0x10, 0xbc, 0xff,
Packit 1244b8
    0x51, 0x0d, 0xaf, 0xff, 0x5d, 0x0c, 0xa2, 0xff, 0x6b, 0x09, 0x93, 0xff,
Packit 1244b8
    0x79, 0x07, 0x86, 0xff, 0x87, 0x04, 0x79, 0xff, 0x95, 0x02, 0x6c, 0xff,
Packit 1244b8
    0x96, 0x03, 0x6d, 0xff, 0x35, 0x13, 0xc9, 0xff, 0x43, 0x10, 0xbc, 0xff,
Packit 1244b8
    0x51, 0x0d, 0xaf, 0xff, 0x5d, 0x0c, 0xa2, 0xff, 0x6b, 0x09, 0x95, 0xff,
Packit 1244b8
    0x79, 0x07, 0x86, 0xff, 0x87, 0x04, 0x79, 0xff, 0x95, 0x02, 0x6c, 0xff,
Packit 1244b8
    0xa3, 0x00, 0x5f, 0xff, 0xa4, 0x00, 0x60, 0xff, 0x43, 0x10, 0xbc, 0xff,
Packit 1244b8
    0x4f, 0x0f, 0xad, 0xff, 0x5d, 0x0c, 0xa0, 0xff, 0x6b, 0x09, 0x93, 0xff,
Packit 1244b8
    0x77, 0x08, 0x86, 0xff, 0x84, 0x04, 0x78, 0xff, 0x93, 0x02, 0x6c, 0xff,
Packit 1244b8
    0xa1, 0x00, 0x5d, 0xff, 0xaf, 0x00, 0x50, 0xff, 0xb0, 0x00, 0x51, 0xff,
Packit 1244b8
    0x4f, 0x0c, 0xae, 0xff, 0x5d, 0x0c, 0xa0, 0xff, 0x6b, 0x09, 0x93, 0xff,
Packit 1244b8
    0x77, 0x08, 0x86, 0xff, 0x85, 0x05, 0x79, 0xff, 0x93, 0x02, 0x6c, 0xff,
Packit 1244b8
    0xa1, 0x00, 0x5f, 0xff, 0xad, 0x00, 0x50, 0xff, 0xbc, 0x00, 0x44, 0xff,
Packit 1244b8
    0xbe, 0x00, 0x46, 0xff, 0x5d, 0x0c, 0xa2, 0xff, 0x69, 0x0a, 0x93, 0xff,
Packit 1244b8
    0x77, 0x08, 0x86, 0xff, 0x85, 0x05, 0x79, 0xff, 0x93, 0x02, 0x6c, 0xff,
Packit 1244b8
    0x9f, 0x01, 0x5d, 0xff, 0xad, 0x00, 0x50, 0xff, 0xbc, 0x00, 0x44, 0xff,
Packit 1244b8
    0xc8, 0x00, 0x34, 0xff, 0xc9, 0x00, 0x35, 0xff, 0x69, 0x0a, 0x95, 0xff,
Packit 1244b8
    0x77, 0x08, 0x86, 0xff, 0x85, 0x05, 0x79, 0xff, 0x93, 0x02, 0x6c, 0xff,
Packit 1244b8
    0xa1, 0x00, 0x5f, 0xff, 0xaf, 0x00, 0x51, 0xff, 0xbb, 0x00, 0x43, 0xff,
Packit 1244b8
    0xc8, 0x00, 0x34, 0xff, 0xd7, 0x00, 0x28, 0xff, 0xd7, 0x00, 0x28, 0xff,
Packit 1244b8
    0x6a, 0x0b, 0x96, 0xff, 0x78, 0x09, 0x87, 0xff, 0x86, 0x06, 0x7a, 0xff,
Packit 1244b8
    0x94, 0x04, 0x6d, 0xff, 0xa2, 0x01, 0x60, 0xff, 0xb0, 0x01, 0x53, 0xff,
Packit 1244b8
    0xbc, 0x00, 0x44, 0xff, 0xc9, 0x00, 0x35, 0xff, 0xd8, 0x00, 0x2a, 0xff,
Packit 1244b8
    0xd8, 0x00, 0x2a, 0xff
Packit 1244b8
};
Packit 1244b8
Packit 1244b8
namespace YamiMediaCodec {
Packit 1244b8
Packit 1244b8
class VaapiEncoderJpegTest
Packit 1244b8
    : public FactoryTest<IVideoEncoder, VaapiEncoderJpeg>
Packit 1244b8
{
Packit 1244b8
protected:
Packit 1244b8
    /* invoked by gtest before the test */
Packit 1244b8
    virtual void SetUp() {
Packit 1244b8
        return;
Packit 1244b8
    }
Packit 1244b8
Packit 1244b8
    /* invoked by gtest after the test */
Packit 1244b8
    virtual void TearDown() {
Packit 1244b8
        return;
Packit 1244b8
    }
Packit 1244b8
};
Packit 1244b8
Packit 1244b8
#define VAAPIENCODER_JPEG_TEST(name) \
Packit 1244b8
    TEST_F(VaapiEncoderJpegTest, name)
Packit 1244b8
Packit 1244b8
VAAPIENCODER_JPEG_TEST(Factory) {
Packit 1244b8
    FactoryKeys mimeTypes;
Packit 1244b8
    mimeTypes.push_back(YAMI_MIME_JPEG);
Packit 1244b8
    doFactoryTest(mimeTypes);
Packit 1244b8
}
Packit 1244b8
Packit 1244b8
VAAPIENCODER_JPEG_TEST(QualityParamSetGet) {
Packit 1244b8
    VaapiEncoderJpeg encoder;
Packit 1244b8
    VideoParamsQualityLevel quality = {
Packit 1244b8
        .size = sizeof(VideoParamsQualityLevel), .level = 0u};
Packit 1244b8
Packit 1244b8
    // default quality level
Packit 1244b8
    EXPECT_EQ(YAMI_SUCCESS,
Packit 1244b8
        encoder.getParameters(VideoParamsTypeQualityLevel, &quality));
Packit 1244b8
    EXPECT_EQ(quality.level, 50u);
Packit 1244b8
Packit 1244b8
    // out of low range limit clamps to low range
Packit 1244b8
    quality.level = 0u;
Packit 1244b8
    EXPECT_EQ(YAMI_SUCCESS,
Packit 1244b8
        encoder.setParameters(VideoParamsTypeQualityLevel, &quality));
Packit 1244b8
    quality.level = 0u;
Packit 1244b8
    EXPECT_EQ(YAMI_SUCCESS,
Packit 1244b8
        encoder.getParameters(VideoParamsTypeQualityLevel, &quality));
Packit 1244b8
    EXPECT_EQ(quality.level, 1u);
Packit 1244b8
Packit 1244b8
    // in valid range
Packit 1244b8
    for (uint32_t q(1u); q <= 100; ++q) {
Packit 1244b8
        quality.level = q;
Packit 1244b8
        EXPECT_EQ(YAMI_SUCCESS,
Packit 1244b8
            encoder.setParameters(VideoParamsTypeQualityLevel, &quality));
Packit 1244b8
        quality.level = 0u;
Packit 1244b8
        EXPECT_EQ(YAMI_SUCCESS,
Packit 1244b8
            encoder.getParameters(VideoParamsTypeQualityLevel, &quality));
Packit 1244b8
        EXPECT_EQ(quality.level, q);
Packit 1244b8
    }
Packit 1244b8
Packit 1244b8
    // out of high range limit clamps to high range
Packit 1244b8
    for (uint32_t q(101u); q < 256; ++q) {
Packit 1244b8
        quality.level = q;
Packit 1244b8
        EXPECT_EQ(YAMI_SUCCESS,
Packit 1244b8
            encoder.setParameters(VideoParamsTypeQualityLevel, &quality));
Packit 1244b8
        quality.level = 0u;
Packit 1244b8
        EXPECT_EQ(YAMI_SUCCESS,
Packit 1244b8
            encoder.getParameters(VideoParamsTypeQualityLevel, &quality));
Packit 1244b8
        EXPECT_EQ(quality.level, 100u);
Packit 1244b8
    }
Packit 1244b8
}
Packit 1244b8
Packit 1244b8
class SimpleDataTest
Packit 1244b8
    : public VaapiEncoderJpegTest
Packit 1244b8
    , public ::testing::WithParamInterface<const char*>
Packit 1244b8
{
Packit 1244b8
protected:
Packit 1244b8
    uint8_t* getData() const
Packit 1244b8
    {
Packit 1244b8
        const uint8_t* result(NULL);
Packit 1244b8
        switch (getFourcc()) {
Packit 1244b8
        case VA_FOURCC_NV12:
Packit 1244b8
            result = g_SimpleSmallNV12.data();
Packit 1244b8
            break;
Packit 1244b8
        case VA_FOURCC_I420:
Packit 1244b8
            result = g_SimpleSmallI420.data();
Packit 1244b8
            break;
Packit 1244b8
        case VA_FOURCC_YV12:
Packit 1244b8
            result = g_SimpleSmallYV12.data();
Packit 1244b8
            break;
Packit 1244b8
        case VA_FOURCC_YUY2:
Packit 1244b8
            result = g_SimpleSmallYUY2.data();
Packit 1244b8
            break;
Packit 1244b8
        case VA_FOURCC_UYVY:
Packit 1244b8
            result = g_SimpleSmallUYVY.data();
Packit 1244b8
            break;
Packit 1244b8
        case VA_FOURCC_RGBX:
Packit 1244b8
            result = g_SimpleSmallRGBX.data();
Packit 1244b8
            break;
Packit 1244b8
        case VA_FOURCC_BGRX:
Packit 1244b8
            result = g_SimpleSmallBGRX.data();
Packit 1244b8
            break;
Packit 1244b8
        default:
Packit 1244b8
            ADD_FAILURE() << "Test data is undefined for " << GetParam();
Packit 1244b8
        }
Packit 1244b8
        return const_cast<uint8_t*>(result);
Packit 1244b8
    }
Packit 1244b8
Packit 1244b8
    uint32_t getFourcc() const
Packit 1244b8
    {
Packit 1244b8
        const std::string param(GetParam());
Packit 1244b8
        return VA_FOURCC(param[0], param[1], param[2], param[3]);
Packit 1244b8
    }
Packit 1244b8
};
Packit 1244b8
Packit 1244b8
#define VAAPIENCODER_JPEG_TEST_SIMPLE_DATA(name) \
Packit 1244b8
    TEST_P(SimpleDataTest, name)
Packit 1244b8
Packit 1244b8
VAAPIENCODER_JPEG_TEST_SIMPLE_DATA(Encode)
Packit 1244b8
{
Packit 1244b8
    uint8_t* data = getData();
Packit 1244b8
    uint32_t fourcc = getFourcc();
Packit 1244b8
Packit 1244b8
    ASSERT_FALSE(HasFailure());
Packit 1244b8
Packit 1244b8
    VaapiEncoderJpeg encoder;
Packit 1244b8
    VideoParamsQualityLevel quality = {.size = sizeof(VideoParamsQualityLevel)};
Packit 1244b8
    VideoParamsCommon parameters = {.size = sizeof(VideoParamsCommon)};
Packit 1244b8
Packit 1244b8
    EXPECT_EQ(YAMI_SUCCESS,
Packit 1244b8
        encoder.getParameters(VideoParamsTypeCommon, &parameters));
Packit 1244b8
    parameters.resolution.width = 10;
Packit 1244b8
    parameters.resolution.height = 10;
Packit 1244b8
    EXPECT_EQ(YAMI_SUCCESS,
Packit 1244b8
        encoder.setParameters(VideoParamsTypeCommon, &parameters));
Packit 1244b8
Packit 1244b8
    // verify default jpeg quality level
Packit 1244b8
    EXPECT_EQ(YAMI_SUCCESS,
Packit 1244b8
        encoder.getParameters(VideoParamsTypeQualityLevel, &quality));
Packit 1244b8
    EXPECT_EQ(quality.level, 50u);
Packit 1244b8
Packit 1244b8
    ASSERT_EQ(YAMI_SUCCESS, encoder.start());
Packit 1244b8
Packit 1244b8
    VideoFrameRawData frame = { };
Packit 1244b8
Packit 1244b8
    ASSERT_TRUE(fillFrameRawData(&frame, fourcc, 10, 10, data));
Packit 1244b8
Packit 1244b8
    ASSERT_EQ(YAMI_SUCCESS, encoder.encode(&frame));
Packit 1244b8
Packit 1244b8
    uint32_t size;
Packit 1244b8
    encoder.getMaxOutSize(&size);
Packit 1244b8
    std::vector<uint8_t> buffer(size, 0);
Packit 1244b8
    VideoEncOutputBuffer output;
Packit 1244b8
    output.data = const_cast<uint8_t*>(buffer.data());
Packit 1244b8
    output.bufferSize = buffer.size();
Packit 1244b8
    output.format = OUTPUT_EVERYTHING;
Packit 1244b8
Packit 1244b8
    EXPECT_EQ(YAMI_SUCCESS, encoder.getOutput(&output, false));
Packit 1244b8
Packit 1244b8
    // Verify jpeg quality level did not get changed during encode
Packit 1244b8
    quality.level = 0u;
Packit 1244b8
    EXPECT_EQ(YAMI_SUCCESS,
Packit 1244b8
        encoder.getParameters(VideoParamsTypeQualityLevel, &quality));
Packit 1244b8
    EXPECT_EQ(quality.level, 50u);
Packit 1244b8
}
Packit 1244b8
Packit 1244b8
INSTANTIATE_TEST_CASE_P(
Packit 1244b8
    VaapiEncoderJpegTest, SimpleDataTest,
Packit 1244b8
    ::testing::Values("NV12", "I420", "YUY2")
Packit 1244b8
Packit 1244b8
    // The following fourcc's cause the test program to abort
Packit 1244b8
    // (see https://github.com/01org/libyami/issues/439):
Packit 1244b8
    //
Packit 1244b8
    // "YV12", "UYVY", "RGBX", "BGRX", "BGRA", "RGBA"
Packit 1244b8
);
Packit 1244b8
Packit 1244b8
}