devsound/devsoundrefplugin/src/swcodecwrapper/mmfSwCodecPlayDataPath.h
author hgs
Wed, 13 Oct 2010 12:08:48 +0100
changeset 3 28bdc4aca325
parent 0 79dd3e2336a0
permissions -rw-r--r--
2010wk42_01
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     1
// Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     2
// All rights reserved.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     3
// This component and the accompanying materials are made available
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     4
// under the terms of "Eclipse Public License v1.0"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     5
// which accompanies this distribution, and is available
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     7
//
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     8
// Initial Contributors:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     9
// Nokia Corporation - initial contribution.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    10
//
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    11
// Contributors:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    12
//
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    13
// Description:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    14
//
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    15
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    16
#ifndef __MMFSWCODECPLAYDATAPATH_H__
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    17
#define __MMFSWCODECPLAYDATAPATH_H__
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    18
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    19
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    20
#include "mmfSwCodecDataPath.h"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    21
#include <mmf/server/mmfswcodecwrapper.h>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    22
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    23
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    24
class CMMFSwCodecPlayDataPath; //fwd ref
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    25
class CMMFSwCodecUtility;	// fwd ref
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    26
class MEmptyBuffersCustomInterface;	// fwd ref
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    27
class MSetVbrFlagCustomInterface;	// fwd ref
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    28
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    29
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    30
 * Active object used by the CMMFSwCodecPlayDataPath to send data to the sound
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    31
 * driver  This particular active object encapsulates the asynchronous play 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    32
 * function, where a buffer of data is sent to the WINS audio device, and the
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    33
 * active object's RunL is called when the buffer has been consumed by the 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    34
 * WINS audio device.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    35
 * @internalComponent
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    36
 */
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    37
class CDataPathPlayer : public CActive
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    38
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    39
public:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    40
	CDataPathPlayer(CMMFSwCodecPlayDataPath& aParent, TInt aPriority);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    41
	~CDataPathPlayer();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    42
	void Start();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    43
	void ResumePlaying();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    44
	void PlayData(const CMMFDataBuffer& aData);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    45
	void Stop();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    46
	virtual void RunL();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    47
	virtual TInt RunError(TInt aError);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    48
	virtual void DoCancel();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    49
	virtual void Error(TInt aError);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    50
private:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    51
	CMMFSwCodecPlayDataPath& iParent;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    52
	const CMMFDataBuffer* iDataFromSource;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    53
	TBool iResumePlaying;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    54
	};
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    55
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    56
/*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    57
* Active object used by CMMFSwCodecPlayDataPath to listening for error messages
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    58
* from the WINS audio device.  If this object's RunL is called, playback has 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    59
* been terminated for some reason.  The active object then 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    60
* notifies its parent the datapath, so that proper cleanup and client 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    61
* notification can occur.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    62
* @internalComponent
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    63
*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    64
class CSoundDevPlayErrorReceiver : public CActive
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    65
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    66
public:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    67
	CSoundDevPlayErrorReceiver(CMMFSwCodecPlayDataPath& aParent, TInt aPriority);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    68
	~CSoundDevPlayErrorReceiver();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    69
	void Start();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    70
	void Stop();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    71
	virtual void RunL();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    72
	virtual void DoCancel();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    73
private:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    74
	CMMFSwCodecPlayDataPath& iParent;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    75
	};
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    76
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    77
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    78
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    79
 *  Derived class for play datapath internal to the Sw codec wrapper
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    80
 *  @internalComponent
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    81
 */
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    82
class CMMFSwCodecPlayDataPath : public CMMFSwCodecDataPathX, 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    83
								public MEmptyBuffersCustomInterface, 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    84
								public MSetVbrFlagCustomInterface,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    85
								public MTimePlayedCustomInterface,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    86
								public MIgnoreUnderflowEventsCustomInterface
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    87
	{ 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    88
public:	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    89
	static CMMFSwCodecPlayDataPath* NewL();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    90
	virtual ~CMMFSwCodecPlayDataPath(); 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    91
	virtual TInt SetObserver(MMMFHwDeviceObserver &aHwObserver);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    92
	virtual TInt AddCodec(CMMFSwCodec& aCodec);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    93
	virtual TInt Start();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    94
	virtual void Stop();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    95
	virtual void Pause();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    96
	virtual void BufferFilledL(CMMFDataBuffer& aBuffer);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    97
	virtual void BufferEmptiedL(const CMMFDataBuffer& aBuffer);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    98
	virtual void SoundDeviceException(TInt aError);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    99
	virtual RMdaDevSound& Device();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   100
	virtual void SetPlayCustomInterface(MPlayCustomInterface& aCustomInterface);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   101
	virtual TInt EmptyBuffers();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   102
	virtual TAny* CustomInterface(TUid aInterfaceId);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   103
	//From MSetVbrFlagCustomInterface
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   104
	virtual void SetVbrFlag();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   105
	virtual TInt GetTimePlayed(TTimeIntervalMicroSeconds& aTime);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   106
	virtual void IgnoreUnderflowEvents();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   107
protected:	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   108
	CMMFSwCodecPlayDataPath() {};
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   109
	void ConstructL();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   110
	void FillSourceBufferL();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   111
	void FillSoundDeviceBufferL();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   112
protected: 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   113
	CDataPathPlayer* iAudioPlayer;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   114
	CSoundDevPlayErrorReceiver* iSoundDeviceErrorReceiver;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   115
	RMdaDevSound iSoundDevice;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   116
	CMMFDataBuffer* iSourceBuffer;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   117
	CMMFDataBuffer* iSoundDeviceBuffer;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   118
	TBool iNoMoreSourceData;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   119
	TBool iSinkCanReceive;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   120
	TUint iSourceBufferSize;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   121
	TUint iSoundDevBufferSize;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   122
	CMMFSwCodecUtility* iUtility;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   123
	TBool iRampAudioSample;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   124
	MPlayCustomInterface* iCustomInterface;	// not owned
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   125
	TTimeIntervalMicroSeconds iVolumeRamp;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   126
	// DEF048512
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   127
	TInt iSampleRate;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   128
	TInt iChannels;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   129
	TBool iVbrFlag;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   130
	TInt64 iBytesPlayed;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   131
	TBool iNoMoreSoundDeviceData;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   132
	TBool iIgnoreUnderflow;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   133
	};
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   134
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   135
#endif
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   136