1 /* 2 * Copyright (C) 2011 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 /** 18 * Test for testing the creation of OpenMAX AL objects. 19 * The tests verify the creation and completion of the call to Realize() for the following objects: 20 * - Engine 21 * - OutputMix 22 */ 23 24 #define LOG_NDEBUG 0 25 #define LOG_TAG "XAObjectCreationTest" 26 27 #include <gtest/gtest.h> 28 #include <utils/Log.h> 29 30 #if !defined(BUILD_ONLY) 31 #include "OMXAL/OpenMAXAL.h" 32 #include "OMXAL/OpenMAXAL_Android.h" 33 #endif 34 35 #if !defined(BUILD_ONLY) 36 //----------------------------------------------------------------- 37 /* Checks for error and displays the error code if any */ 38 bool IsOk(XAresult res) { 39 if (XA_RESULT_SUCCESS != res) { 40 fprintf(stderr, "IsOk failure: 0x%x, exiting\n", res); 41 return false; 42 } 43 return true; 44 } 45 46 //----------------------------------------------------------------- 47 class XAObjectCreationTest : public ::testing::Test { 48 49 protected: 50 XAresult res; 51 XAObjectItf engineObj, outputMixObj, mediaPlayerObj; 52 XAEngineItf engineItf; 53 54 XADataSource mediaSource; 55 XADataSink audioSink; 56 XADataLocator_URI locatorUriSrc; 57 XADataLocator_AndroidBufferQueue locatorAbqSrc; 58 XADataLocator_AndroidFD locatorFdSrc; 59 XADataFormat_MIME formatMimeSrc; 60 61 XADataLocator_OutputMix locatorOutputmixSink; 62 XADataFormat_PCM formatPcmSink; 63 64 XADataLocator_NativeDisplay locatorVideoSink; 65 XADataSink imageSink; 66 67 //ANativeWindow* pNativeWindow; 68 69 XAObjectCreationTest() { } 70 71 virtual ~XAObjectCreationTest() { } 72 73 /* Test setup*/ 74 virtual void SetUp() { 75 ALOGV("Test Setup()"); 76 res = XA_RESULT_UNKNOWN_ERROR; 77 engineItf = NULL; 78 engineObj = NULL; 79 outputMixObj = NULL; 80 mediaPlayerObj = NULL; 81 // Engine creation 82 res = xaCreateEngine(&engineObj, 0, NULL, 0, NULL, NULL); 83 ASSERT_TRUE(IsOk(res)); 84 res = (*engineObj)->Realize(engineObj, XA_BOOLEAN_FALSE); 85 ASSERT_TRUE(IsOk(res)); 86 res = (*engineObj)->GetInterface(engineObj, XA_IID_ENGINE, &engineItf); 87 ASSERT_TRUE(IsOk(res)); 88 ASSERT_TRUE(NULL != engineItf); 89 } 90 91 virtual void TearDown() { 92 ALOGV("Test TearDown()"); 93 if (mediaPlayerObj) { 94 (*mediaPlayerObj)->Destroy(mediaPlayerObj); 95 mediaPlayerObj = NULL; 96 } 97 if (outputMixObj) { 98 (*outputMixObj)->Destroy(outputMixObj); 99 outputMixObj = NULL; 100 } 101 if (engineObj){ 102 (*engineObj)->Destroy(engineObj); 103 engineObj = NULL; 104 } 105 } 106 107 //--------------------------------------------------------------------------------------------- 108 // Tests 109 110 /* Test case for creating an MediaPlayer object */ 111 void OutputMixCreation() { 112 res = (*engineItf)->CreateOutputMix(engineItf, &outputMixObj, 113 0, NULL/*iidArray*/, NULL/*required*/); 114 ASSERT_TRUE(IsOk(res)); 115 ASSERT_TRUE(NULL != outputMixObj); 116 res = (*outputMixObj)->Realize(outputMixObj, XA_BOOLEAN_FALSE); 117 ASSERT_TRUE(IsOk(res)); 118 } 119 120 }; 121 #else 122 class XAObjectCreationTest : public ::testing::Test { 123 protected: 124 void OutputMixCreation() { } 125 }; 126 #endif 127 128 //------------------------------------------------------------------------------------------------- 129 TEST_F(XAObjectCreationTest, testEngineCreation) { 130 ALOGV("Test Fixture: EngineCreation"); 131 // nothing to do here that isn't done in SetUp() 132 } 133 134 TEST_F(XAObjectCreationTest, testOutputMixCreation) { 135 ALOGV("Test Fixture: OutputMixCreation"); 136 OutputMixCreation(); 137 } 138 139 int main(int argc, char **argv) { 140 testing::InitGoogleTest(&argc, argv); 141 142 return RUN_ALL_TESTS(); 143 } 144 145