1b8738cd33a43cf03f67534dd7ea567d1354cfcceGlenn Kasten/* 2b8738cd33a43cf03f67534dd7ea567d1354cfcceGlenn Kasten * Copyright (C) 2011 The Android Open Source Project 3b8738cd33a43cf03f67534dd7ea567d1354cfcceGlenn Kasten * 4b8738cd33a43cf03f67534dd7ea567d1354cfcceGlenn Kasten * Licensed under the Apache License, Version 2.0 (the "License"); 5b8738cd33a43cf03f67534dd7ea567d1354cfcceGlenn Kasten * you may not use this file except in compliance with the License. 6b8738cd33a43cf03f67534dd7ea567d1354cfcceGlenn Kasten * You may obtain a copy of the License at 7b8738cd33a43cf03f67534dd7ea567d1354cfcceGlenn Kasten * 8b8738cd33a43cf03f67534dd7ea567d1354cfcceGlenn Kasten * http://www.apache.org/licenses/LICENSE-2.0 9b8738cd33a43cf03f67534dd7ea567d1354cfcceGlenn Kasten * 10b8738cd33a43cf03f67534dd7ea567d1354cfcceGlenn Kasten * Unless required by applicable law or agreed to in writing, software 11b8738cd33a43cf03f67534dd7ea567d1354cfcceGlenn Kasten * distributed under the License is distributed on an "AS IS" BASIS, 12b8738cd33a43cf03f67534dd7ea567d1354cfcceGlenn Kasten * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b8738cd33a43cf03f67534dd7ea567d1354cfcceGlenn Kasten * See the License for the specific language governing permissions and 14b8738cd33a43cf03f67534dd7ea567d1354cfcceGlenn Kasten * limitations under the License. 15b8738cd33a43cf03f67534dd7ea567d1354cfcceGlenn Kasten */ 16b8738cd33a43cf03f67534dd7ea567d1354cfcceGlenn Kasten 178db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten#include <assert.h> 188db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten#include <stdio.h> 198db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten#include <stdlib.h> 20b93695922547aecaf67b4e9c0bf1306257ffd54dElliott Hughes#include <string.h> 21c6853892c94800e72c0bd676d5d2136d48cea76eGlenn Kasten#include <OMXAL/OpenMAXAL.h> 22c6853892c94800e72c0bd676d5d2136d48cea76eGlenn Kasten#include <OMXAL/OpenMAXAL_Android.h> 238db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten 24086a6f51a7b12880ed114962136972f89ed70da2Glenn Kastenint main(int argc __unused, char **argv __unused) 258db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten{ 268db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten XAresult result; 278db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten XAObjectItf engineObject; 288db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten printf("xaCreateEngine\n"); 298db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten result = xaCreateEngine(&engineObject, 0, NULL, 0, NULL, NULL); 3058432eb9cea995c69b4f905e68b38c1b8216edebGlenn Kasten printf("result = %d\n", result); 318db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten assert(XA_RESULT_SUCCESS == result); 328db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten printf("engineObject = %p\n", engineObject); 338db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten printf("realize\n"); 348db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten result = (*engineObject)->Realize(engineObject, XA_BOOLEAN_FALSE); 3558432eb9cea995c69b4f905e68b38c1b8216edebGlenn Kasten printf("result = %d\n", result); 368db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten printf("GetInterface for ENGINE\n"); 378db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten XAEngineItf engineEngine; 388db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten result = (*engineObject)->GetInterface(engineObject, XA_IID_ENGINE, &engineEngine); 3958432eb9cea995c69b4f905e68b38c1b8216edebGlenn Kasten printf("result = %d\n", result); 408db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten printf("engineEngine = %p\n", engineEngine); 418db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten assert(XA_RESULT_SUCCESS == result); 428db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten 438db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten XAObjectItf outputMixObject; 448db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten printf("CreateOutputMix"); 458db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten result = (*engineEngine)->CreateOutputMix(engineEngine, &outputMixObject, 0, NULL, NULL); 4658432eb9cea995c69b4f905e68b38c1b8216edebGlenn Kasten printf("result = %d, outputMixObject=%p\n", result, outputMixObject); 4794a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten result = (*outputMixObject)->Realize(outputMixObject, XA_BOOLEAN_FALSE); 4858432eb9cea995c69b4f905e68b38c1b8216edebGlenn Kasten printf("result = %d\n", result); 498db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten 508db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten XAObjectItf deviceObject; 518db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten printf("CreateCameraDevice\n"); 528db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten result = (*engineEngine)->CreateCameraDevice(engineEngine, &deviceObject, 538db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten XA_DEFAULTDEVICEID_CAMERA, 0, NULL, NULL); 5458432eb9cea995c69b4f905e68b38c1b8216edebGlenn Kasten printf("result = %d, deviceObject=%p\n", result, deviceObject); 558db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten 568db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten printf("CreateRadioDevice\n"); 578db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten result = (*engineEngine)->CreateRadioDevice(engineEngine, &deviceObject, 0, NULL, NULL); 5858432eb9cea995c69b4f905e68b38c1b8216edebGlenn Kasten printf("result = %d, deviceObject=%p\n", result, deviceObject); 598db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten 608db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten printf("CreateLEDDevice\n"); 618db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten result = (*engineEngine)->CreateLEDDevice(engineEngine, &deviceObject, XA_DEFAULTDEVICEID_LED, 628db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten 0, NULL, NULL); 6358432eb9cea995c69b4f905e68b38c1b8216edebGlenn Kasten printf("result = %d, deviceObject=%p\n", result, deviceObject); 648db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten 658db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten printf("CreateVibraDevice\n"); 668db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten result = (*engineEngine)->CreateVibraDevice(engineEngine, &deviceObject, 678db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten XA_DEFAULTDEVICEID_VIBRA, 0, NULL, NULL); 6858432eb9cea995c69b4f905e68b38c1b8216edebGlenn Kasten printf("result = %d, deviceObject=%p\n", result, deviceObject); 698db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten 708b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten printf("CreateMediaPlayer\n"); 718db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten XAObjectItf playerObject; 72b8738cd33a43cf03f67534dd7ea567d1354cfcceGlenn Kasten#if 1 73b8738cd33a43cf03f67534dd7ea567d1354cfcceGlenn Kasten XADataLocator_AndroidBufferQueue locABQ; 74b8738cd33a43cf03f67534dd7ea567d1354cfcceGlenn Kasten memset(&locABQ, 0, sizeof(locABQ)); 75b8738cd33a43cf03f67534dd7ea567d1354cfcceGlenn Kasten locABQ.locatorType = XA_DATALOCATOR_ANDROIDBUFFERQUEUE; 76b8738cd33a43cf03f67534dd7ea567d1354cfcceGlenn Kasten#else 778db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten XADataLocator_URI locUri; 788db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten locUri.locatorType = XA_DATALOCATOR_URI; 798db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten locUri.URI = (XAchar *) "/sdcard/hello.wav"; 80b8738cd33a43cf03f67534dd7ea567d1354cfcceGlenn Kasten#endif 818db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten XADataFormat_MIME fmtMime; 828db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten fmtMime.formatType = XA_DATAFORMAT_MIME; 838db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten fmtMime.mimeType = NULL; 848db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten fmtMime.containerType = XA_CONTAINERTYPE_UNSPECIFIED; 858db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten XADataSource dataSrc; 86b8738cd33a43cf03f67534dd7ea567d1354cfcceGlenn Kasten#if 1 87b8738cd33a43cf03f67534dd7ea567d1354cfcceGlenn Kasten dataSrc.pLocator = &locABQ; 88b8738cd33a43cf03f67534dd7ea567d1354cfcceGlenn Kasten#else 898db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten dataSrc.pLocator = &locUri; 90b8738cd33a43cf03f67534dd7ea567d1354cfcceGlenn Kasten#endif 918db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten dataSrc.pFormat = &fmtMime; 928db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten XADataSink audioSnk; 938db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten XADataLocator_OutputMix locOM; 948db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten locOM.locatorType = XA_DATALOCATOR_OUTPUTMIX; 958db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten locOM.outputMix = outputMixObject; 968db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten audioSnk.pLocator = &locOM; 978db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten audioSnk.pFormat = NULL; 988db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten XADataLocator_NativeDisplay locND; 998db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten locND.locatorType = XA_DATALOCATOR_NATIVEDISPLAY; 1008db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten locND.hWindow = NULL; 1018db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten locND.hDisplay = NULL; 1028db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten XADataSink imageVideoSink; 1038db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten imageVideoSink.pLocator = &locND; 1048db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten imageVideoSink.pFormat = NULL; 1058db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten result = (*engineEngine)->CreateMediaPlayer(engineEngine, &playerObject, &dataSrc, NULL, 1068db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten &audioSnk, &imageVideoSink, NULL, NULL, 0, NULL, NULL); 10758432eb9cea995c69b4f905e68b38c1b8216edebGlenn Kasten printf("result = %d, playerObject=%p\n", result, playerObject); 10894a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten result = (*playerObject)->Realize(playerObject, XA_BOOLEAN_FALSE); 10958432eb9cea995c69b4f905e68b38c1b8216edebGlenn Kasten printf("result = %d\n", result); 11094a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten 11194a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten printf("GetInterface for PLAY\n"); 11294a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten XAPlayItf playerPlay; 11394a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten result = (*playerObject)->GetInterface(playerObject, XA_IID_PLAY, &playerPlay); 11458432eb9cea995c69b4f905e68b38c1b8216edebGlenn Kasten printf("result = %d\n", result); 11594a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten printf("playerPlay = %p\n", playerPlay); 11694a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten assert(XA_RESULT_SUCCESS == result); 11794a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten 11894a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten printf("SetPlayState to PLAYING\n"); 11994a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten result = (*playerPlay)->SetPlayState(playerPlay, XA_PLAYSTATE_PLAYING); 12058432eb9cea995c69b4f905e68b38c1b8216edebGlenn Kasten printf("result = %d\n", result); 12194a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten assert(XA_RESULT_SUCCESS == result); 12294a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten 12394a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten printf("destroying media player\n"); 12494a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten (*playerObject)->Destroy(playerObject); 1258db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten 1268db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten printf("destroying output mix\n"); 1278db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten (*outputMixObject)->Destroy(outputMixObject); 1288db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten 1298db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten printf("destroying engine\n"); 1308db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten (*engineObject)->Destroy(engineObject); 1318db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten printf("exit\n"); 1328db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten 1338db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten return EXIT_SUCCESS; 1348db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten} 135