mirror of https://github.com/intel/libva-utils.git
test/createbuffer: fix bugs in createbuffer tests
vaCreateBuffer needs the sizeof the actual buffer data structure associated with the buffer type, which could be profile specific. Previous test logic was passing the sizeof the buffer "type" enum, which is wrong. Fix the tests so that the correct buffer size is calculated based on profile specific buffer types. Several buffer types were removed from the previous test parameters since their size may be application specific, arbitrary, and/or require additional setup beyond the capabilities of the current buffer test cases. These rules will need to be fleshed-out and tests for them added later on. Fixes #89 Signed-off-by: U. Artie Eoff <ullysses.a.eoff@intel.com>
This commit is contained in:
parent
c372f8bcfe
commit
3dd134f678
|
@ -30,37 +30,26 @@ namespace VAAPI {
|
|||
// VAEntrypoint. vaCreateBuffer doesn't require these itself but its input
|
||||
// parameter do care about them.
|
||||
|
||||
typedef std::pair<VAProfile, VAEntrypoint> ConfigPair;
|
||||
|
||||
struct TestInput
|
||||
{
|
||||
ConfigPair config;
|
||||
VABufferType bufferType;
|
||||
};
|
||||
|
||||
std::ostream& operator<<(std::ostream& os, const TestInput& t)
|
||||
{
|
||||
return os << t.config.first
|
||||
<< "," << t.config.second
|
||||
<< "," << t.bufferType
|
||||
;
|
||||
}
|
||||
typedef ::testing::WithParamInterface<std::tuple<VAProfile, VAEntrypoint,
|
||||
VABufferType, size_t>> CreateBufferParamInterface;
|
||||
|
||||
class VAAPICreateBuffer
|
||||
: public VAAPIFixture
|
||||
, public ::testing::WithParamInterface<TestInput>
|
||||
, public CreateBufferParamInterface
|
||||
{
|
||||
public:
|
||||
VAAPICreateBuffer()
|
||||
: profile(GetParam().config.first)
|
||||
, entrypoint(GetParam().config.second)
|
||||
, bufferType(GetParam().bufferType)
|
||||
: profile(::testing::get<0>(GetParam()))
|
||||
, entrypoint(::testing::get<1>(GetParam()))
|
||||
, bufferType(::testing::get<2>(GetParam()))
|
||||
, bufferSize(::testing::get<3>(GetParam()))
|
||||
{ }
|
||||
|
||||
protected:
|
||||
const VAProfile& profile;
|
||||
const VAEntrypoint& entrypoint;
|
||||
const VABufferType& bufferType;
|
||||
const size_t bufferSize;
|
||||
|
||||
virtual void SetUp()
|
||||
{
|
||||
|
@ -75,84 +64,108 @@ protected:
|
|||
}
|
||||
};
|
||||
|
||||
static const std::vector<ConfigPair> decoders = {
|
||||
std::make_pair(VAProfileMPEG2Simple, VAEntrypointVLD),
|
||||
std::make_pair(VAProfileMPEG2Main, VAEntrypointVLD),
|
||||
std::make_pair(VAProfileH264Main, VAEntrypointVLD),
|
||||
std::make_pair(VAProfileH264ConstrainedBaseline, VAEntrypointVLD),
|
||||
std::make_pair(VAProfileH264High, VAEntrypointVLD),
|
||||
std::make_pair(VAProfileH264MultiviewHigh, VAEntrypointVLD),
|
||||
std::make_pair(VAProfileH264StereoHigh, VAEntrypointVLD),
|
||||
std::make_pair(VAProfileVC1Simple, VAEntrypointVLD),
|
||||
std::make_pair(VAProfileVC1Main, VAEntrypointVLD),
|
||||
std::make_pair(VAProfileVC1Advanced, VAEntrypointVLD),
|
||||
std::make_pair(VAProfileJPEGBaseline, VAEntrypointVLD),
|
||||
std::make_pair(VAProfileVP8Version0_3, VAEntrypointVLD),
|
||||
std::make_pair(VAProfileHEVCMain, VAEntrypointVLD),
|
||||
std::make_pair(VAProfileHEVCMain10, VAEntrypointVLD),
|
||||
std::make_pair(VAProfileVP9Profile0, VAEntrypointVLD),
|
||||
std::make_pair(VAProfileVP9Profile2, VAEntrypointVLD),
|
||||
typedef std::tuple<Profiles, size_t> BufferSpec;
|
||||
typedef std::vector<BufferSpec> BufferSpecs;
|
||||
typedef std::map<VABufferType, BufferSpecs> BufferSpecsMap;
|
||||
|
||||
using std::make_tuple;
|
||||
|
||||
static const BufferSpecsMap decodeBufferSpecs = {
|
||||
{VAPictureParameterBufferType, {
|
||||
make_tuple(g_vaMPEG2Profiles, sizeof(VAPictureParameterBufferMPEG2)),
|
||||
make_tuple(g_vaMPEG4Profiles, sizeof(VAPictureParameterBufferMPEG4)),
|
||||
make_tuple(g_vaH264Profiles, sizeof(VAPictureParameterBufferH264)),
|
||||
make_tuple(g_vaVC1Profiles, sizeof(VAPictureParameterBufferVC1)),
|
||||
make_tuple(g_vaJPEGProfiles,
|
||||
sizeof(VAPictureParameterBufferJPEGBaseline)),
|
||||
make_tuple(g_vaVP8Profiles, sizeof(VAPictureParameterBufferVP8)),
|
||||
make_tuple(g_vaHEVCProfiles, sizeof(VAPictureParameterBufferHEVC)),
|
||||
make_tuple(g_vaVP9Profiles, sizeof(VADecPictureParameterBufferVP9)),
|
||||
}},
|
||||
{VAIQMatrixBufferType, {
|
||||
make_tuple(g_vaMPEG2Profiles, sizeof(VAIQMatrixBufferMPEG2)),
|
||||
make_tuple(g_vaMPEG4Profiles, sizeof(VAIQMatrixBufferMPEG4)),
|
||||
make_tuple(g_vaH264Profiles, sizeof(VAIQMatrixBufferH264)),
|
||||
make_tuple(g_vaJPEGProfiles, sizeof(VAIQMatrixBufferJPEGBaseline)),
|
||||
make_tuple(g_vaVP8Profiles, sizeof(VAIQMatrixBufferVP8)),
|
||||
make_tuple(g_vaHEVCProfiles, sizeof(VAIQMatrixBufferHEVC)),
|
||||
}},
|
||||
{VASliceParameterBufferType, {
|
||||
make_tuple(g_vaMPEG2Profiles, sizeof(VASliceParameterBufferMPEG2)),
|
||||
make_tuple(g_vaMPEG4Profiles, sizeof(VASliceParameterBufferMPEG4)),
|
||||
make_tuple(g_vaH264Profiles, sizeof(VASliceParameterBufferH264)),
|
||||
make_tuple(g_vaVC1Profiles, sizeof(VASliceParameterBufferVC1)),
|
||||
make_tuple(g_vaJPEGProfiles,
|
||||
sizeof(VASliceParameterBufferJPEGBaseline)),
|
||||
make_tuple(g_vaVP8Profiles, sizeof(VASliceParameterBufferVP8)),
|
||||
make_tuple(g_vaHEVCProfiles, sizeof(VASliceParameterBufferHEVC)),
|
||||
make_tuple(g_vaVP9Profiles, sizeof(VASliceParameterBufferVP9)),
|
||||
}},
|
||||
{VAMacroblockParameterBufferType, {
|
||||
make_tuple(g_vaMPEG2Profiles, sizeof(VAMacroblockParameterBufferMPEG2)),
|
||||
}},
|
||||
{VAQMatrixBufferType, {
|
||||
make_tuple(g_vaJPEGProfiles, sizeof(VAQMatrixBufferJPEG)),
|
||||
make_tuple(g_vaVP8Profiles, sizeof(VAQMatrixBufferVP8)),
|
||||
make_tuple(g_vaHEVCProfiles, sizeof(VAQMatrixBufferHEVC)),
|
||||
}},
|
||||
{VAHuffmanTableBufferType, {
|
||||
make_tuple(g_vaJPEGProfiles, sizeof(VAHuffmanTableBufferJPEGBaseline)),
|
||||
}},
|
||||
{VAProbabilityBufferType, {
|
||||
make_tuple(g_vaVP8Profiles, sizeof(VAProbabilityDataBufferVP8)),
|
||||
}},
|
||||
};
|
||||
|
||||
// VAProtectedSliceDataBufferType left out on purpose
|
||||
static const BufferTypes decoderBufferTypes = {
|
||||
VAPictureParameterBufferType,
|
||||
VAIQMatrixBufferType,
|
||||
VABitPlaneBufferType,
|
||||
VASliceGroupMapBufferType,
|
||||
VASliceParameterBufferType,
|
||||
VASliceDataBufferType,
|
||||
VAMacroblockParameterBufferType,
|
||||
VAResidualDataBufferType,
|
||||
VADeblockingParameterBufferType,
|
||||
VAImageBufferType,
|
||||
VAQMatrixBufferType,
|
||||
VAHuffmanTableBufferType,
|
||||
VAProbabilityBufferType,
|
||||
static const BufferSpecsMap encodeBufferSpecs = {
|
||||
{VAEncSequenceParameterBufferType, {
|
||||
make_tuple(g_vaMPEG2Profiles,
|
||||
sizeof(VAEncSequenceParameterBufferMPEG2)),
|
||||
make_tuple(g_vaMPEG4Profiles,
|
||||
sizeof(VAEncSequenceParameterBufferMPEG4)),
|
||||
make_tuple(g_vaH263Profiles, sizeof(VAEncSequenceParameterBufferH263)),
|
||||
make_tuple(g_vaH264Profiles, sizeof(VAEncSequenceParameterBufferH264)),
|
||||
make_tuple(g_vaVP8Profiles, sizeof(VAEncSequenceParameterBufferVP8)),
|
||||
make_tuple(g_vaHEVCProfiles, sizeof(VAEncSequenceParameterBufferHEVC)),
|
||||
make_tuple(g_vaVP9Profiles, sizeof(VAEncSequenceParameterBufferVP9)),
|
||||
}},
|
||||
{VAEncPictureParameterBufferType, {
|
||||
make_tuple(g_vaMPEG2Profiles, sizeof(VAEncPictureParameterBufferMPEG2)),
|
||||
make_tuple(g_vaMPEG4Profiles, sizeof(VAEncPictureParameterBufferMPEG4)),
|
||||
make_tuple(g_vaH263Profiles, sizeof(VAEncPictureParameterBufferH263)),
|
||||
make_tuple(g_vaH264Profiles, sizeof(VAEncPictureParameterBufferH264)),
|
||||
make_tuple(g_vaJPEGProfiles, sizeof(VAEncPictureParameterBufferJPEG)),
|
||||
make_tuple(g_vaVP8Profiles, sizeof(VAEncPictureParameterBufferVP8)),
|
||||
make_tuple(g_vaHEVCProfiles, sizeof(VAEncPictureParameterBufferHEVC)),
|
||||
make_tuple(g_vaVP9Profiles, sizeof(VAEncPictureParameterBufferVP9)),
|
||||
}},
|
||||
{VAEncSliceParameterBufferType, {
|
||||
make_tuple(g_vaMPEG2Profiles, sizeof(VAEncSliceParameterBufferMPEG2)),
|
||||
make_tuple(g_vaH264Profiles, sizeof(VAEncSliceParameterBufferH264)),
|
||||
make_tuple(g_vaJPEGProfiles, sizeof(VAEncSliceParameterBufferJPEG)),
|
||||
make_tuple(g_vaHEVCProfiles, sizeof(VAEncSliceParameterBufferHEVC)),
|
||||
}},
|
||||
{VAEncPackedHeaderParameterBufferType, {
|
||||
make_tuple(g_vaProfiles, sizeof(VAEncPackedHeaderParameterBuffer)),
|
||||
}},
|
||||
{VAEncMiscParameterBufferType, {
|
||||
make_tuple(g_vaProfiles, sizeof(VAEncMiscParameterBuffer)),
|
||||
}},
|
||||
};
|
||||
|
||||
static const std::vector<ConfigPair> encoders = {
|
||||
std::make_pair(VAProfileMPEG2Simple, VAEntrypointEncSlice),
|
||||
std::make_pair(VAProfileMPEG2Main, VAEntrypointEncSlice),
|
||||
std::make_pair(VAProfileH264Main, VAEntrypointEncSlice),
|
||||
std::make_pair(VAProfileH264ConstrainedBaseline, VAEntrypointEncSlice),
|
||||
std::make_pair(VAProfileH264High, VAEntrypointEncSlice),
|
||||
std::make_pair(VAProfileH264MultiviewHigh, VAEntrypointEncSlice),
|
||||
std::make_pair(VAProfileH264StereoHigh, VAEntrypointEncSlice),
|
||||
std::make_pair(VAProfileH264Main, VAEntrypointFEI),
|
||||
std::make_pair(VAProfileH264ConstrainedBaseline, VAEntrypointFEI),
|
||||
std::make_pair(VAProfileH264High, VAEntrypointFEI),
|
||||
std::make_pair(VAProfileJPEGBaseline, VAEntrypointEncSlice),
|
||||
std::make_pair(VAProfileVP8Version0_3, VAEntrypointEncSlice),
|
||||
std::make_pair(VAProfileHEVCMain, VAEntrypointEncSlice),
|
||||
std::make_pair(VAProfileHEVCMain10, VAEntrypointEncSlice),
|
||||
std::make_pair(VAProfileVP9Profile0, VAEntrypointEncSlice),
|
||||
};
|
||||
|
||||
// VAEncMacroblockParameterBufferType left out on purpose
|
||||
static const BufferTypes encoderBufferTypes = {
|
||||
VAEncCodedBufferType,
|
||||
VAEncSequenceParameterBufferType,
|
||||
VAEncPictureParameterBufferType,
|
||||
VAEncSliceParameterBufferType,
|
||||
VAEncPackedHeaderParameterBufferType,
|
||||
VAEncPackedHeaderDataBufferType,
|
||||
VAEncMiscParameterBufferType,
|
||||
VAEncMacroblockMapBufferType,
|
||||
VAEncFEIMVBufferType,
|
||||
VAEncFEIMBCodeBufferType,
|
||||
VAEncFEIDistortionBufferType,
|
||||
VAEncFEIMBControlBufferType,
|
||||
VAEncFEIMVPredictorBufferType,
|
||||
};
|
||||
|
||||
static const std::vector<ConfigPair> vpps = {
|
||||
std::make_pair(VAProfileNone, VAEntrypointVideoProc),
|
||||
};
|
||||
|
||||
static const BufferTypes postProcessorBufferTypes = {
|
||||
VAProcPipelineParameterBufferType,
|
||||
VAProcFilterParameterBufferType,
|
||||
static const BufferSpecsMap vppBufferSpecs = {
|
||||
{VAProcPipelineParameterBufferType, {
|
||||
make_tuple(g_vaNoneProfiles, sizeof(VAProcPipelineParameterBuffer)),
|
||||
}},
|
||||
{VAProcFilterParameterBufferType, {
|
||||
make_tuple(g_vaNoneProfiles, sizeof(VAProcFilterParameterBuffer)),
|
||||
make_tuple(g_vaNoneProfiles,
|
||||
sizeof(VAProcFilterParameterBufferDeinterlacing)),
|
||||
make_tuple(g_vaNoneProfiles,
|
||||
sizeof(VAProcFilterParameterBufferColorBalance)),
|
||||
make_tuple(g_vaNoneProfiles,
|
||||
sizeof(VAProcFilterParameterBufferTotalColorCorrection)),
|
||||
}},
|
||||
};
|
||||
|
||||
TEST_P(VAAPICreateBuffer, CreateBufferWithOutData)
|
||||
|
@ -168,45 +181,49 @@ TEST_P(VAAPICreateBuffer, CreateBufferWithOutData)
|
|||
return;
|
||||
}
|
||||
|
||||
Resolution minRes, maxRes;
|
||||
|
||||
// profile and entrypoint are supported
|
||||
createConfig(profile, entrypoint);
|
||||
|
||||
// vaCreateContext input requires resolution, since this test
|
||||
// doesn't create surfaces, passing min resolution should provide
|
||||
// the desired result.
|
||||
getMinMaxSurfaceResolution(minRes,maxRes);
|
||||
Resolution minRes, maxRes;
|
||||
getMinMaxSurfaceResolution(minRes, maxRes);
|
||||
doCreateContext(minRes);
|
||||
|
||||
doCreateBuffer(bufferType);
|
||||
doDestroyBuffer();
|
||||
createBuffer(bufferType, bufferSize);
|
||||
destroyBuffer();
|
||||
|
||||
doDestroyContext();
|
||||
destroyConfig();
|
||||
}
|
||||
|
||||
std::vector<TestInput> generateInput()
|
||||
std::vector<CreateBufferParamInterface::ParamType> generateInput()
|
||||
{
|
||||
std::vector<TestInput> inputs;
|
||||
std::vector<CreateBufferParamInterface::ParamType> inputs;
|
||||
|
||||
for (auto config : decoders) {
|
||||
for (auto bufferType : decoderBufferTypes) {
|
||||
inputs.push_back(TestInput{config, bufferType});
|
||||
const auto addBufferSpecs = [&](
|
||||
const BufferSpecsMap& bsm, const Entrypoints& entrypoints)
|
||||
{
|
||||
for (const auto& specs : bsm) {
|
||||
const auto& bufferType = std::get<0>(specs);
|
||||
for (const auto& spec: std::get<1>(specs)) {
|
||||
const auto& bufferSize = std::get<1>(spec);
|
||||
for (const auto& profile : std::get<0>(spec)) {
|
||||
for (const auto& entrypoint : entrypoints) {
|
||||
inputs.push_back(
|
||||
make_tuple(
|
||||
profile, entrypoint, bufferType, bufferSize));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
for (auto config : encoders) {
|
||||
for (auto bufferType : encoderBufferTypes) {
|
||||
inputs.push_back(TestInput{config, bufferType});
|
||||
}
|
||||
}
|
||||
|
||||
for (auto config : vpps) {
|
||||
for (auto bufferType : postProcessorBufferTypes) {
|
||||
inputs.push_back(TestInput{config, bufferType});
|
||||
}
|
||||
}
|
||||
addBufferSpecs(decodeBufferSpecs, {VAEntrypointVLD,});
|
||||
addBufferSpecs(encodeBufferSpecs, {VAEntrypointEncSlice,
|
||||
VAEntrypointEncSliceLP, VAEntrypointEncPicture,});
|
||||
addBufferSpecs(vppBufferSpecs, {VAEntrypointVideoProc,});
|
||||
|
||||
return inputs;
|
||||
}
|
||||
|
|
|
@ -398,6 +398,24 @@ void VAAPIFixture::destroySurfaces(Surfaces& surfaces) const
|
|||
}
|
||||
}
|
||||
|
||||
void VAAPIFixture::createBuffer(const VABufferType& bufferType,
|
||||
const size_t bufferSize, const VAStatus& expectation)
|
||||
{
|
||||
ASSERT_INVALID_ID(m_bufferID)
|
||||
<< "test logic error: did you forget to call destroyBuffer?";
|
||||
|
||||
EXPECT_STATUS_EQ(
|
||||
expectation,
|
||||
vaCreateBuffer(m_vaDisplay, m_contextID, bufferType, bufferSize,
|
||||
1, NULL, &m_bufferID));
|
||||
}
|
||||
|
||||
void VAAPIFixture::destroyBuffer(const VAStatus& expectation)
|
||||
{
|
||||
EXPECT_STATUS_EQ(expectation, vaDestroyBuffer(m_vaDisplay, m_bufferID));
|
||||
m_bufferID = VA_INVALID_ID;
|
||||
}
|
||||
|
||||
void VAAPIFixture::doCreateContext(const Resolution& resolution,
|
||||
const VAStatus& expectation)
|
||||
{
|
||||
|
@ -413,17 +431,6 @@ void VAAPIFixture::doDestroyContext(const VAStatus& expectation)
|
|||
ASSERT_STATUS_EQ(expectation, vaDestroyContext(m_vaDisplay, m_contextID));
|
||||
}
|
||||
|
||||
void VAAPIFixture::doCreateBuffer(const VABufferType& bufferType)
|
||||
{
|
||||
ASSERT_STATUS(vaCreateBuffer(m_vaDisplay, m_contextID, bufferType,
|
||||
sizeof(bufferType), 1, NULL, &m_bufferID));
|
||||
}
|
||||
|
||||
void VAAPIFixture::doDestroyBuffer()
|
||||
{
|
||||
ASSERT_STATUS(vaDestroyBuffer(m_vaDisplay, m_bufferID));
|
||||
}
|
||||
|
||||
void VAAPIFixture::doTerminate()
|
||||
{
|
||||
EXPECT_STATUS(vaTerminate(m_vaDisplay));
|
||||
|
|
|
@ -46,8 +46,6 @@ public:
|
|||
void doCreateContext(const Resolution&,
|
||||
const VAStatus& expectation = VA_STATUS_SUCCESS);
|
||||
void doDestroyContext(const VAStatus& expectation = VA_STATUS_SUCCESS);
|
||||
void doCreateBuffer(const VABufferType&);
|
||||
void doDestroyBuffer();
|
||||
|
||||
void doLogSkipTest(const VAProfile&, const VAEntrypoint&) const;
|
||||
|
||||
|
@ -73,6 +71,10 @@ public:
|
|||
const VAStatus& = VA_STATUS_SUCCESS) const;
|
||||
void destroySurfaces(Surfaces&) const;
|
||||
|
||||
void createBuffer(const VABufferType&, const size_t,
|
||||
const VAStatus& = VA_STATUS_SUCCESS);
|
||||
void destroyBuffer(const VAStatus& = VA_STATUS_SUCCESS);
|
||||
|
||||
protected:
|
||||
// You can remove any or all of the following functions if its body
|
||||
// is empty.
|
||||
|
|
Loading…
Reference in New Issue