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