| /* |
| * 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_createbuffer.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. |
| |
| // VAProtectedSliceDataBufferType left out on purpose |
| static const std::vector<VABufferType> decoderBufferTypes ={ |
| VAPictureParameterBufferType, |
| VAIQMatrixBufferType, |
| VABitPlaneBufferType, |
| VASliceGroupMapBufferType, |
| VASliceParameterBufferType, |
| VASliceDataBufferType, |
| VAMacroblockParameterBufferType, |
| VAResidualDataBufferType, |
| VADeblockingParameterBufferType, |
| VAImageBufferType, |
| VAQMatrixBufferType, |
| VAHuffmanTableBufferType, |
| VAProbabilityBufferType, |
| }; |
| |
| // VAEncMacroblockParameterBufferType left out on purpose |
| static const std::vector<VABufferType> encoderBufferTypes ={ |
| VAEncCodedBufferType, |
| VAEncSequenceParameterBufferType, |
| VAEncPictureParameterBufferType, |
| VAEncSliceParameterBufferType, |
| VAEncPackedHeaderParameterBufferType, |
| VAEncPackedHeaderDataBufferType, |
| VAEncMiscParameterBufferType, |
| VAEncMacroblockMapBufferType, |
| VAEncFEIMVBufferType, |
| VAEncFEIMBCodeBufferType, |
| VAEncFEIDistortionBufferType, |
| VAEncFEIMBControlBufferType, |
| VAEncFEIMVPredictorBufferType |
| }; |
| |
| static const std::vector<VABufferType> postProcessorBufferTypes |
| = { VAProcPipelineParameterBufferType, VAProcFilterParameterBufferType }; |
| |
| static const std::vector<testInput> input = { |
| { VAProfileMPEG2Simple, VAEntrypointVLD, decoderBufferTypes }, |
| { VAProfileMPEG2Main, VAEntrypointVLD, decoderBufferTypes }, |
| { VAProfileH264Main, VAEntrypointVLD, decoderBufferTypes }, |
| { VAProfileH264ConstrainedBaseline, VAEntrypointVLD, decoderBufferTypes}, |
| { VAProfileH264High, VAEntrypointVLD, decoderBufferTypes}, |
| { VAProfileH264MultiviewHigh, VAEntrypointVLD, decoderBufferTypes}, |
| { VAProfileH264StereoHigh, VAEntrypointVLD, decoderBufferTypes}, |
| { VAProfileVC1Simple, VAEntrypointVLD, decoderBufferTypes }, |
| { VAProfileVC1Main, VAEntrypointVLD, decoderBufferTypes }, |
| { VAProfileVC1Advanced, VAEntrypointVLD, decoderBufferTypes }, |
| { VAProfileJPEGBaseline, VAEntrypointVLD, decoderBufferTypes }, |
| { VAProfileVP8Version0_3, VAEntrypointVLD, decoderBufferTypes }, |
| { VAProfileHEVCMain, VAEntrypointVLD, decoderBufferTypes }, |
| { VAProfileHEVCMain10, VAEntrypointVLD, decoderBufferTypes }, |
| { VAProfileVP9Profile0, VAEntrypointVLD, decoderBufferTypes }, |
| { VAProfileVP9Profile2, VAEntrypointVLD, decoderBufferTypes }, |
| { VAProfileH264Main, VAEntrypointEncSlice, encoderBufferTypes}, |
| { VAProfileH264ConstrainedBaseline, VAEntrypointEncSlice, encoderBufferTypes }, |
| { VAProfileH264High, VAEntrypointEncSlice, encoderBufferTypes }, |
| { VAProfileH264MultiviewHigh, VAEntrypointEncSlice, encoderBufferTypes }, |
| { VAProfileH264StereoHigh, VAEntrypointEncSlice, encoderBufferTypes }, |
| { VAProfileH264Main, VAEntrypointFEI, encoderBufferTypes}, |
| { VAProfileH264ConstrainedBaseline, VAEntrypointFEI, encoderBufferTypes }, |
| { VAProfileH264High, VAEntrypointFEI, encoderBufferTypes }, |
| { VAProfileJPEGBaseline, VAEntrypointEncSlice, encoderBufferTypes }, |
| { VAProfileVP8Version0_3, VAEntrypointEncSlice, encoderBufferTypes }, |
| { VAProfileHEVCMain, VAEntrypointEncSlice, encoderBufferTypes }, |
| { VAProfileHEVCMain10, VAEntrypointEncSlice, encoderBufferTypes }, |
| { VAProfileVP9Profile0, VAEntrypointEncSlice, encoderBufferTypes }, |
| { VAProfileNone, VAEntrypointVideoProc, postProcessorBufferTypes } |
| }; |
| |
| VAAPICreateBuffer::VAAPICreateBuffer() |
| { |
| m_vaDisplay = doInitialize(); |
| } |
| |
| VAAPICreateBuffer::~VAAPICreateBuffer() |
| { |
| doTerminate(); |
| } |
| |
| 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. |
| |
| testInput currentTestInput = GetParam(); |
| |
| doGetMaxValues(); |
| doQueryConfigProfiles(); |
| |
| if (doFindProfileInList(currentTestInput.inputProfile)) { |
| |
| doQueryConfigEntrypoints(currentTestInput.inputProfile); |
| if (doFindEntrypointInList( |
| currentTestInput.inputEntrypoint)) { |
| // profile and entrypoint are supported, if not supported then do |
| // not test for vaCreateBuffer |
| |
| doCreateConfig( |
| currentTestInput.inputProfile, |
| currentTestInput.inputEntrypoint); |
| |
| // vaCreateContext input requires resolution, since this test |
| // doesn't create surfaces, passing 0x0 resolution should provide |
| // the desired result. |
| doCreateContext(std::make_pair(0, 0)); |
| |
| for (auto& bufferTypeIT : currentTestInput.inputBufferType) { |
| doCreateBuffer(bufferTypeIT); |
| doDestroyBuffer(); |
| } |
| |
| doDestroyContext(); |
| doDestroyConfig(); |
| } |
| } |
| else { |
| doLogSkipTest(currentTestInput.inputProfile, currentTestInput.inputEntrypoint); |
| } |
| } |
| |
| INSTANTIATE_TEST_CASE_P( |
| CreateBuffer, VAAPICreateBuffer, |
| ::testing::ValuesIn(input)); |
| } // VAAPI |