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>
20c6853892c94800e72c0bd676d5d2136d48cea76eGlenn Kasten#include <OMXAL/OpenMAXAL.h>
21c6853892c94800e72c0bd676d5d2136d48cea76eGlenn Kasten#include <OMXAL/OpenMAXAL_Android.h>
228db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten
238db0b106cdce5f5216b1535492de7930ad738aedGlenn Kastenint main(int argc, char **argv)
248db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten{
258db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    XAresult result;
268db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    XAObjectItf engineObject;
278db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    printf("xaCreateEngine\n");
288db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    result = xaCreateEngine(&engineObject, 0, NULL, 0, NULL, NULL);
2958432eb9cea995c69b4f905e68b38c1b8216edebGlenn Kasten    printf("result = %d\n", result);
308db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    assert(XA_RESULT_SUCCESS == result);
318db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    printf("engineObject = %p\n", engineObject);
328db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    printf("realize\n");
338db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    result = (*engineObject)->Realize(engineObject, XA_BOOLEAN_FALSE);
3458432eb9cea995c69b4f905e68b38c1b8216edebGlenn Kasten    printf("result = %d\n", result);
358db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    printf("GetInterface for ENGINE\n");
368db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    XAEngineItf engineEngine;
378db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    result = (*engineObject)->GetInterface(engineObject, XA_IID_ENGINE, &engineEngine);
3858432eb9cea995c69b4f905e68b38c1b8216edebGlenn Kasten    printf("result = %d\n", result);
398db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    printf("engineEngine = %p\n", engineEngine);
408db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    assert(XA_RESULT_SUCCESS == result);
418db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten
428db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    XAObjectItf outputMixObject;
438db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    printf("CreateOutputMix");
448db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    result = (*engineEngine)->CreateOutputMix(engineEngine, &outputMixObject, 0, NULL, NULL);
4558432eb9cea995c69b4f905e68b38c1b8216edebGlenn Kasten    printf("result = %d, outputMixObject=%p\n", result, outputMixObject);
4694a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten    result = (*outputMixObject)->Realize(outputMixObject, XA_BOOLEAN_FALSE);
4758432eb9cea995c69b4f905e68b38c1b8216edebGlenn Kasten    printf("result = %d\n", result);
488db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten
498db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    XAObjectItf deviceObject;
508db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    printf("CreateCameraDevice\n");
518db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    result = (*engineEngine)->CreateCameraDevice(engineEngine, &deviceObject,
528db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten            XA_DEFAULTDEVICEID_CAMERA, 0, NULL, NULL);
5358432eb9cea995c69b4f905e68b38c1b8216edebGlenn Kasten    printf("result = %d, deviceObject=%p\n", result, deviceObject);
548db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten
558db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    printf("CreateRadioDevice\n");
568db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    result = (*engineEngine)->CreateRadioDevice(engineEngine, &deviceObject, 0, NULL, NULL);
5758432eb9cea995c69b4f905e68b38c1b8216edebGlenn Kasten    printf("result = %d, deviceObject=%p\n", result, deviceObject);
588db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten
598db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    printf("CreateLEDDevice\n");
608db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    result = (*engineEngine)->CreateLEDDevice(engineEngine, &deviceObject, XA_DEFAULTDEVICEID_LED,
618db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten            0, NULL, NULL);
6258432eb9cea995c69b4f905e68b38c1b8216edebGlenn Kasten    printf("result = %d, deviceObject=%p\n", result, deviceObject);
638db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten
648db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    printf("CreateVibraDevice\n");
658db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    result = (*engineEngine)->CreateVibraDevice(engineEngine, &deviceObject,
668db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten            XA_DEFAULTDEVICEID_VIBRA, 0, NULL, NULL);
6758432eb9cea995c69b4f905e68b38c1b8216edebGlenn Kasten    printf("result = %d, deviceObject=%p\n", result, deviceObject);
688db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten
698b8875067dd02b79361abb00c5d65b02a8ae72b0Glenn Kasten    printf("CreateMediaPlayer\n");
708db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    XAObjectItf playerObject;
71b8738cd33a43cf03f67534dd7ea567d1354cfcceGlenn Kasten#if 1
72b8738cd33a43cf03f67534dd7ea567d1354cfcceGlenn Kasten    XADataLocator_AndroidBufferQueue locABQ;
73b8738cd33a43cf03f67534dd7ea567d1354cfcceGlenn Kasten    memset(&locABQ, 0, sizeof(locABQ));
74b8738cd33a43cf03f67534dd7ea567d1354cfcceGlenn Kasten    locABQ.locatorType = XA_DATALOCATOR_ANDROIDBUFFERQUEUE;
75b8738cd33a43cf03f67534dd7ea567d1354cfcceGlenn Kasten#else
768db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    XADataLocator_URI locUri;
778db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    locUri.locatorType = XA_DATALOCATOR_URI;
788db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    locUri.URI = (XAchar *) "/sdcard/hello.wav";
79b8738cd33a43cf03f67534dd7ea567d1354cfcceGlenn Kasten#endif
808db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    XADataFormat_MIME fmtMime;
818db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    fmtMime.formatType = XA_DATAFORMAT_MIME;
828db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    fmtMime.mimeType = NULL;
838db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    fmtMime.containerType = XA_CONTAINERTYPE_UNSPECIFIED;
848db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    XADataSource dataSrc;
85b8738cd33a43cf03f67534dd7ea567d1354cfcceGlenn Kasten#if 1
86b8738cd33a43cf03f67534dd7ea567d1354cfcceGlenn Kasten    dataSrc.pLocator = &locABQ;
87b8738cd33a43cf03f67534dd7ea567d1354cfcceGlenn Kasten#else
888db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    dataSrc.pLocator = &locUri;
89b8738cd33a43cf03f67534dd7ea567d1354cfcceGlenn Kasten#endif
908db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    dataSrc.pFormat = &fmtMime;
918db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    XADataSink audioSnk;
928db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    XADataLocator_OutputMix locOM;
938db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    locOM.locatorType = XA_DATALOCATOR_OUTPUTMIX;
948db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    locOM.outputMix = outputMixObject;
958db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    audioSnk.pLocator = &locOM;
968db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    audioSnk.pFormat = NULL;
978db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    XADataLocator_NativeDisplay locND;
988db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    locND.locatorType = XA_DATALOCATOR_NATIVEDISPLAY;
998db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    locND.hWindow = NULL;
1008db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    locND.hDisplay = NULL;
1018db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    XADataSink imageVideoSink;
1028db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    imageVideoSink.pLocator = &locND;
1038db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    imageVideoSink.pFormat = NULL;
1048db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    result = (*engineEngine)->CreateMediaPlayer(engineEngine, &playerObject, &dataSrc, NULL,
1058db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten            &audioSnk, &imageVideoSink, NULL, NULL, 0, NULL, NULL);
10658432eb9cea995c69b4f905e68b38c1b8216edebGlenn Kasten    printf("result = %d, playerObject=%p\n", result, playerObject);
10794a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten    result = (*playerObject)->Realize(playerObject, XA_BOOLEAN_FALSE);
10858432eb9cea995c69b4f905e68b38c1b8216edebGlenn Kasten    printf("result = %d\n", result);
10994a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten
11094a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten    printf("GetInterface for PLAY\n");
11194a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten    XAPlayItf playerPlay;
11294a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten    result = (*playerObject)->GetInterface(playerObject, XA_IID_PLAY, &playerPlay);
11358432eb9cea995c69b4f905e68b38c1b8216edebGlenn Kasten    printf("result = %d\n", result);
11494a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten    printf("playerPlay = %p\n", playerPlay);
11594a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten    assert(XA_RESULT_SUCCESS == result);
11694a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten
11794a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten    printf("SetPlayState to PLAYING\n");
11894a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten    result = (*playerPlay)->SetPlayState(playerPlay, XA_PLAYSTATE_PLAYING);
11958432eb9cea995c69b4f905e68b38c1b8216edebGlenn Kasten    printf("result = %d\n", result);
12094a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten    assert(XA_RESULT_SUCCESS == result);
12194a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten
12294a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten    printf("destroying media player\n");
12394a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten    (*playerObject)->Destroy(playerObject);
1248db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten
1258db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    printf("destroying output mix\n");
1268db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    (*outputMixObject)->Destroy(outputMixObject);
1278db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten
1288db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    printf("destroying engine\n");
1298db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    (*engineObject)->Destroy(engineObject);
1308db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    printf("exit\n");
1318db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten
1328db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    return EXIT_SUCCESS;
1338db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten}
134