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 #include <assert.h>
18 #include <stdio.h>
19 #include <stdlib.h>
20 #include <string.h>
21 #include <OMXAL/OpenMAXAL.h>
22 #include <OMXAL/OpenMAXAL_Android.h>
23 
main(int argc __unused,char ** argv __unused)24 int main(int argc __unused, char **argv __unused)
25 {
26     XAresult result;
27     XAObjectItf engineObject;
28     printf("xaCreateEngine\n");
29     result = xaCreateEngine(&engineObject, 0, NULL, 0, NULL, NULL);
30     printf("result = %d\n", result);
31     assert(XA_RESULT_SUCCESS == result);
32     printf("engineObject = %p\n", engineObject);
33     printf("realize\n");
34     result = (*engineObject)->Realize(engineObject, XA_BOOLEAN_FALSE);
35     printf("result = %d\n", result);
36     printf("GetInterface for ENGINE\n");
37     XAEngineItf engineEngine;
38     result = (*engineObject)->GetInterface(engineObject, XA_IID_ENGINE, &engineEngine);
39     printf("result = %d\n", result);
40     printf("engineEngine = %p\n", engineEngine);
41     assert(XA_RESULT_SUCCESS == result);
42 
43     XAObjectItf outputMixObject;
44     printf("CreateOutputMix");
45     result = (*engineEngine)->CreateOutputMix(engineEngine, &outputMixObject, 0, NULL, NULL);
46     printf("result = %d, outputMixObject=%p\n", result, outputMixObject);
47     result = (*outputMixObject)->Realize(outputMixObject, XA_BOOLEAN_FALSE);
48     printf("result = %d\n", result);
49 
50     XAObjectItf deviceObject;
51     printf("CreateCameraDevice\n");
52     result = (*engineEngine)->CreateCameraDevice(engineEngine, &deviceObject,
53             XA_DEFAULTDEVICEID_CAMERA, 0, NULL, NULL);
54     printf("result = %d, deviceObject=%p\n", result, deviceObject);
55 
56     printf("CreateRadioDevice\n");
57     result = (*engineEngine)->CreateRadioDevice(engineEngine, &deviceObject, 0, NULL, NULL);
58     printf("result = %d, deviceObject=%p\n", result, deviceObject);
59 
60     printf("CreateLEDDevice\n");
61     result = (*engineEngine)->CreateLEDDevice(engineEngine, &deviceObject, XA_DEFAULTDEVICEID_LED,
62             0, NULL, NULL);
63     printf("result = %d, deviceObject=%p\n", result, deviceObject);
64 
65     printf("CreateVibraDevice\n");
66     result = (*engineEngine)->CreateVibraDevice(engineEngine, &deviceObject,
67             XA_DEFAULTDEVICEID_VIBRA, 0, NULL, NULL);
68     printf("result = %d, deviceObject=%p\n", result, deviceObject);
69 
70     printf("CreateMediaPlayer\n");
71     XAObjectItf playerObject;
72 #if 1
73     XADataLocator_AndroidBufferQueue locABQ;
74     memset(&locABQ, 0, sizeof(locABQ));
75     locABQ.locatorType = XA_DATALOCATOR_ANDROIDBUFFERQUEUE;
76     locABQ.numBuffers = 1;
77 #else
78     XADataLocator_URI locUri;
79     locUri.locatorType = XA_DATALOCATOR_URI;
80     locUri.URI = (XAchar *) "/sdcard/hello.wav";
81 #endif
82     XADataFormat_MIME fmtMime;
83     fmtMime.formatType = XA_DATAFORMAT_MIME;
84     fmtMime.mimeType = NULL;
85     fmtMime.containerType = XA_CONTAINERTYPE_UNSPECIFIED;
86     XADataSource dataSrc;
87 #if 1
88     dataSrc.pLocator = &locABQ;
89 #else
90     dataSrc.pLocator = &locUri;
91 #endif
92     dataSrc.pFormat = &fmtMime;
93     XADataSink audioSnk;
94     XADataLocator_OutputMix locOM;
95     locOM.locatorType = XA_DATALOCATOR_OUTPUTMIX;
96     locOM.outputMix = outputMixObject;
97     audioSnk.pLocator = &locOM;
98     audioSnk.pFormat = NULL;
99     XADataLocator_NativeDisplay locND;
100     locND.locatorType = XA_DATALOCATOR_NATIVEDISPLAY;
101     locND.hWindow = NULL; // FIXME wrong
102     locND.hDisplay = NULL;
103     XADataSink imageVideoSink;
104     imageVideoSink.pLocator = &locND;
105     imageVideoSink.pFormat = NULL;
106     result = (*engineEngine)->CreateMediaPlayer(engineEngine, &playerObject, &dataSrc, NULL,
107             &audioSnk, &imageVideoSink, NULL, NULL, 0, NULL, NULL);
108     printf("result = %d, playerObject=%p\n", result, playerObject);
109     result = (*playerObject)->Realize(playerObject, XA_BOOLEAN_FALSE);
110     printf("result = %d\n", result);
111 
112     printf("GetInterface for PLAY\n");
113     XAPlayItf playerPlay;
114     result = (*playerObject)->GetInterface(playerObject, XA_IID_PLAY, &playerPlay);
115     printf("result = %d\n", result);
116     printf("playerPlay = %p\n", playerPlay);
117     assert(XA_RESULT_SUCCESS == result);
118 
119     printf("SetPlayState to PLAYING\n");
120     result = (*playerPlay)->SetPlayState(playerPlay, XA_PLAYSTATE_PLAYING);
121     printf("result = %d\n", result);
122     assert(XA_RESULT_SUCCESS == result);
123 
124     printf("destroying media player\n");
125     (*playerObject)->Destroy(playerObject);
126 
127     printf("destroying output mix\n");
128     (*outputMixObject)->Destroy(outputMixObject);
129 
130     printf("destroying engine\n");
131     (*engineObject)->Destroy(engineObject);
132     printf("exit\n");
133 
134     return EXIT_SUCCESS;
135 }
136