devsound/devsoundrefplugin/src/swcodecwrapper/mmfSwCodecRecordDataPath.h
author hgs
Fri, 08 Oct 2010 19:40:43 +0100
changeset 0 79dd3e2336a0
permissions -rw-r--r--
2010wk36_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 __MMFSWCODECRECORDDATAPATH_H__
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    17
#define __MMFSWCODECRECORDDATAPATH_H__
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    18
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    19
#include "mmfSwCodecDataPath.h"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    20
#include <mmf/server/mmfswcodecwrapper.h>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    21
#include "mmfswaudioinput.h"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    22
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    23
class CMMFSwCodecRecordDataPath; //fwd ref
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    24
class MSetVbrFlagCustomInterface;	// fwd ref
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    25
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    26
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    27
 *  Derived class for record datapath internal to the Sw codec wrapper
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    28
 *  @internalComponent
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    29
 */
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    30
class CMMFSwCodecRecordDataPath : public CMMFSwCodecDataPath,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    31
								  public MSetVbrFlagCustomInterface,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    32
								  public MAudioInputObserver,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    33
								  public MSwSetParamInterface,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    34
								  public MSwInfoInterface
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    35
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    36
	enum TRecordState
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    37
	    {
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    38
	    ERecordStateCreated,                       // note order here is important - see State(), RecordOrPause() etc
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    39
        ERecordStateFailed,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    40
	    ERecordStateRecording,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    41
        ERecordStateSendingBuffer,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    42
        ERecordStateSendingPartialBuffer,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    43
        ERecordStateEmptiedPartialBuffer,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    44
        ERecordStateRecordingPaused,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    45
        ERecordStateSendingBufferPaused,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    46
        ERecordStateSendingPartialBufferPaused,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    47
        ERecordStateEmptiedPartialBufferPaused,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    48
	    };
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    49
public:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    50
	static CMMFSwCodecRecordDataPath* NewL();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    51
	virtual ~CMMFSwCodecRecordDataPath();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    52
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    53
	//From CMMFSwCodecDataPath
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    54
	TInt SetObserver(MMMFHwDeviceObserver &aHwObserver);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    55
	TInt AddCodec(CMMFSwCodec& aCodec);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    56
	TInt Start(); //record
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    57
	void Stop();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    58
	void Pause();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    59
	void BufferFilledL(CMMFDataBuffer& aBuffer);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    60
	void BufferEmptiedL(const CMMFDataBuffer& aBuffer);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    61
	void SoundDeviceException(TInt aError);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    62
	RMdaDevSound& Device();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    63
	TUint RecordedBytesCount();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    64
	TAny* CustomInterface(TUid aInterfaceId);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    65
	TSwCodecDataPathState State() const;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    66
	//From MSetVbrFlagCustomInterface
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    67
	void SetVbrFlag();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    68
	//From MAudioInputObserver
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    69
	void InputBufferAvailable(const TDesC8& aBuffer);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    70
	void InputFinished();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    71
	void InputError(TInt aError);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    72
	//From MSwSetParamInerface
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    73
	TInt SetSampleRate(TInt aSampleRate);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    74
	TInt SetNumChannels(TInt aNumChannels);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    75
	TInt SetGain(TInt aGain);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    76
	TInt GetBufferSizes(TInt& aMinSize, TInt& aMaxSize);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    77
	//From MSwInfoInterface
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    78
	TInt GetSupportedSampleRates(RArray<TInt>& aSupportedSampleRates);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    79
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    80
private:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    81
	CMMFSwCodecRecordDataPath();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    82
	void ConstructL();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    83
	void ProcessBufferL(TBool aLastBuffer);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    84
	TInt EmptyBufferL();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    85
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    86
	TBool RecordOrPause() const;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    87
	TBool IsPaused() const;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    88
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    89
	void RequestCallback();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    90
	TInt DoCallback();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    91
	static TInt Callback(TAny* aPtr);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    92
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    93
	static const TRecordState KResumePauseTable[];
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    94
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    95
private:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    96
	MAudioInput* iAudioInput;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    97
	CMMFDataBuffer* iCodecBuffer;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    98
	const TDesC8*	iInputData;	  // not owned - cache of past data
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    99
	TPtr8			iShadowData;  // need TPtr8
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   100
	TInt 			iInputOffset; // track how much data we've processed from audio input
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   101
	CMMFPtrBuffer* 	iInputBuffer; // select from iInputData
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   102
	CMMFDataBuffer* iSinkBuffer;  // not owned - pointer to buffer to send to client
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   103
	CAsyncCallBack*	iAsyncCallback;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   104
	TInt  iSampleRate;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   105
	TInt  iNumChannels;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   106
	TInt  iGain;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   107
	TUint iSinkBufferSize;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   108
	TUint iAudioInputBufferSize;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   109
	TUint iRecordedBytesCount;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   110
	TBool iVbrFlag;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   111
	TRecordState iState;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   112
    TBool iInputHasFinished; // extension to iState, if we've received InputFinished we don't want to call BufferAck() but signal complete
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   113
	RMdaDevSound iDummyDevSound; // TODO - remove when Device() is removed.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   114
	};
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   115
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   116
#endif
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   117