| /* |
| * Copyright (C) 2016 Intel Corporation. All Rights Reserved. |
| * |
| * Permission is hereby granted, free of charge, to any person obtaining a |
| * copy of this software and associated documentation files (the |
| * "Software"), to deal in the Software without restriction, including |
| * without limitation the rights to use, copy, modify, merge, publish, |
| * distribute, sub license, and/or sell copies of the Software, and to |
| * permit persons to whom the Software is furnished to do so, subject to |
| * the following conditions: |
| * |
| * The above copyright notice and this permission notice (including the |
| * next paragraph) shall be included in all copies or substantial portions |
| * of the Software. |
| * |
| * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
| * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
| * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. |
| * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR |
| * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, |
| * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE |
| * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
| */ |
| |
| #include "test_va_api_fixture.h" |
| |
| namespace VAAPI { |
| |
| // Testing VABufferType in groups that will be associated with VAProfile and |
| // VAEntrypoint. vaCreateBuffer doesn't require these itself but its input |
| // parameter do care about them. |
| |
| typedef ::testing::WithParamInterface<std::tuple<VAProfile, VAEntrypoint, |
| VABufferType, size_t>> CreateBufferParamInterface; |
| |
| class VAAPICreateBuffer |
| : public VAAPIFixture |
| , public CreateBufferParamInterface |
| { |
| public: |
| VAAPICreateBuffer() |
| : 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() |
| { |
| VAAPIFixture::SetUp(); |
| doInitialize(); |
| ASSERT_FALSE(HasFailure()); |
| } |
| |
| virtual void TearDown() |
| { |
| doTerminate(); |
| VAAPIFixture::TearDown(); |
| } |
| }; |
| |
| 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)), |
| }}, |
| }; |
| |
| 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 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) |
| { |
| // vaCreateBuffer uses a VAContextID as an input. This VAContextID requires |
| // a VAConfigID to be created. VAConfigID requires VAProfile and |
| // VAEntrypoint to be given. As such, to test vaCreateBuffer these are |
| // the minimum requirements. There's no need to create surfaces or attach |
| // them to a VAConfigID. |
| |
| if (not isSupported(profile, entrypoint)) { |
| skipTest(profile, entrypoint); |
| return; |
| } |
| |
| // 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. |
| Resolution minRes, maxRes; |
| getMinMaxSurfaceResolution(minRes, maxRes); |
| doCreateContext(minRes); |
| |
| createBuffer(bufferType, bufferSize); |
| destroyBuffer(); |
| |
| doDestroyContext(); |
| destroyConfig(); |
| } |
| |
| std::vector<CreateBufferParamInterface::ParamType> generateInput() |
| { |
| std::vector<CreateBufferParamInterface::ParamType> inputs; |
| |
| 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)); |
| } |
| } |
| } |
| } |
| }; |
| |
| addBufferSpecs(decodeBufferSpecs, {VAEntrypointVLD,}); |
| addBufferSpecs(encodeBufferSpecs, {VAEntrypointEncSlice, |
| VAEntrypointEncSliceLP, VAEntrypointEncPicture,}); |
| addBufferSpecs(vppBufferSpecs, {VAEntrypointVideoProc,}); |
| |
| return inputs; |
| } |
| |
| INSTANTIATE_TEST_CASE_P( |
| CreateBuffer, VAAPICreateBuffer, |
| ::testing::ValuesIn(generateInput())); |
| |
| } // namespace VAAPI |