XAObjectCreationTest.cpp revision ff0a994dacffeee9c7918401bca7cdd6ae402707
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 */
38bool 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//-----------------------------------------------------------------
47class XAObjectCreationTest : public ::testing::Test {
48
49protected:
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
122class XAObjectCreationTest : public ::testing::Test {
123protected:
124    void OutputMixCreation() { }
125};
126#endif
127
128//-------------------------------------------------------------------------------------------------
129TEST_F(XAObjectCreationTest, testEngineCreation) {
130    ALOGV("Test Fixture: EngineCreation");
131    // nothing to do here that isn't done in SetUp()
132}
133
134TEST_F(XAObjectCreationTest, testOutputMixCreation) {
135    ALOGV("Test Fixture: OutputMixCreation");
136    OutputMixCreation();
137}
138
139int main(int argc, char **argv) {
140    testing::InitGoogleTest(&argc, argv);
141
142    return RUN_ALL_TESTS();
143}
144
145