bool S60VideoPlayerSession::getIsSeekable() const
{
    DP0("S60VideoPlayerSession::getIsSeekable +++");

    bool seekable = ETrue;
    int numberOfMetaDataEntries = 0;

    TRAPD(err, numberOfMetaDataEntries = m_player->NumberOfMetaDataEntriesL());
    if (err)
        return seekable;

    for (int i = 0; i < numberOfMetaDataEntries; i++) {
        CMMFMetaDataEntry *entry = NULL;
        TRAP(err, entry = m_player->MetaDataEntryL(i));

        if (err)
            return seekable;

        if (!entry->Name().Compare(KSeekable)) {
            if (!entry->Value().Compare(KFalse))
                seekable = EFalse;
            break;
        }
    }
    DP0("S60VideoPlayerSession::getIsSeekable ---");

    return seekable;
}
void S60VideoPlayerSession::setVideoRenderer(QObject *videoOutput)
{
    DP0("S60VideoPlayerSession::setVideoRenderer +++");
    if (videoOutput != m_videoOutputControl) {
        if (m_videoOutputDisplay) {
            disconnect(m_videoOutputDisplay);
            m_videoOutputDisplay->disconnect(this);
            m_videoOutputDisplay = 0;
        }
        if (videoOutput) {
            if (S60VideoWidgetControl *control = qobject_cast<S60VideoWidgetControl *>(videoOutput))
                m_videoOutputDisplay = control->display();
            if (!m_videoOutputDisplay)
                return;
            m_videoOutputDisplay->setNativeSize(m_nativeSize);
            connect(this, SIGNAL(nativeSizeChanged(QSize)), m_videoOutputDisplay, SLOT(setNativeSize(QSize)));
            connect(m_videoOutputDisplay, SIGNAL(windowHandleChanged(RWindow *)), this, SLOT(windowHandleChanged()));
            connect(m_videoOutputDisplay, SIGNAL(displayRectChanged(QRect, QRect)), this, SLOT(displayRectChanged()));
            connect(m_videoOutputDisplay, SIGNAL(aspectRatioModeChanged(Qt::AspectRatioMode)), this, SLOT(aspectRatioChanged()));
            connect(m_videoOutputDisplay, SIGNAL(rotationChanged(qreal)), this, SLOT(rotationChanged()));
#ifndef VIDEOOUTPUT_GRAPHICS_SURFACES
            connect(m_videoOutputDisplay, SIGNAL(beginVideoWindowNativePaint()), this, SLOT(suspendDirectScreenAccess()));
            connect(m_videoOutputDisplay, SIGNAL(endVideoWindowNativePaint()), this, SLOT(resumeDirectScreenAccess()));
#endif
        }
        m_videoOutputControl = videoOutput;
        windowHandleChanged();
    }

    DP0("S60VideoPlayerSession::setVideoRenderer ---");
}
void S60VideoPlayerSession::setActiveEndpoint(const QString& name)
{
    DP0("S60VideoPlayerSession::setActiveEndpoint +++");

    DP1("S60VideoPlayerSession::setActiveEndpoint - ", name);

#ifdef HAS_AUDIOROUTING_IN_VIDEOPLAYER
    CAudioOutput::TAudioOutputPreference output = CAudioOutput::ENoPreference;
    if (name == DefaultAudioEndpoint)
        output = CAudioOutput::ENoPreference;
    else if (name == QString("All"))
        output = CAudioOutput::EAll;
    else if (name == QString("None"))
        output = CAudioOutput::ENoOutput;
    else if (name == QString("Earphone"))
        output = CAudioOutput::EPrivate;
    else if (name == QString("Speaker"))
        output = CAudioOutput::EPublic;
    if (m_audioOutput) {
        TRAPD(err, m_audioOutput->SetAudioOutputL(output));
        setError(err);
    }
#endif

    DP0("S60VideoPlayerSession::setActiveEndpoint ---");
}
void S60AudioContainerControl::setContainerMimeType(const QString &containerMimeType)
{
    DP0("S60AudioContainerControl::setContainerMimeType +++");

    m_session->setAudioContainer(containerMimeType);

    DP0("S60AudioContainerControl::setContainerMimeType ---");
}
void S60VideoPlayerSession::suspendDirectScreenAccess()
{
    DP0("S60VideoPlayerSession::suspendDirectScreenAccess +++");

    m_dsaStopped = stopDirectScreenAccess();

    DP0("S60VideoPlayerSession::suspendDirectScreenAccess ---");
}
void S60VideoPlayerSession::doPlay()
{
    DP0("S60VideoPlayerSession::doPlay +++");

    m_player->Play();

    DP0("S60VideoPlayerSession::doPlay ---");
}
S60AudioContainerControl::S60AudioContainerControl(QObject *parent)
    : QMediaContainerControl(parent)
{
    DP0("S60AudioContainerControl::S60AudioContainerControl(QObject *parent) +++");

    DP0("S60AudioContainerControl::S60AudioContainerControl(QObject *parent) ---");

}
void S60VideoPlayerSession::MvpuoEvent(const TMMFEvent &aEvent)
{
    DP0("S60VideoPlayerSession::MvpuoEvent +++");

    Q_UNUSED(aEvent);

    DP0("S60VideoPlayerSession::MvpuoEvent ---");
}
void S60VideoPlayerSession::MvloLoadingStarted()
{
    DP0("S60VideoPlayerSession::MvloLoadingStarted +++");

    buffering();

    DP0("S60VideoPlayerSession::MvloLoadingStarted ---");
}
void S60VideoPlayerSession::MvloLoadingComplete()
{
    DP0("S60VideoPlayerSession::MvloLoadingComplete +++");

    buffered();

    DP0("S60VideoPlayerSession::MvloLoadingComplete ---");
}
void S60VideoPlayerSession::doPauseL()
{
    DP0("S60VideoPlayerSession::doPauseL +++");

    m_player->PauseL();

    DP0("S60VideoPlayerSession::doPauseL ---");
}
void S60VideoPlayerSession::displayRectChanged()
{
    DP0("S60VideoPlayerSession::displayRectChanged +++");

    m_pendingChanges |= DisplayRect;
    applyPendingChanges();

    DP0("S60VideoPlayerSession::displayRectChanged ---");
}
void S60VideoPlayerSession::windowHandleChanged()
{
    DP0("S60VideoPlayerSession::windowHandleChanged +++");

    m_pendingChanges |= WindowHandle;
    applyPendingChanges();

    DP0("S60VideoPlayerSession::windowHandleChanged ---");
}
S60AudioContainerControl::S60AudioContainerControl(QObject *session, QObject *parent)
   : QMediaContainerControl(parent)
{
    DP0("S60AudioContainerControl::S60AudioContainerControl(QObject *session, QObject *parent) +++");

    m_session = qobject_cast<S60AudioCaptureSession*>(session);

    DP0("S60AudioContainerControl::S60AudioContainerControl(QObject *session, QObject *parent) ---");
}
void S60VideoPlayerSession::MvpuoFrameReady(CFbsBitmap &aFrame, TInt aError)
{
    DP0("S60VideoPlayerSession::MvpuoFrameReady +++");

    Q_UNUSED(aFrame);
    Q_UNUSED(aError);

    DP0("S60VideoPlayerSession::MvpuoFrameReady ---");
}
void S60VideoPlayerSession::aspectRatioChanged()
{
    DP0("S60VideoPlayerSession::aspectRatioChanged +++");

    m_pendingChanges |= ScaleFactors;
    applyPendingChanges();

    DP0("S60VideoPlayerSession::aspectRatioChanged ---");
}
void S60VideoPlayerSession::doSetVolumeL(int volume)
{
    DP0("S60VideoPlayerSession::doSetVolumeL +++");

    DP1("S60VideoPlayerSession::doSetVolumeL - ", volume);

    m_player->SetVolumeL(volume * m_player->MaxVolume() / 100);

    DP0("S60VideoPlayerSession::doSetVolumeL ---");
}
void S60VideoPlayerSession::doSetAudioEndpoint(const QString& audioEndpoint)
{
    DP0("S60VideoPlayerSession::doSetAudioEndpoint +++");

    DP1("S60VideoPlayerSession::doSetAudioEndpoint - ", audioEndpoint);

    m_audioEndpoint = audioEndpoint;

    DP0("S60VideoPlayerSession::doSetAudioEndpoint ---");
}
void S60VideoPlayerSession::DefaultAudioOutputChanged( CAudioOutput& aAudioOutput,
        CAudioOutput::TAudioOutputPreference aNewDefault)
{
    DP0("S60VideoPlayerSession::DefaultAudioOutputChanged +++");

    // Emit already implemented in setActiveEndpoint function
    Q_UNUSED(aAudioOutput)
    Q_UNUSED(aNewDefault)

    DP0("S60VideoPlayerSession::DefaultAudioOutputChanged ---");
}
void S60VideoPlayerSession::doStop()
{
    DP0("S60VideoPlayerSession::doStop +++");

    if (m_stream)
        m_networkAccessControl->resetIndex();

    m_player->Stop();

    DP0("S60VideoPlayerSession::doStop ---");
}
void S60VideoPlayerSession::resumeDirectScreenAccess()
{
    DP0("S60VideoPlayerSession::resumeDirectScreenAccess +++");

    if (!m_dsaStopped)
        return;
    startDirectScreenAccess();
    m_dsaStopped = false;

    DP0("S60VideoPlayerSession::resumeDirectScreenAccess ---");
}
void S60VideoPlayerSession::startDirectScreenAccess()
{
    DP0("S60VideoPlayerSession::startDirectScreenAccess +++");

    if (m_dsaActive)
        return;
    TRAPD(err, m_player->StartDirectScreenAccessL());
    if (err == KErrNone)
        m_dsaActive = true;
    setError(err);

    DP0("S60VideoPlayerSession::startDirectScreenAccess ---");
}
S60VideoPlayerSession::~S60VideoPlayerSession()
{
    DP0("S60VideoPlayerSession::~S60VideoPlayerSession +++");
    S60VideoPlayerEventHandler::instance()->removeApplicationFocusObserver(this);
#ifdef HAS_AUDIOROUTING_IN_VIDEOPLAYER
    if (m_audioOutput)
        m_audioOutput->UnregisterObserver(*this);
    delete m_audioOutput;
#endif
    m_player->Close();
    delete m_player;

    DP0("S60VideoPlayerSession::~S60VideoPlayerSession ---");
}
void S60VideoPlayerSession::MvpuoPlayComplete(TInt aError)
{
    DP0("S60VideoPlayerSession::MvpuoPlayComplete +++");

    DP1("S60VideoPlayerSession::MvpuoPlayComplete - aError", aError);

    if (m_stream)
        m_networkAccessControl->resetIndex();

    endOfMedia();
    setError(aError);

    DP0("S60VideoPlayerSession::MvpuoPlayComplete ---");
}
S60MediaPlayerAudioEndpointSelector::S60MediaPlayerAudioEndpointSelector(QObject *control, QObject *parent)
   :QAudioEndpointSelector(parent)
    , m_control(0)
{
    DP0("S60MediaPlayerAudioEndpointSelector::S60MediaPlayerAudioEndpointSelector +++");

    m_control = qobject_cast<S60MediaPlayerControl*>(control);
    m_audioEndpointNames.append("Default");
    m_audioEndpointNames.append("All");
    m_audioEndpointNames.append("None");
    m_audioEndpointNames.append("Earphone");
    m_audioEndpointNames.append("Speaker");

    DP0("S60MediaPlayerAudioEndpointSelector::S60MediaPlayerAudioEndpointSelector ---");
}
void S60VideoPlayerSession::doLoadL(const TDesC &path)
{
    DP0("S60VideoPlayerSession::doLoadL +++");

#ifdef HAS_AUDIOROUTING_IN_VIDEOPLAYER
    // m_audioOutput needs to be reinitialized after MapcInitComplete
    if (m_audioOutput)
        m_audioOutput->UnregisterObserver(*this);
    delete m_audioOutput;
    m_audioOutput = NULL;
#endif
    m_player->OpenFileL(path, KHelixUID);

    DP0("S60VideoPlayerSession::doLoadL ---");
}
void S60VideoPlayerSession::MvpuoOpenComplete(TInt aError)
{
    DP0("S60VideoPlayerSession::MvpuoOpenComplete +++");

    DP1("S60VideoPlayerSession::MvpuoOpenComplete - aError:", aError);

    setError(aError);
    if (KErrNone == aError)
        m_player->Prepare();

    const TMMFMessageDestinationPckg dest( KUidInterfaceMMFROPController );
    TRAP_IGNORE(m_player->CustomCommandSync(dest, KMMFROPControllerEnablePausedLoadingStatus, KNullDesC8, KNullDesC8));

    DP0("S60VideoPlayerSession::MvpuoOpenComplete ---");
}
// -----------------------------------------------------------------------------
// CMP3AudioPlayControllerPlugin::DoReadHeaderL
// -----------------------------------------------------------------------------
//
void CMP3AudioPlayControllerPlugin::DoReadHeaderL(CMMFDataBuffer* aBuffer)
    {
    DP0(_L("CMP3AudioPlayControllerPlugin::DoReadHeaderL"));

    iAudioUtility->ScanHeaderL(aBuffer);

    iHeaderOffset = iAudioUtility->HeaderOffset();
    iSyncOffset = iAudioUtility->SyncOffset();
    iSampleRate = iAudioUtility->SampleRate();
    iSinkSampleRate = iSampleRate; // Default same as source
//    iBitRate = iAudioUtility->BitRate();
//    iDuration = iAudioUtility->Duration();
    iChannels = iAudioUtility->Channels();
//    iSinkNumChannels = iChannels; // Default same as source
//    iSinkNumChannels = iAudioUtility->ChannelsOut();
    iDataType = TFourCC(' ','M','P','3');
    
    if (!(iChannels == 1 || iChannels == 2))
        {
        User::Leave(KErrNotSupported);
        }
    
//    iCurrentPosition = iHeaderOffset;
//    iReadHeader = EFalse;
    }
// -----------------------------------------------------------------------------
// CMP3AudioPlayControllerPlugin::DoAddDataSourceL
// Initialization of Clip properties. We build a table needed for positioning.
// -----------------------------------------------------------------------------
//
void CMP3AudioPlayControllerPlugin::DoAddDataSourceL()
    {
    DP0(_L("CMP3AudioPlayControllerPlugin::DoAddDataSourceL"));
    // ou1cimx1#205863
    if (iSourceType != KUidMmfFileSource) 
    	{
	    DP0(_L("CMP3AudioPlayControllerPlugin::DoAddDataSourceL not file source"));        
	    if (iSharedBufferMaxNum <= 2)
	        {
	        	iSharedBufferMaxNum = 3;
	        }
		 iSharedBufferMaxSize = iSharedBufferMaxSizeForNonSeekableSrc;
	    DP2(_L("CMP3AudioPlayControllerPlugin::DoAddDataSourceL new iSharedBufferMaxNum[%d] iSharedBufferMaxSize[%d]"), iSharedBufferMaxNum, iSharedBufferMaxSize);
    	}

    }
QString S60VideoPlayerSession::activeEndpoint() const
{
    DP0("S60VideoPlayerSession::activeEndpoint +++");

    QString outputName = m_audioEndpoint;
#ifdef HAS_AUDIOROUTING_IN_VIDEOPLAYER
    if (m_audioOutput) {
        CAudioOutput::TAudioOutputPreference output = m_audioOutput->AudioOutput();
        outputName = qStringFromTAudioOutputPreference(output);
    }
#endif

    DP1("S60VideoPlayerSession::activeEndpoint- outputName:", outputName);
    DP0("S60VideoPlayerSession::activeEndpoint ---");
    return outputName;
}