tsrc/consoleplayer/player/src/openmax_al/openmaxplayerutility.cpp
author hgs
Tue, 21 Sep 2010 11:21:54 -0500
changeset 36 20d2741ccdad
parent 33 e1b6d78dfe6a
permissions -rw-r--r--
201037
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
36
hgs
parents: 33
diff changeset
     1
/*
hgs
parents: 33
diff changeset
     2
 * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents: 33
diff changeset
     3
 * All rights reserved.
hgs
parents: 33
diff changeset
     4
 * This component and the accompanying materials are made available
hgs
parents: 33
diff changeset
     5
 * under the terms of "Eclipse Public License v1.0"
hgs
parents: 33
diff changeset
     6
 * which accompanies this distribution, and is available
hgs
parents: 33
diff changeset
     7
 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents: 33
diff changeset
     8
 *
hgs
parents: 33
diff changeset
     9
 * Initial Contributors:
hgs
parents: 33
diff changeset
    10
 * Nokia Corporation - initial contribution.
hgs
parents: 33
diff changeset
    11
 *
hgs
parents: 33
diff changeset
    12
 * Contributors:
hgs
parents: 33
diff changeset
    13
 *
hgs
parents: 33
diff changeset
    14
 * Description:
hgs
parents: 33
diff changeset
    15
 * Source file for the main class of the ConsolePlayer test app.
hgs
parents: 33
diff changeset
    16
 *
hgs
parents: 33
diff changeset
    17
 */
hgs
parents: 33
diff changeset
    18
33
hgs
parents:
diff changeset
    19
#include <string.h>
36
hgs
parents: 33
diff changeset
    20
#include <stdlib.h>
33
hgs
parents:
diff changeset
    21
#include "openmaxplayerutility.h"
hgs
parents:
diff changeset
    22
hgs
parents:
diff changeset
    23
#define FILE_EXTN "file:///"
hgs
parents:
diff changeset
    24
#define FILE_EXTN_LEN strlen("file:///")
hgs
parents:
diff changeset
    25
hgs
parents:
diff changeset
    26
XAboolean  bIsPlayDone = XA_BOOLEAN_FALSE;
hgs
parents:
diff changeset
    27
hgs
parents:
diff changeset
    28
void PlayCallbackFun (XAPlayItf /*caller*/, void* pContext, XAuint32 event)
hgs
parents:
diff changeset
    29
{
hgs
parents:
diff changeset
    30
    char callback_string[50];
hgs
parents:
diff changeset
    31
    COpenMaxPlayerUtility* pSelf = (COpenMaxPlayerUtility*)pContext;
hgs
parents:
diff changeset
    32
    if(event & XA_PLAYEVENT_HEADMOVING)
hgs
parents:
diff changeset
    33
    {
36
hgs
parents: 33
diff changeset
    34
        strcpy(callback_string, "XA_PLAYEVENT_HEADMOVING");
33
hgs
parents:
diff changeset
    35
    }
hgs
parents:
diff changeset
    36
    else if(event & XA_PLAYEVENT_HEADATEND)
hgs
parents:
diff changeset
    37
    {
hgs
parents:
diff changeset
    38
        strcpy(callback_string, "XA_PLAYEVENT_HEADATEND");
hgs
parents:
diff changeset
    39
        bIsPlayDone = XA_BOOLEAN_TRUE;
hgs
parents:
diff changeset
    40
        pSelf->Stop();
hgs
parents:
diff changeset
    41
    }
hgs
parents:
diff changeset
    42
    else if(event & XA_PLAYEVENT_HEADATMARKER)
hgs
parents:
diff changeset
    43
    {
36
hgs
parents: 33
diff changeset
    44
        strcpy(callback_string, "XA_PLAYEVENT_HEADATMARKER");
33
hgs
parents:
diff changeset
    45
    }
hgs
parents:
diff changeset
    46
    else if(event & XA_PLAYEVENT_HEADATNEWPOS)
hgs
parents:
diff changeset
    47
    {
36
hgs
parents: 33
diff changeset
    48
        strcpy(callback_string, "XA_PLAYEVENT_HEADATNEWPOS");
33
hgs
parents:
diff changeset
    49
    }
hgs
parents:
diff changeset
    50
    else if(event & XA_PLAYEVENT_HEADSTALLED)
hgs
parents:
diff changeset
    51
    {
36
hgs
parents: 33
diff changeset
    52
        strcpy(callback_string, "XA_PLAYEVENT_HEADSTALLED");
33
hgs
parents:
diff changeset
    53
    }
hgs
parents:
diff changeset
    54
    //LOGFILE (callback_string);
hgs
parents:
diff changeset
    55
}
hgs
parents:
diff changeset
    56
hgs
parents:
diff changeset
    57
COpenMaxPlayerUtility::COpenMaxPlayerUtility()
hgs
parents:
diff changeset
    58
{
hgs
parents:
diff changeset
    59
    Init();
hgs
parents:
diff changeset
    60
}
hgs
parents:
diff changeset
    61
hgs
parents:
diff changeset
    62
COpenMaxPlayerUtility::~COpenMaxPlayerUtility()
hgs
parents:
diff changeset
    63
{
hgs
parents:
diff changeset
    64
    /* Destroy the player */
hgs
parents:
diff changeset
    65
    DestroyPlayer ();
36
hgs
parents: 33
diff changeset
    66
33
hgs
parents:
diff changeset
    67
    /* Destroy Output Mix object */
hgs
parents:
diff changeset
    68
    (*m_outputMix)->Destroy(m_outputMix);
36
hgs
parents: 33
diff changeset
    69
33
hgs
parents:
diff changeset
    70
    /* Shutdown OpenMAX AL */
hgs
parents:
diff changeset
    71
    (*m_engine)->Destroy(m_engine);
hgs
parents:
diff changeset
    72
}
hgs
parents:
diff changeset
    73
hgs
parents:
diff changeset
    74
// Initializes the OpenMAX AL engine and start the playback of some
hgs
parents:
diff changeset
    75
// music from a file and draw the graphical equalizer
hgs
parents:
diff changeset
    76
//
hgs
parents:
diff changeset
    77
void COpenMaxPlayerUtility::Init (void)
hgs
parents:
diff changeset
    78
{
hgs
parents:
diff changeset
    79
    XAresult res;
hgs
parents:
diff changeset
    80
    int i;
hgs
parents:
diff changeset
    81
    XAEngineOption EngineOption[] = {
hgs
parents:
diff changeset
    82
        (XAuint32) XA_ENGINEOPTION_THREADSAFE,
hgs
parents:
diff changeset
    83
        (XAuint32) XA_BOOLEAN_TRUE
hgs
parents:
diff changeset
    84
    };
hgs
parents:
diff changeset
    85
hgs
parents:
diff changeset
    86
    /* Create OpenMAX AL */
36
hgs
parents: 33
diff changeset
    87
   res = xaCreateEngine(&m_engine, 1, EngineOption, 0, NULL, NULL);
33
hgs
parents:
diff changeset
    88
   CheckErr(res, "xaCreateEngine");
hgs
parents:
diff changeset
    89
hgs
parents:
diff changeset
    90
    /* Realizing the XA Engine in synchronous mode. */
36
hgs
parents: 33
diff changeset
    91
   res = (*m_engine)->Realize(m_engine, XA_BOOLEAN_FALSE);
33
hgs
parents:
diff changeset
    92
   CheckErr(res, "Realize(engine)");
hgs
parents:
diff changeset
    93
hgs
parents:
diff changeset
    94
    /* Get the XA Engine Interface which is implicit */
36
hgs
parents: 33
diff changeset
    95
   res = (*m_engine)->GetInterface(m_engine, XA_IID_ENGINE, (void**) &m_EngineItf);
33
hgs
parents:
diff changeset
    96
   CheckErr(res, "GetInterface(engine)");
hgs
parents:
diff changeset
    97
hgs
parents:
diff changeset
    98
    /* Initialize arrays required[] and iidArray[] */
hgs
parents:
diff changeset
    99
    for (i = 0; i < MAX_NUMBER_INTERFACES; i++)
hgs
parents:
diff changeset
   100
    {
hgs
parents:
diff changeset
   101
        m_required[i] = XA_BOOLEAN_FALSE;
hgs
parents:
diff changeset
   102
        m_iidArray[i] = XA_IID_NULL;
hgs
parents:
diff changeset
   103
    }
hgs
parents:
diff changeset
   104
hgs
parents:
diff changeset
   105
    /* Set arrays required[] and iidArray[] for VOLUME and EQUALIZER interfaces */
hgs
parents:
diff changeset
   106
    m_required[0] = XA_BOOLEAN_TRUE;
hgs
parents:
diff changeset
   107
    m_iidArray[0] = XA_IID_VOLUME;
hgs
parents:
diff changeset
   108
    m_required[1] = XA_BOOLEAN_TRUE;
hgs
parents:
diff changeset
   109
    m_iidArray[1] = XA_IID_EQUALIZER;
hgs
parents:
diff changeset
   110
hgs
parents:
diff changeset
   111
    /* Create Output Mix object to be used by player */
36
hgs
parents: 33
diff changeset
   112
    res = (*m_EngineItf)->CreateOutputMix(m_EngineItf, &m_outputMix, 2, m_iidArray, m_required);
33
hgs
parents:
diff changeset
   113
    CheckErr(res, "CreateOutputMix");
hgs
parents:
diff changeset
   114
hgs
parents:
diff changeset
   115
    /* Realizing the Output Mix object in synchronous mode. */
36
hgs
parents: 33
diff changeset
   116
    res = (*m_outputMix)->Realize(m_outputMix, XA_BOOLEAN_FALSE);
33
hgs
parents:
diff changeset
   117
    CheckErr(res, "Realize(outputMix)");
hgs
parents:
diff changeset
   118
hgs
parents:
diff changeset
   119
    /* Get volume and equalizer interfaces */
36
hgs
parents: 33
diff changeset
   120
    res = (*m_outputMix)->GetInterface(m_outputMix, XA_IID_VOLUME, (void**) &m_volumeItf);
33
hgs
parents:
diff changeset
   121
    CheckErr(res, "GetInterface(volume)");
36
hgs
parents: 33
diff changeset
   122
    res = (*m_outputMix)->GetInterface(m_outputMix, XA_IID_EQUALIZER, (void**) &m_equalizerItf);
33
hgs
parents:
diff changeset
   123
    CheckErr(res, "GetInterface(equalizer)");
hgs
parents:
diff changeset
   124
36
hgs
parents: 33
diff changeset
   125
    // Setup the audio sink structure
33
hgs
parents:
diff changeset
   126
    m_locator_outputmix.locatorType = XA_DATALOCATOR_OUTPUTMIX;
hgs
parents:
diff changeset
   127
    m_locator_outputmix.outputMix = m_outputMix;
hgs
parents:
diff changeset
   128
    m_audioSink.pLocator = (void*) &m_locator_outputmix;
hgs
parents:
diff changeset
   129
    m_audioSink.pFormat = NULL;
hgs
parents:
diff changeset
   130
hgs
parents:
diff changeset
   131
    /* Set arrays required[] and iidArray[] for no interfaces (PlayItf is implicit) */
hgs
parents:
diff changeset
   132
    m_required[0] = XA_BOOLEAN_TRUE;
hgs
parents:
diff changeset
   133
    m_iidArray[0] = XA_IID_DYNAMICSOURCE;
hgs
parents:
diff changeset
   134
    m_required[1] = XA_BOOLEAN_FALSE;
hgs
parents:
diff changeset
   135
    m_iidArray[1] = XA_IID_NULL;
hgs
parents:
diff changeset
   136
36
hgs
parents: 33
diff changeset
   137
    // Setup the video sink structure
hgs
parents: 33
diff changeset
   138
    // Set nativeWindowHandle and nativeDisplayHandle to platform specific values
33
hgs
parents:
diff changeset
   139
    XANativeHandle nativeWindowHandle = NULL;
hgs
parents:
diff changeset
   140
    XANativeHandle nativeDisplayHandle = NULL;
36
hgs
parents: 33
diff changeset
   141
33
hgs
parents:
diff changeset
   142
    m_locator_displayregion.locatorType = XA_DATALOCATOR_NATIVEDISPLAY;
hgs
parents:
diff changeset
   143
    m_locator_displayregion.hDisplay = nativeDisplayHandle;
36
hgs
parents: 33
diff changeset
   144
    m_locator_displayregion.hWindow = nativeWindowHandle;
33
hgs
parents:
diff changeset
   145
    m_videoSink.pLocator = (void*) &m_locator_displayregion;
hgs
parents:
diff changeset
   146
    m_videoSink.pFormat = NULL;
hgs
parents:
diff changeset
   147
hgs
parents:
diff changeset
   148
    /* Before we start set volume to -3dB (-300mB) and enable equalizer */
hgs
parents:
diff changeset
   149
    XAmillibel minVol = m_nVolume = XA_MILLIBEL_MIN;
hgs
parents:
diff changeset
   150
    XAmillibel maxVol = 0;
hgs
parents:
diff changeset
   151
    res = (*m_volumeItf)->GetMaxVolumeLevel (m_volumeItf, &maxVol);
hgs
parents:
diff changeset
   152
    CheckErr(res, "GetMaxVolumeLevel");
hgs
parents:
diff changeset
   153
36
hgs
parents: 33
diff changeset
   154
    // before Play, set volume
hgs
parents: 33
diff changeset
   155
    res = (*m_volumeItf)->SetVolumeLevel(m_volumeItf, minVol);
33
hgs
parents:
diff changeset
   156
    CheckErr(res, "SetVolumeLevel");
hgs
parents:
diff changeset
   157
}
hgs
parents:
diff changeset
   158
hgs
parents:
diff changeset
   159
void COpenMaxPlayerUtility::DestroyPlayer ()
hgs
parents:
diff changeset
   160
    {
hgs
parents:
diff changeset
   161
    XAresult res;
hgs
parents:
diff changeset
   162
    XAuint32 playState;
hgs
parents:
diff changeset
   163
    /* Stop the music */
hgs
parents:
diff changeset
   164
    res = (*m_playItf)->GetPlayState(m_playItf, &playState);
hgs
parents:
diff changeset
   165
    CheckErr(res, "GetPlayState");
36
hgs
parents: 33
diff changeset
   166
33
hgs
parents:
diff changeset
   167
    if ( playState != XA_PLAYSTATE_STOPPED )
hgs
parents:
diff changeset
   168
        {
36
hgs
parents: 33
diff changeset
   169
        res = (*m_playItf)->SetPlayState(m_playItf, XA_PLAYSTATE_STOPPED);
33
hgs
parents:
diff changeset
   170
        CheckErr(res, "SetPlayState(stopped)");
hgs
parents:
diff changeset
   171
        }
36
hgs
parents: 33
diff changeset
   172
hgs
parents: 33
diff changeset
   173
    // Destroy the player caused app to crash
33
hgs
parents:
diff changeset
   174
//    (*player)->Destroy(player);
hgs
parents:
diff changeset
   175
    }
hgs
parents:
diff changeset
   176
hgs
parents:
diff changeset
   177
/*
hgs
parents:
diff changeset
   178
* Called when the display is repainted.
hgs
parents:
diff changeset
   179
*/
hgs
parents:
diff changeset
   180
void COpenMaxPlayerUtility::DrawEQDisplay (void)
hgs
parents:
diff changeset
   181
{
hgs
parents:
diff changeset
   182
    XAuint16 numBands;
hgs
parents:
diff changeset
   183
    XAmillibel bandLevel;
hgs
parents:
diff changeset
   184
    XAmillibel minLevel;
hgs
parents:
diff changeset
   185
    XAmillibel maxLevel;
hgs
parents:
diff changeset
   186
    XAmilliHertz minFreq;
hgs
parents:
diff changeset
   187
    XAmilliHertz maxFreq;
hgs
parents:
diff changeset
   188
    int band;
hgs
parents:
diff changeset
   189
    XAresult res;
36
hgs
parents: 33
diff changeset
   190
    res = (*m_equalizerItf)->GetNumberOfBands(m_equalizerItf, &numBands);
33
hgs
parents:
diff changeset
   191
    CheckErr(res, "GetNumberOfBands(equalizerItf)");
36
hgs
parents: 33
diff changeset
   192
    res = (*m_equalizerItf)->GetBandLevelRange(m_equalizerItf, &minLevel, &maxLevel);
33
hgs
parents:
diff changeset
   193
    CheckErr(res, "GetBandLevelRange(equalizerItf)");
hgs
parents:
diff changeset
   194
    for (band = 0; band<numBands; band++)
hgs
parents:
diff changeset
   195
    {
36
hgs
parents: 33
diff changeset
   196
        res = (*m_equalizerItf)->GetBandFreqRange(m_equalizerItf, (XAint16) band, &minFreq, &maxFreq);
33
hgs
parents:
diff changeset
   197
        CheckErr(res, "GetBandFreqRange(equalizerItf)");
36
hgs
parents: 33
diff changeset
   198
        res = (*m_equalizerItf)->GetBandLevel(m_equalizerItf, (XAint16)band, &bandLevel);
33
hgs
parents:
diff changeset
   199
        CheckErr(res, "GetBandLevel(equalizerItf)");
hgs
parents:
diff changeset
   200
 //       drawEQBand(minFreq, maxFreq, bandLevel);
hgs
parents:
diff changeset
   201
    }
hgs
parents:
diff changeset
   202
}
hgs
parents:
diff changeset
   203
hgs
parents:
diff changeset
   204
void COpenMaxPlayerUtility::VideoFrameSize(TSize& /*aSize*/) const
hgs
parents:
diff changeset
   205
{
hgs
parents:
diff changeset
   206
}
hgs
parents:
diff changeset
   207
hgs
parents:
diff changeset
   208
TTimeIntervalMicroSeconds COpenMaxPlayerUtility::Position() const
hgs
parents:
diff changeset
   209
{
hgs
parents:
diff changeset
   210
    return 0;
hgs
parents:
diff changeset
   211
}
hgs
parents:
diff changeset
   212
hgs
parents:
diff changeset
   213
TTimeIntervalMicroSeconds COpenMaxPlayerUtility::Duration() const
hgs
parents:
diff changeset
   214
{
hgs
parents:
diff changeset
   215
    return 0;
hgs
parents:
diff changeset
   216
}
hgs
parents:
diff changeset
   217
hgs
parents:
diff changeset
   218
TInt COpenMaxPlayerUtility::Volume() const
hgs
parents:
diff changeset
   219
    {
hgs
parents:
diff changeset
   220
    return m_nVolume;
hgs
parents:
diff changeset
   221
    }
hgs
parents:
diff changeset
   222
hgs
parents:
diff changeset
   223
TInt COpenMaxPlayerUtility::MaxVolume() const
hgs
parents:
diff changeset
   224
    {
hgs
parents:
diff changeset
   225
    return m_nVolume;
hgs
parents:
diff changeset
   226
    }
hgs
parents:
diff changeset
   227
hgs
parents:
diff changeset
   228
TInt COpenMaxPlayerUtility::Balance()const
hgs
parents:
diff changeset
   229
{
hgs
parents:
diff changeset
   230
    return 0;
hgs
parents:
diff changeset
   231
}
hgs
parents:
diff changeset
   232
hgs
parents:
diff changeset
   233
TVideoRotation COpenMaxPlayerUtility::Rotation() const
hgs
parents:
diff changeset
   234
{
hgs
parents:
diff changeset
   235
    return EVideoRotationNone;
hgs
parents:
diff changeset
   236
}
hgs
parents:
diff changeset
   237
hgs
parents:
diff changeset
   238
void COpenMaxPlayerUtility::SetVolume(TInt aVolume)
hgs
parents:
diff changeset
   239
    {
hgs
parents:
diff changeset
   240
    m_nVolume = aVolume;
36
hgs
parents: 33
diff changeset
   241
    XAresult res = (*m_volumeItf)->SetVolumeLevel(m_volumeItf, (XAmillibel)m_nVolume);
33
hgs
parents:
diff changeset
   242
    CheckErr(res, "SetVolumeL");
hgs
parents:
diff changeset
   243
    }
hgs
parents:
diff changeset
   244
hgs
parents:
diff changeset
   245
void COpenMaxPlayerUtility::SetBalance(TInt /*aBalance*/)
hgs
parents:
diff changeset
   246
    {
hgs
parents:
diff changeset
   247
    }
hgs
parents:
diff changeset
   248
hgs
parents:
diff changeset
   249
void COpenMaxPlayerUtility::SetPosition(const TTimeIntervalMicroSeconds& /*aPosition*/)
hgs
parents:
diff changeset
   250
    {
36
hgs
parents: 33
diff changeset
   251
33
hgs
parents:
diff changeset
   252
    }
hgs
parents:
diff changeset
   253
hgs
parents:
diff changeset
   254
void COpenMaxPlayerUtility::SetRotation(const RWindow& /*aWindow*/, TVideoRotation /*aRotation*/)
hgs
parents:
diff changeset
   255
    {
36
hgs
parents: 33
diff changeset
   256
33
hgs
parents:
diff changeset
   257
    }
hgs
parents:
diff changeset
   258
36
hgs
parents: 33
diff changeset
   259
void COpenMaxPlayerUtility::SetScaleFactor(const RWindow& /*aWindow*/, TReal32 /*aWidthPercentage*/,
33
hgs
parents:
diff changeset
   260
        TReal32 /*aHeightPercentage*/)
hgs
parents:
diff changeset
   261
    {
36
hgs
parents: 33
diff changeset
   262
33
hgs
parents:
diff changeset
   263
    }
hgs
parents:
diff changeset
   264
hgs
parents:
diff changeset
   265
void COpenMaxPlayerUtility::SetAutoScale(const RWindow& /*aWindow*/, TAutoScaleType /*aScaleType*/)
hgs
parents:
diff changeset
   266
    {
36
hgs
parents: 33
diff changeset
   267
33
hgs
parents:
diff changeset
   268
    }
hgs
parents:
diff changeset
   269
hgs
parents:
diff changeset
   270
void COpenMaxPlayerUtility::StepFrame(TInt /*aStep*/)
hgs
parents:
diff changeset
   271
    {
36
hgs
parents: 33
diff changeset
   272
33
hgs
parents:
diff changeset
   273
    }
hgs
parents:
diff changeset
   274
hgs
parents:
diff changeset
   275
void COpenMaxPlayerUtility::OpenFile(const TDesC& aFileName, TUid /*aControllerUid*/)
hgs
parents:
diff changeset
   276
    {
hgs
parents:
diff changeset
   277
    const TUint16 *pFile = aFileName.Ptr();
hgs
parents:
diff changeset
   278
    TInt len = aFileName.Length();
36
hgs
parents: 33
diff changeset
   279
hgs
parents: 33
diff changeset
   280
    if (pFile)
33
hgs
parents:
diff changeset
   281
        {
hgs
parents:
diff changeset
   282
        strcpy((char*)m_sourceName, FILE_EXTN);
hgs
parents:
diff changeset
   283
        len = wcstombs((char*)&m_sourceName[FILE_EXTN_LEN], (const wchar_t *)pFile, len);
hgs
parents:
diff changeset
   284
        m_sourceName[FILE_EXTN_LEN + len] = '\0';
hgs
parents:
diff changeset
   285
        uri.locatorType = XA_DATALOCATOR_URI;
hgs
parents:
diff changeset
   286
        uri.URI = (XAchar*) m_sourceName;
hgs
parents:
diff changeset
   287
        m_mime.formatType = XA_DATAFORMAT_MIME;
hgs
parents:
diff changeset
   288
        m_mime.mimeType = (XAchar *) "audio/ra";
36
hgs
parents: 33
diff changeset
   289
33
hgs
parents:
diff changeset
   290
		//Do we need this here?
hgs
parents:
diff changeset
   291
        PlaySource (uri);
hgs
parents:
diff changeset
   292
        }
hgs
parents:
diff changeset
   293
    }
hgs
parents:
diff changeset
   294
hgs
parents:
diff changeset
   295
void COpenMaxPlayerUtility::OpenUrl(const TDesC& /*aUrl*/)
hgs
parents:
diff changeset
   296
    {
36
hgs
parents: 33
diff changeset
   297
33
hgs
parents:
diff changeset
   298
    }
hgs
parents:
diff changeset
   299
hgs
parents:
diff changeset
   300
void COpenMaxPlayerUtility::Prepare()
hgs
parents:
diff changeset
   301
    {
36
hgs
parents: 33
diff changeset
   302
33
hgs
parents:
diff changeset
   303
    }
hgs
parents:
diff changeset
   304
hgs
parents:
diff changeset
   305
void COpenMaxPlayerUtility::Close()
hgs
parents:
diff changeset
   306
    {
36
hgs
parents: 33
diff changeset
   307
33
hgs
parents:
diff changeset
   308
    }
hgs
parents:
diff changeset
   309
hgs
parents:
diff changeset
   310
void COpenMaxPlayerUtility::Pause()
hgs
parents:
diff changeset
   311
    {
hgs
parents:
diff changeset
   312
    XAresult res;
36
hgs
parents: 33
diff changeset
   313
    res = (*m_playItf)->SetPlayState(m_playItf, XA_PLAYSTATE_PAUSED);
33
hgs
parents:
diff changeset
   314
    CheckErr(res, "SetPlayState(paused)");
hgs
parents:
diff changeset
   315
    }
hgs
parents:
diff changeset
   316
hgs
parents:
diff changeset
   317
void COpenMaxPlayerUtility::Play()
hgs
parents:
diff changeset
   318
    {
hgs
parents:
diff changeset
   319
    XAresult res;
36
hgs
parents: 33
diff changeset
   320
    res = (*m_playItf)->SetPlayState(m_playItf, XA_PLAYSTATE_PLAYING);
33
hgs
parents:
diff changeset
   321
    CheckErr(res, "SetPlayState(playing)");
hgs
parents:
diff changeset
   322
    }
hgs
parents:
diff changeset
   323
hgs
parents:
diff changeset
   324
TInt COpenMaxPlayerUtility::Stop()
hgs
parents:
diff changeset
   325
    {
hgs
parents:
diff changeset
   326
    DestroyPlayer();
hgs
parents:
diff changeset
   327
	  return 0;
hgs
parents:
diff changeset
   328
    }
hgs
parents:
diff changeset
   329
hgs
parents:
diff changeset
   330
void COpenMaxPlayerUtility::AddDisplayWindow(RWsSession& aWs, CWsScreenDevice& /*aScreenDevice*/, RWindow& aWindow)
hgs
parents:
diff changeset
   331
    {
hgs
parents:
diff changeset
   332
    m_locator_displayregion.hDisplay = &aWs; //pointer to RWsSession
hgs
parents:
diff changeset
   333
    m_locator_displayregion.hWindow = &aWindow; //pointer to RWindow
hgs
parents:
diff changeset
   334
    }
hgs
parents:
diff changeset
   335
hgs
parents:
diff changeset
   336
void COpenMaxPlayerUtility::SetWindowClipRect(const RWindow& /*aWindow*/, const TRect& /*aWindowClipRect*/)
hgs
parents:
diff changeset
   337
    {
36
hgs
parents: 33
diff changeset
   338
33
hgs
parents:
diff changeset
   339
    }
hgs
parents:
diff changeset
   340
hgs
parents:
diff changeset
   341
void COpenMaxPlayerUtility::SetVideoExtent(const RWindow& /*aWindow*/, const TRect& /*aVideoExtent*/)
hgs
parents:
diff changeset
   342
    {
36
hgs
parents: 33
diff changeset
   343
33
hgs
parents:
diff changeset
   344
    }
hgs
parents:
diff changeset
   345
hgs
parents:
diff changeset
   346
/* Checks for error. If any errors exit the application! */
hgs
parents:
diff changeset
   347
bool COpenMaxPlayerUtility::CheckErr (XAresult res, char* /*aMsg*/)
hgs
parents:
diff changeset
   348
{
hgs
parents:
diff changeset
   349
    return (res == XA_RESULT_SUCCESS);
hgs
parents:
diff changeset
   350
}
hgs
parents:
diff changeset
   351
hgs
parents:
diff changeset
   352
hgs
parents:
diff changeset
   353
/*
hgs
parents:
diff changeset
   354
* Called by UI when user increases or decreases a band level.
hgs
parents:
diff changeset
   355
*/
hgs
parents:
diff changeset
   356
void COpenMaxPlayerUtility::SetBandLevel(XAint16 band, XAboolean increase)
hgs
parents:
diff changeset
   357
{
hgs
parents:
diff changeset
   358
    XAuint16 numBands;
hgs
parents:
diff changeset
   359
    XAmillibel bandLevel;
hgs
parents:
diff changeset
   360
    XAmillibel minLevel;
hgs
parents:
diff changeset
   361
    XAmillibel maxLevel;
hgs
parents:
diff changeset
   362
    XAresult res;
hgs
parents:
diff changeset
   363
36
hgs
parents: 33
diff changeset
   364
    res = (*m_equalizerItf)->GetNumberOfBands(m_equalizerItf, &numBands);
33
hgs
parents:
diff changeset
   365
    CheckErr(res, "GetNumberOfBands");
hgs
parents:
diff changeset
   366
36
hgs
parents: 33
diff changeset
   367
    res = (*m_equalizerItf)->GetBandLevelRange(m_equalizerItf, &minLevel, &maxLevel);
33
hgs
parents:
diff changeset
   368
    CheckErr(res, "GetBandLevelRange");
hgs
parents:
diff changeset
   369
    if (band >= numBands)
hgs
parents:
diff changeset
   370
    {
hgs
parents:
diff changeset
   371
        /* Error. Insert debug print here. */
hgs
parents:
diff changeset
   372
        exit(0);
hgs
parents:
diff changeset
   373
    }
hgs
parents:
diff changeset
   374
36
hgs
parents: 33
diff changeset
   375
    res = (*m_equalizerItf)->GetBandLevel(m_equalizerItf, band, &bandLevel);
33
hgs
parents:
diff changeset
   376
    CheckErr(res, "GetBandLevel");
hgs
parents:
diff changeset
   377
hgs
parents:
diff changeset
   378
    if (increase==XA_BOOLEAN_TRUE)
hgs
parents:
diff changeset
   379
    {
hgs
parents:
diff changeset
   380
        /* increase the level by 1 dB (100mB) if the max supported level
hgs
parents:
diff changeset
   381
        * is not exceeded */
hgs
parents:
diff changeset
   382
        bandLevel = bandLevel + 100;
hgs
parents:
diff changeset
   383
        if(bandLevel < maxLevel)
hgs
parents:
diff changeset
   384
        {
36
hgs
parents: 33
diff changeset
   385
            res = (*m_equalizerItf)->SetBandLevel(m_equalizerItf, band, bandLevel);
33
hgs
parents:
diff changeset
   386
            CheckErr(res);
hgs
parents:
diff changeset
   387
            DrawEQDisplay();
hgs
parents:
diff changeset
   388
        }
hgs
parents:
diff changeset
   389
    }
hgs
parents:
diff changeset
   390
    else /* increase==false */
hgs
parents:
diff changeset
   391
    {
hgs
parents:
diff changeset
   392
        /* decrease the level by 1 dB (100mB) if the min supported level
hgs
parents:
diff changeset
   393
        * is not crossed */
hgs
parents:
diff changeset
   394
        bandLevel = bandLevel - 100;
hgs
parents:
diff changeset
   395
        if( bandLevel > minLevel )
hgs
parents:
diff changeset
   396
        {
36
hgs
parents: 33
diff changeset
   397
            res = (*m_equalizerItf)->SetBandLevel(m_equalizerItf, band, bandLevel);
33
hgs
parents:
diff changeset
   398
            CheckErr(res);
hgs
parents:
diff changeset
   399
            DrawEQDisplay();
hgs
parents:
diff changeset
   400
        }
hgs
parents:
diff changeset
   401
    }
hgs
parents:
diff changeset
   402
}
hgs
parents:
diff changeset
   403
hgs
parents:
diff changeset
   404
void COpenMaxPlayerUtility::PlaySource(const XADataLocator_URI &source)
hgs
parents:
diff changeset
   405
    {
hgs
parents:
diff changeset
   406
    m_dataSource.pLocator = (void*) &source;
hgs
parents:
diff changeset
   407
    m_dataSource.pFormat = (void*) &m_mime;
hgs
parents:
diff changeset
   408
hgs
parents:
diff changeset
   409
    // Create the music player //
hgs
parents:
diff changeset
   410
    XAresult res;
36
hgs
parents: 33
diff changeset
   411
    res = (*m_EngineItf)->CreateMediaPlayer ( m_EngineItf, &player, &m_dataSource, NULL, &m_audioSink,
hgs
parents: 33
diff changeset
   412
            &m_videoSink, NULL, NULL, 1, m_iidArray, m_required);
33
hgs
parents:
diff changeset
   413
    CheckErr(res, "CreateMediaPlayer");
36
hgs
parents: 33
diff changeset
   414
hgs
parents: 33
diff changeset
   415
    // Realizing the player in synchronous mode.
hgs
parents: 33
diff changeset
   416
    res = (*player)->Realize(player, XA_BOOLEAN_FALSE);
33
hgs
parents:
diff changeset
   417
    CheckErr(res, "Realize(player)");
hgs
parents:
diff changeset
   418
36
hgs
parents: 33
diff changeset
   419
    // Get the play interface
hgs
parents: 33
diff changeset
   420
    res = (*player)->GetInterface(player, XA_IID_PLAY, (void**) &m_playItf);
33
hgs
parents:
diff changeset
   421
    CheckErr(res, "GetInterface(player)");
hgs
parents:
diff changeset
   422
hgs
parents:
diff changeset
   423
/*    XADynamicSourceItf sourceItf;
36
hgs
parents: 33
diff changeset
   424
    res = (*player)->GetInterface(player, XA_IID_DYNAMICSOURCE, (void**) &sourceItf);
33
hgs
parents:
diff changeset
   425
    CheckErr(res, "GetDynamicSource");
hgs
parents:
diff changeset
   426
hgs
parents:
diff changeset
   427
    res = (*sourceItf)->SetSource (sourceItf, &m_dataSource);
hgs
parents:
diff changeset
   428
    CheckErr(res, "SetSource");
hgs
parents:
diff changeset
   429
*/
36
hgs
parents: 33
diff changeset
   430
    // before Play, set volume
hgs
parents: 33
diff changeset
   431
    res = (*m_volumeItf)->SetVolumeLevel(m_volumeItf, m_nVolume);
33
hgs
parents:
diff changeset
   432
    CheckErr(res, "SetVolumeLevel");
hgs
parents:
diff changeset
   433
hgs
parents:
diff changeset
   434
    XAmillisecond playDuration = 0;
36
hgs
parents: 33
diff changeset
   435
    res = (*m_playItf)->GetDuration(m_playItf, &playDuration);
33
hgs
parents:
diff changeset
   436
    bool b = CheckErr(res, "GetDuration");
hgs
parents:
diff changeset
   437
    //if ( b && (playDuration != XA_DURATION_UNKNOWN) )
hgs
parents:
diff changeset
   438
        //SetDurationL ((playDuration/1000));
hgs
parents:
diff changeset
   439
36
hgs
parents: 33
diff changeset
   440
    res = (*m_playItf)->SetCallbackEventsMask(m_playItf, XA_PLAYEVENT_HEADATEND | XA_PLAYEVENT_HEADMOVING);
33
hgs
parents:
diff changeset
   441
    CheckErr(res, "SetCallbackEventsMask");
36
hgs
parents: 33
diff changeset
   442
33
hgs
parents:
diff changeset
   443
    res = (*m_playItf)->RegisterCallback(m_playItf, PlayCallbackFun, this);
hgs
parents:
diff changeset
   444
    CheckErr(res, "RegisterCallback");
hgs
parents:
diff changeset
   445
	//Do we need this here?
hgs
parents:
diff changeset
   446
    Play();
hgs
parents:
diff changeset
   447
    }
hgs
parents:
diff changeset
   448
hgs
parents:
diff changeset
   449
void COpenMaxPlayerUtility::PlayPause(bool bChecked)
hgs
parents:
diff changeset
   450
    {
hgs
parents:
diff changeset
   451
    if (bChecked)
hgs
parents:
diff changeset
   452
        {
hgs
parents:
diff changeset
   453
        Pause();
hgs
parents:
diff changeset
   454
        }
hgs
parents:
diff changeset
   455
    else
hgs
parents:
diff changeset
   456
        {
hgs
parents:
diff changeset
   457
        Play();
hgs
parents:
diff changeset
   458
        }
hgs
parents:
diff changeset
   459
    }
hgs
parents:
diff changeset
   460
hgs
parents:
diff changeset
   461
void COpenMaxPlayerUtility::MuteChanged(bool bChecked)
hgs
parents:
diff changeset
   462
    {
36
hgs
parents: 33
diff changeset
   463
    XAresult res = (*m_volumeItf)->SetMute(m_volumeItf, (XAboolean)bChecked);
33
hgs
parents:
diff changeset
   464
    CheckErr(res, "MuteChanged");
hgs
parents:
diff changeset
   465
    }
hgs
parents:
diff changeset
   466
hgs
parents:
diff changeset
   467
TInt COpenMaxPlayerUtility::SetPlayVelocity( TInt aVelocity )
hgs
parents:
diff changeset
   468
    {
hgs
parents:
diff changeset
   469
    m_Velocity = aVelocity;
hgs
parents:
diff changeset
   470
    return 0;
hgs
parents:
diff changeset
   471
    }