mmlibs/mmfw/inc/mmf/server/mmfformat.h
author hgs
Tue, 02 Nov 2010 12:28:51 +0000
changeset 6 fe9d1bf55678
parent 0 b8ed18f6c07b
permissions -rw-r--r--
2010wk46_02
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     1
// Copyright (c) 2001-2009 Nokia Corporation and/or its subsidiary(-ies).
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     2
// All rights reserved.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     3
// This component and the accompanying materials are made available
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     4
// under the terms of "Eclipse Public License v1.0"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     5
// which accompanies this distribution, and is available
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     7
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     8
// Initial Contributors:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     9
// Nokia Corporation - initial contribution.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    10
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    11
// Contributors:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    12
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    13
// Description:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    14
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    15
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    16
#ifndef __MMF_SERVER_FORMAT_H__
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    17
#define __MMF_SERVER_FORMAT_H__
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    18
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    19
#include <mmf/server/mmfdatasink.h>
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    20
#include <mmf/server/mmfdatasource.h>
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    21
#include <ecom/ecom.h>
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    22
#include <mmf/plugin/mmfplugininterfaceuids.hrh>
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    23
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    24
const TUint KMMFFormatDefaultFrameSize = 0x1000;  //4K
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    25
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    26
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    27
@publishedAll
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    28
@released
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    29
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    30
Base class from which source formats can be derived from. The intended usage is for controllers that can support more
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    31
than one type of format. The class is an MDataSource as far as the data path is concerned but is an MDataSink to the clip
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    32
that is the source of the actual data.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    33
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    34
All CMMFFormatDecode plugin DLLs must include interface_uid = KMmfUidPluginInterfaceFormatDecode in their .rss files.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    35
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    36
class CMMFFormatDecode : public CBase, public MDataSource, public MDataSink
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    37
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    38
public:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    39
	// ECOM creation.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    40
	IMPORT_C static CMMFFormatDecode* NewL( TUid aUid, MDataSource* aSource );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    41
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    42
	IMPORT_C static CMMFFormatDecode* NewL( const TDesC& aFileName, MDataSource* aSource, const TDesC& aPreferredSupplier ) ;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    43
	IMPORT_C static CMMFFormatDecode* NewL( const TDesC8& aSourceHeader,  MDataSource* aSource, const TDesC& aPreferredSupplier ) ;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    44
	IMPORT_C static CMMFFormatDecode* NewL( MDataSource* aSource, const TDesC& aPreferredSupplier ) ;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    45
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    46
	IMPORT_C static CMMFFormatDecode* NewL( const TDesC& aFileName, MDataSource* aSource, const TDesC& aPreferredSupplier, TBool& aSupportsCustomInterfaces ) ;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    47
	IMPORT_C static CMMFFormatDecode* NewL( const TDesC8& aSourceHeader,  MDataSource* aSource, const TDesC& aPreferredSupplier, TBool& aSupportsCustomInterfaces ) ;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    48
	IMPORT_C static CMMFFormatDecode* NewL( MDataSource* aSource, const TDesC& aPreferredSupplier, TBool& aSupportsCustomInterfaces ) ;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    49
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    50
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    51
	Destructor.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    52
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    53
	virtual ~CMMFFormatDecode()  {REComSession::DestroyedImplementation(iDtor_ID_Key);};
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    54
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    55
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    56
	Returns the ECom plugin UID of this format.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    57
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    58
	@return The plugin UID.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    59
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    60
	TUid ImplementationUid() const {return iImplementationUid;}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    61
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    62
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    63
	Gets the number of streams of the specified media type.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    64
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    65
	This is a virtual function that each derived class must implement.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    66
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    67
	@param  aMediaType
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    68
	        The UID of the media type, for example KUidMediaTypeAudio or KUidMediaTypeVideo.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    69
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    70
	@return	The number of streams of multimedia data in the format for the specified media type.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    71
	        For example, for a WAV or mp3 audio file this procedure would return 1 for a media
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    72
	        type of audio and 0 for a media type of video. More complex multimedia formats (for
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    73
	        example AVI and mp4) can support multiple streams of both video and audio.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    74
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    75
	virtual TUint Streams(TUid aMediaType) const = 0;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    76
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    77
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    78
	Returns the time interval for one frame for the specified media type.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    79
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    80
	This is a virtual function that each derived class must implement.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    81
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    82
	In the case of video, a frame would usually be one frame of video. In the case of
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    83
	audio, a frame may correspond to a frame of audio, if the particular audio data type
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    84
	is framed eg mp3. There are two definitions of a frame. A format frame, which may
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    85
	consist of several frames of a particular framed audio data type. This may be the case,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    86
	for example for GSM610 (a low quality audio data type used in telephony) where a frame
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    87
	is only 65 bytes large. In this case a format frame consists of several GSM610 data type
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    88
	frames as passing the data out 65 bytes at a time would be inefficient. In the case of
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    89
	non-framed data such as pcm, a frame can be an arbitrary size determined by the format plugin.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    90
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    91
	@param  aMediaType
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    92
	        The media type id.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    93
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    94
	@return	The frame time interval
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    95
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    96
	virtual TTimeIntervalMicroSeconds FrameTimeInterval(TMediaId aMediaType) const = 0;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    97
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    98
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    99
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   100
	Returns the duration of the clip for the specified media type.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   101
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   102
	This is a virtual function that each derived class must implement.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   103
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   104
	@param  aMediaType
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   105
	        The media type ID.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   106
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   107
	@return The duration of the clip.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   108
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   109
	virtual TTimeIntervalMicroSeconds Duration(TMediaId aMediaType) const = 0;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   110
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   111
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   112
	Request from CMMFDataPath to fill the specified buffer.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   113
	The CMMFFormat needs to break this down into one or more reads from the clip
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   114
	(from MDataSource - CMMFFormatDecode is a MDataSource to a CMMFDataPath consumer).
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   115
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   116
	This is a virtual function that each derived class must implement.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   117
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   118
	This method is the means by which data is obtained from the data source. aBuffer is
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   119
	the buffer that needs filling from the source data stream as identified by aMediaId. The
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   120
	format should read the frame number of the buffer via the buffer's CMMFBuffer::FrameNumber()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   121
	method. From this the format should be able to determine the actual position of the data on
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   122
	the data source. The technique here depends on the nature of the format. For a linear audio
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   123
	format, the position can be obtained by a simple calculation of the frame size, the header size
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   124
	and where appropriate the datatype.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   125
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   126
	For non-linear formats either an index table of frame number and location will need to be
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   127
	created in the NewL() or some form of approximating algorithm will be required. Some formats have
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   128
	an index table as part of the format e.g. AVI. If no random access is required then no index table
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   129
	is required, the format can keep track of the current read position and increment it on each access,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   130
	and reset it if the frame number is reset to 0 or 1. Given that for non-linear i.e. variable bit rate
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   131
	formats, the size of the data read may vary from frame to frame, then the format should either set
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   132
	the request size of the buffer for the required frame or call the source's ReadBufferL() (either
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   133
	CMMFClip::ReadBufferL(), CMMFDescriptor ::ReadBufferL() or CMMFFile::ReadBufferL()) function that
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   134
	takes the aLength parameter.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   135
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   136
	It is the responsibility of the format decode to determine the size and position of the source data
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   137
	for each frame. For linear audio formats, the format decode should fill the buffer up to its maximum
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   138
	length. For multimedia formats e.g. mp4, AVI etc, the format decode is effectively acting as a demultiplexor,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   139
	and must obtain the appropriate data from the source depending on the aMediaId.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   140
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   141
	@param  aBuffer
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   142
	        The buffer to fill.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   143
	@param  aConsumer
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   144
	        The consumer.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   145
	@param  aMediaId
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   146
	        The media type ID.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   147
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   148
	virtual void FillBufferL(CMMFBuffer* aBuffer, MDataSink* aConsumer, TMediaId aMediaId)=0;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   149
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   150
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   151
	@internalAll
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   152
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   153
	Indicates data has been added to the file.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   154
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   155
	@param  aBuffer
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   156
	        The emptied buffer.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   157
    */
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   158
	inline virtual void BufferEmptiedL(CMMFBuffer* aBuffer);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   159
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   160
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   161
	Tests whether a source buffer can be created.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   162
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   163
	The format knows what type of source buffer it requires so default returns ETrue.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   164
	It doesn't usually need to set the size of this buffer.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   165
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   166
	@return	A boolean indicating whether a buffer can be created. ETrue if the buffer can be created,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   167
	        EFalse otherwise.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   168
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   169
	virtual TBool CanCreateSourceBuffer() {return ETrue;}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   170
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   171
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   172
	Creates a source buffer.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   173
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   174
	This is a virtual function that each derived class must implement.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   175
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   176
	This function should create a buffer of length 0, the maximum length should be equal to the maximum
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   177
	possible frame size. In the case of non framed data it should be set to an arbitrary size, which is
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   178
	effectively a trade off between being too small which will affect performance as more source reads
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   179
	are required, and being too large which will give very coarse positioning granularity. For pcm data,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   180
	a buffer size of 4K is a good compromise. The same compromise also applies when deciding to put multiple
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   181
	audio frames into one format frame. The sink buffer size may also effect the format buffer size and
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   182
	the controller may use this to suggest a buffer size to the format by calling the format's SuggestSourceBufferSize()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   183
	method. Alternatively the MDataSource::CreateSourceBufferL() function that takes the additional aSinkBuffer
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   184
	parameter may also be used when deciding the source buffer maximum size of the created source buffer.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   185
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   186
	@param  aMediaId
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   187
	        The media type ID.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   188
	@param  aReference
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   189
	        If ETrue the MDataSource owns the buffer. If EFalse, then the caller owns the buffer. This
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   190
	        should normally be set to EFalse as format plugins do not create the reference buffer.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   191
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   192
	@return The created source buffer.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   193
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   194
	virtual CMMFBuffer* CreateSourceBufferL(TMediaId aMediaId, TBool &aReference)=0;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   195
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   196
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   197
	Returns the source data type code for the specified media type ID.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   198
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   199
	Used by the CMMFDataPath for codec matching.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   200
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   201
	This is a virtual function that each derived class must implement.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   202
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   203
	@param  aMediaId
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   204
	        The media type ID.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   205
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   206
	@return The source data type code.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   207
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   208
	virtual TFourCC SourceDataTypeCode(TMediaId aMediaId)=0;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   209
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   210
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   211
	@internalAll
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   212
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   213
    Adds a buffer to a clip.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   214
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   215
	@param  aBuffer
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   216
	        The buffer to which the clip is added.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   217
	@param  aSupplier
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   218
	        The data source.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   219
	@param  aMediaId
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   220
	        The Media ID.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   221
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   222
	inline virtual void EmptyBufferL(CMMFBuffer* aBuffer, MDataSource* aSupplier, TMediaId aMediaId);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   223
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   224
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   225
	Indicates the data source has filled the buffer.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   226
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   227
	Called by the CMMFFormat's MDataSource when it has filled the buffer.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   228
	The default implementation below would need overriding in cases where multiple
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   229
	clip reads were required to fill the buffer from the data path.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   230
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   231
	@param  aBuffer
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   232
	        The buffer to which the clip is added.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   233
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   234
	virtual void BufferFilledL(CMMFBuffer* aBuffer) {iDataPath->BufferFilledL(aBuffer);}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   235
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   236
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   237
	Tests whether a sink buffer can be created.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   238
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   239
	Format would normally pass its own buffer onto the CMMFClip, so
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   240
	this may not be required. The default returns EFalse.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   241
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   242
	@return A boolean indicating if the sink buffer can be created. ETrue if buffer can be created, EFalse otherwise.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   243
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   244
	virtual TBool CanCreateSinkBuffer() {return EFalse;}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   245
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   246
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   247
	Creates a sink buffer for the specified media ID. The default version returns NULL.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   248
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   249
	@param  aMediaId
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   250
	        The media type ID.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   251
	@param  aReference
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   252
	        If ETrue the MDataSink owns the buffer.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   253
	        If EFalse, then the caller owns the buffer.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   254
	@return The CMMFBuffer sink buffer.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   255
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   256
	inline virtual CMMFBuffer* CreateSinkBufferL(TMediaId aMediaId, TBool &aReference);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   257
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   258
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   259
	Returns the sink data type code for the specified media type ID.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   260
	This would be the same as the source data type four CC although
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   261
	the clip is not going to need this info.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   262
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   263
	@param  aMediaId
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   264
	        The media type id.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   265
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   266
	@return The sink data type code.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   267
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   268
	inline virtual TFourCC SinkDataTypeCode(TMediaId aMediaId);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   269
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   270
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   271
	Gets the number of meta data entries.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   272
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   273
	Meta Data support. The decode format is only capable of reading meta data entries from the clip.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   274
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   275
	This is an optional method, used to return the number of meta data entries present in the format.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   276
	A meta data entry is a format-specific field such as authorship, copyright, security details etc.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   277
	The function is optional as many formats do not provide support for such additional meta data fields.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   278
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   279
	The default leaves with KErrNotSupported.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   280
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   281
	@param  aNumberOfEntries
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   282
	        A reference to the number of meta data entries supported by the format. On return, contains
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   283
	        the number of meta data entries.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   284
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   285
	inline virtual void GetNumberOfMetaDataEntriesL(TInt& aNumberOfEntries);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   286
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   287
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   288
	Returns the specified meta data entry.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   289
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   290
	This method is optional as many formats do not provide support for such additional meta data fields.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   291
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   292
	The default leaves with KErrNotSupported.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   293
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   294
	@param  aIndex
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   295
	        The zero based meta data entry index to retrieve.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   296
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   297
	@return The meta data entry.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   298
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   299
	inline virtual CMMFMetaDataEntry* MetaDataEntryL(TInt aIndex);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   300
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   301
	//audio format methods
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   302
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   303
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   304
	Sets the number of channels.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   305
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   306
	The default returns KErrNotSupported.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   307
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   308
	There would normally be no need to override this function as the format decode plugin can normally
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   309
	determine for itself the number of channels. It is only necessary to override this in cases where the
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   310
	format decode plugin cannot determine for itself the number of channels.  This function should not be
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   311
	used if the audio clip already exists; that is, in the "Open and Append" scenario, when the function's
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   312
	behaviour is undefined.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   313
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   314
	@param  aChannels
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   315
	        The number of channels.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   316
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   317
	@return An error code indicating if the function call was successful. KErrNone on success, otherwise
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   318
            another of the system-wide error codes.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   319
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   320
	inline virtual TInt SetNumChannels(TUint aChannels);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   321
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   322
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   323
	Sets the sample rate.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   324
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   325
	The default implementation returns KErrNotSupported.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   326
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   327
	There would normally be no need to override this function as the format decode can normally determine
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   328
	the sample rate for itself. It is only necessary to override this in cases where the format decode plugin
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   329
	cannot determine for itself the sample rate.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   330
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   331
	@param  aSampleRate
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   332
	        The sample rate.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   333
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   334
	@return An error code indicating if the function call was successful. KErrNone on success, otherwise
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   335
	        another of the system-wide error codes.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   336
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   337
	inline virtual TInt SetSampleRate(TUint aSampleRate);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   338
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   339
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   340
	Sets the bit rate.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   341
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   342
	The default implementation returns KErrNotSupported.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   343
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   344
	This method is mainly provided for variable bit rate formats, such as mp3, where the bit rate can
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   345
	not be directly calculated from the sample rate. There would normally be no need to override this
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   346
	function as the format decode can normally determine the sample rate for itself. It is only necessary
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   347
	to override this in cases where the format decode plugin cannot determine for itself the sample rate.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   348
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   349
	@param aBitRate
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   350
	       The bit rate in bits per second.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   351
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   352
	@return An error code indicating if the function call was successful. KErrNone on success, otherwise
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   353
	        another of the system-wide error codes.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   354
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   355
	inline virtual TInt SetBitRate(TUint aBitRate);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   356
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   357
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   358
	Returns the number of channels.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   359
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   360
	The default implementation returns 0.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   361
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   362
	@return	The number of channels.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   363
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   364
	virtual TUint NumChannels() {return 0;}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   365
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   366
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   367
	Gets the sample rate.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   368
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   369
	The default implementation returns 0.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   370
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   371
	@return The sample rate.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   372
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   373
	virtual TUint SampleRate() {return 0;}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   374
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   375
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   376
	Gets the bit rate.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   377
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   378
	The default implementation returns 0.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   379
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   380
	This method is mainly provided for variable bit rate formats, such as mp3, where the bit rate 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   381
	can not be directly calculated from the sample rate. This function needs overriding for any format 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   382
	decode that supports audio.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   383
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   384
	@return The bit rate.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   385
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   386
	virtual TUint BitRate() {return 0;}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   387
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   388
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   389
	Gets the supported sample rates.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   390
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   391
	The default implementation leaves with KErrNotSupported.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   392
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   393
	This should return an array of sample rates supported by the format where applicable. Note 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   394
	that this refers to the possible sample rates supported by the format, not the actual sample rate,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   395
	which will be one of the supported sample rates. The implementation of this function is optional.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   396
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   397
	@param  aSampleRates
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   398
	        Reference to an array of supported sample rates.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   399
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   400
	inline virtual void GetSupportedSampleRatesL(RArray<TUint>& aSampleRates);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   401
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   402
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   403
	Gets the supported bit rates.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   404
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   405
	The default leaves with KErrNotSupported.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   406
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   407
	This should return an array of bit rates supported by the format where applicable. Note that this
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   408
	refers to the possible bit rates supported by the format, not the actual bit rate, which will be
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   409
	one of the supported bit rates. The implementation of this function is optional.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   410
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   411
	@param  aBitRates
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   412
	        Reference to an array of supported bit rates.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   413
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   414
	inline virtual void GetSupportedBitRatesL(RArray<TUint>& aBitRates);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   415
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   416
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   417
	Gets the supported number of channels.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   418
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   419
	The default leaves with KErrNotSupported.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   420
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   421
	The implementation of this procedure should return an array of channels supported by the format
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   422
	where applicable. Note that this refers to the possible number of channels supported by the format,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   423
	not the actual number of channels, which will be one of the supported channels. For example, for a
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   424
	format decode plugin capable of supporting mono and stereo the procedure would return an array of
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   425
	length two the first array member containing the value 1 and the second containing the value 2. The
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   426
	implementation of this function is optional.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   427
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   428
	@param  aNumChannels
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   429
	        A reference to an array of supported number of channels.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   430
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   431
	inline virtual void GetSupportedNumChannelsL(RArray<TUint>& aNumChannels);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   432
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   433
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   434
	Gets the supported data types for the given media type id.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   435
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   436
	The default leaves with KErrNotSupported.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   437
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   438
    The implementation of this procedure should return an array of data types supported by the format where
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   439
	applicable. Note that this refers to the possible data types that may be supported by the format, not the
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   440
	actual data type of the format, which will be one of the supported data types. For example, for a format
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   441
	decode plugin capable of supporting pcm16 and GSM610 the procedure would return an array of length two the
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   442
	first array member containing the fourCC code ' P16' and the second containing the value GSM6. The
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   443
	implementation of this function is optional.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   444
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   445
	@param  aMediaId
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   446
	        The media type id.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   447
	@param  aDataTypes
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   448
	        A reference to an array of supported data types.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   449
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   450
	inline virtual void GetSupportedDataTypesL(TMediaId aMediaId, RArray<TFourCC>& aDataTypes);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   451
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   452
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   453
	Used by the sink to suggest a source buffer size.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   454
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   455
	This is an optional function provided so that a controller can suggest a buffer
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   456
	size for the format. The controller should not assume that the format will accept
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   457
	the suggested buffer size and there is no obligation on behalf of the format to
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   458
	use the suggested buffer size.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   459
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   460
	@param  aSuggestedBufferSize
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   461
	        A recommended buffer size that the format should create.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   462
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   463
	inline virtual void SuggestSourceBufferSize(TUint aSuggestedBufferSize);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   464
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   465
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   466
	Used to set the format's position.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   467
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   468
	Subsequent data reads should ignore the FrameNumber in the CMMFBuffer and use this
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   469
	setting to determine what data to provide.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   470
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   471
	The actual position the format sets itself may vary from this setting to ensure
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   472
	that it is aligned to the sample boundaries ensuring consistent data output.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   473
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   474
	If not supported, positional information should be extracted from the FrameNumber in CMMFBuffer
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   475
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   476
	@param  aPosition
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   477
	        The position the format should use.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   478
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   479
    inline virtual void SetPositionL(const TTimeIntervalMicroSeconds& aPosition);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   480
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   481
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   482
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   483
	Supplies the current position.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   484
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   485
	Subsequent data reads will commence from this position.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   486
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   487
	@return The current position in microseconds.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   488
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   489
	virtual TTimeIntervalMicroSeconds PositionL() {User::Leave(KErrNotSupported);return TTimeIntervalMicroSeconds(0);}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   490
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   491
protected:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   492
	//ConstructSourceL should never be called. The CMMFFormatDecode NewL functions should
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   493
	//always be used to instantiate a CMMFFormatDecode object (not MDataSource::NewL)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   494
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   495
	@internalAll
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   496
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   497
	virtual void ConstructSourceL( const TDesC8& /*aInitData*/ ) {User::Leave(KErrNotSupported);}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   498
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   499
	//ConstructSinkL should never be called. The CMMFFormatDecode NewL functions should
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   500
	//always be used to instantiate a CMMFFormatDecode object (not MDataSink::NewL)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   501
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   502
	@internalAll
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   503
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   504
	virtual void ConstructSinkL( const TDesC8& /*aInitData*/ ) {User::Leave(KErrNotSupported);}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   505
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   506
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   507
	Default constructor
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   508
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   509
	CMMFFormatDecode() : MDataSource(KUidMmfFormatDecode), MDataSink(KUidMmfFormatDecode) {};
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   510
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   511
	// Creates and initialises format plugin.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   512
	static CMMFFormatDecode* CreateFormatL(TUid aImplementationUid, MDataSource* aSource);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   513
protected:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   514
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   515
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   516
	The clip is the source for the decode format.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   517
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   518
	MDataSource* iClip;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   519
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   520
	/** 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   521
	The data path is the sink for the decode format.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   522
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   523
	MDataSink* iDataPath;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   524
private:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   525
	TUid iDtor_ID_Key; 			// do not move - referenced inline in ~CMMFFormatDecode()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   526
	TUid iImplementationUid;	// do not move - referenced inline in ImplementationUid()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   527
	};
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   528
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   529
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   530
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   531
Extension class to allow derived classes to support custom interfaces
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   532
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   533
@publishedAll
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   534
@released
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   535
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   536
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   537
class CMMFFormatDecode2 : public CMMFFormatDecode
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   538
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   539
public:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   540
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   541
	Gets a custom interface.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   542
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   543
	@param aInterfaceId
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   544
			The Uid of the particular interface required.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   545
 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   546
	@return Custom interface pointer. NULL if the requested interface is not supported.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   547
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   548
	virtual TAny* CustomInterface(TUid aInterfaceId)=0;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   549
	};
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   550
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   551
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   552
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   553
@publishedAll
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   554
@released
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   555
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   556
Base class from which sink formats can be derived from.   
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   557
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   558
The intended usage is for controllers that can support more than one type of format.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   559
The class is an MDataSink as far as the data path is concerned but is an MDataSource to the clip
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   560
that is the sink of the actual data. All CMMFFormatEncode plugin DLLs must include 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   561
interface_uid = KMmfUidPluginInterfaceFormatEncode in their .rss files.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   562
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   563
class CMMFFormatEncode : public CBase, public MDataSource, public MDataSink
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   564
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   565
public:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   566
	// ECOM creation.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   567
	IMPORT_C static CMMFFormatEncode* NewL( TUid aUid, MDataSink* aSink );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   568
	IMPORT_C static CMMFFormatEncode* NewL( const TDesC& aFileName, MDataSink* aSink, const TDesC& aPreferredSupplier ) ;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   569
	IMPORT_C static CMMFFormatEncode* NewL( const TDesC8& aSourceHeader,  MDataSink* aSink, const TDesC& aPreferredSupplier ) ;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   570
	IMPORT_C static CMMFFormatEncode* NewL( MDataSink* aSink, const TDesC& aPreferredSupplier ) ;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   571
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   572
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   573
	Destructor.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   574
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   575
	virtual ~CMMFFormatEncode()  {REComSession::DestroyedImplementation(iDtor_ID_Key);}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   576
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   577
	// returns ECOM plugin uid of this format
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   578
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   579
	Gets the ECom plugin UID of this format.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   580
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   581
	@return The plugin UID.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   582
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   583
	TUid ImplementationUid() const {return iImplementationUid;}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   584
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   585
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   586
	Returns the time interval for one frame for the specified media type.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   587
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   588
	This is a virtual function that each derived class must implement.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   589
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   590
	@param  aMediaType
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   591
	        The media type ID.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   592
	@return The frame time interval in microseconds.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   593
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   594
	virtual TTimeIntervalMicroSeconds FrameTimeInterval(TMediaId aMediaType) const = 0;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   595
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   596
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   597
	Returns the duration of the sink clip for the specified media type.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   598
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   599
	This is a virtual function that each derived class must implement.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   600
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   601
	@param  aMediaType
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   602
	        The media type ID.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   603
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   604
	@return The duration of the sink clip.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   605
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   606
	virtual TTimeIntervalMicroSeconds Duration(TMediaId aMediaType) const = 0;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   607
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   608
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   609
	@internalAll
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   610
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   611
	Request from CMMFDataPath to fill the specified buffer.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   612
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   613
	@param  aBuffer
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   614
	        The buffer to fill.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   615
	@param  aConsumer
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   616
	        The consumer.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   617
	@param  aMediaId
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   618
	        The media ID.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   619
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   620
	inline virtual void FillBufferL(CMMFBuffer* aBuffer, MDataSink* aConsumer, TMediaId aMediaId);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   621
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   622
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   623
	Called by the clip when it has added the data to the file.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   624
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   625
	@param  aBuffer
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   626
	        The emptied buffer.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   627
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   628
	virtual void BufferEmptiedL(CMMFBuffer* aBuffer) {iDataPath->BufferEmptiedL(aBuffer);}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   629
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   630
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   631
	Tests whether a source buffer can be created.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   632
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   633
	The default implementation returns EFalse.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   634
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   635
	@return	A boolean indicating if the buffer can be created. ETrue if buffer can be created, EFalse otherwise.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   636
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   637
	virtual TBool CanCreateSourceBuffer() {return EFalse;}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   638
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   639
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   640
	Creates a source buffer. The default returns NULL.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   641
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   642
	@param  aMediaId
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   643
	        The media type id.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   644
	@param  aReference
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   645
	        If ETrue the MDataSource owns the buffer.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   646
	        If EFalse, then the caller owns the buffer.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   647
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   648
	@return	Source buffer.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   649
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   650
	inline virtual CMMFBuffer* CreateSourceBufferL(TMediaId aMediaId, TBool &aReference);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   651
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   652
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   653
	Returns the source data type code for the specified media type ID.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   654
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   655
	This is a virtual function that each derived class must implement.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   656
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   657
	@param  aMediaId
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   658
	        The media type id.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   659
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   660
	@return The source data type code.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   661
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   662
	inline virtual TFourCC SourceDataTypeCode(TMediaId aMediaId);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   663
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   664
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   665
	Adds a buffer to a clip.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   666
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   667
	Called by CMMFDataPath.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   668
	(from MDataSink - CMMFFormatEncode is a MDataSink to a CMMFDataPath)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   669
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   670
	This is a virtual function that each derived class must implement.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   671
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   672
	@param  aBuffer
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   673
	        The buffer to which the clip is added.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   674
	@param  aSupplier
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   675
	        The data source.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   676
	@param	aMediaId
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   677
	        The media type ID.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   678
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   679
	virtual void EmptyBufferL(CMMFBuffer* aBuffer, MDataSource* aSupplier, TMediaId aMediaId)=0;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   680
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   681
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   682
	@internalAll
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   683
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   684
	Called by the CMMFDataPath's MDataSource when it has filled the buffer.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   685
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   686
	@param  aBuffer
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   687
	        The buffer that has been filled.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   688
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   689
	inline virtual void BufferFilledL(CMMFBuffer* aBuffer);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   690
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   691
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   692
	Tests whether a sink buffer can be created.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   693
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   694
	Format would normally pass its own buffer onto the CMMFClip, so
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   695
	this may not be required. The default returns ETrue.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   696
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   697
	@return	A boolean indicating if the buffer can be created. ETrue if buffer can be created, EFalse otherwise.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   698
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   699
	virtual TBool CanCreateSinkBuffer() {return ETrue;}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   700
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   701
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   702
	Creates a sink buffer for the specified media ID.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   703
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   704
	This is a virtual function that each derived class must implement.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   705
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   706
	@param  aMediaId
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   707
	        The media type ID.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   708
	@param  aReference
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   709
	        If ETrue then MDataSink owns the buffer.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   710
	        If EFalse, then the caller owns the buffer.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   711
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   712
	@return A pointer to the CMMFBuffer sink buffer.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   713
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   714
	virtual CMMFBuffer* CreateSinkBufferL(TMediaId aMediaId, TBool &aReference)=0;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   715
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   716
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   717
	Returns the sink data type code for the specified media type ID.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   718
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   719
	This would be the same as the source data type four CC although the clip
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   720
	is not going to need this info.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   721
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   722
	This is a virtual function that each derived class must implement.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   723
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   724
	@param  aMediaId
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   725
	        The media type ID.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   726
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   727
	@return The sink data type code.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   728
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   729
	virtual TFourCC SinkDataTypeCode(TMediaId aMediaId) = 0;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   730
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   731
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   732
	This function is used to truncate the sink ie. a CMMFClip,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   733
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   734
	If aToEnd = ETrue the sink is cropped from the aPosition to the	end of the clip.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   735
	If aToEnd = EFalse then the sink is cropped from the start of the clip to aPosition.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   736
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   737
	This function would be called by the CMMFController. The default implementation leaves
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   738
	with KErrNotSupported.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   739
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   740
	@param  aPosition
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   741
	        The position within the clip.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   742
	@param  aToEnd
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   743
	        Flag to determine which part of the clip to delete.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   744
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   745
	inline virtual void CropL(TTimeIntervalMicroSeconds aPosition, TBool aToEnd = ETrue);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   746
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   747
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   748
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   749
	Gets the number of meta data entries.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   750
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   751
	The encode format is capable of reading and writing meta data to the clip.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   752
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   753
	The default implementation leaves with KErrNotSupported.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   754
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   755
	@param  aNumberOfEntries
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   756
	        On return, contains the number of meta data entries.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   757
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   758
	inline virtual void GetNumberOfMetaDataEntriesL(TInt& aNumberOfEntries);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   759
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   760
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   761
	Returns the specified meta data entry.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   762
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   763
	The default implementation leaves with KErrNotSupported.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   764
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   765
	@param  aIndex
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   766
	        The zero based meta data entry index to retrieve.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   767
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   768
	@return The meta data entry.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   769
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   770
	inline virtual CMMFMetaDataEntry* MetaDataEntryL(TInt aIndex);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   771
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   772
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   773
	Adds the specified meta data entry to the clip.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   774
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   775
	The default implementation leaves with KErrNotSupported.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   776
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   777
	@param  aNewEntry
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   778
	        The meta data entry to add.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   779
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   780
	inline virtual void AddMetaDataEntryL(const CMMFMetaDataEntry& aNewEntry);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   781
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   782
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   783
	Removes the specified meta data entry.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   784
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   785
	The default implementation returns KErrNotSupported.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   786
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   787
	@param  aIndex
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   788
	        The zero based meta data entry index to remove.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   789
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   790
	@return An error code indicating if the function call was successful. KErrNone on success, otherwise
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   791
	        another of the system-wide error codes.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   792
	 */
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   793
	inline virtual TInt RemoveMetaDataEntry(TInt aIndex);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   794
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   795
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   796
	Replaces the specified meta data entry with the entry supplied in aNewEntry.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   797
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   798
	The default implementation leaves with KErrNotSupported.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   799
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   800
	@param  aIndex
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   801
	        The zero based meta data entry index to replace.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   802
	@param  aNewEntry
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   803
	        The meta data entry to replace.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   804
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   805
	inline virtual void ReplaceMetaDataEntryL(TInt aIndex, const CMMFMetaDataEntry& aNewEntry);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   806
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   807
	//audio format methods
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   808
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   809
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   810
	Sets the number of channels.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   811
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   812
	The default implementation returns KErrNotSupported.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   813
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   814
	@param  aChannels
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   815
	        The number of channels.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   816
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   817
	@return An error code indicating if the function call was successful. KErrNone on success, otherwise
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   818
	        another of the system-wide error codes.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   819
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   820
	inline virtual TInt SetNumChannels(TUint aChannels);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   821
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   822
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   823
	Sets the sample rate.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   824
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   825
	The default implementation returns KErrNotSupported.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   826
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   827
	@param  aSampleRate
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   828
	        The sample rate.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   829
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   830
	@return An error code indicating if the function call was successful. KErrNone on success, otherwise
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   831
	        another of the system-wide error codes.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   832
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   833
	inline virtual TInt SetSampleRate(TUint aSampleRate);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   834
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   835
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   836
	Sets the bit rate.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   837
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   838
	The default implementation returns KErrNotSupported.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   839
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   840
	@param  aBitRate
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   841
	        The bit rate.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   842
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   843
	@return An error code indicating if the function call was successful. KErrNone on success, otherwise
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   844
	        another of the system-wide error codes.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   845
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   846
	inline virtual TInt SetBitRate(TUint aBitRate);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   847
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   848
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   849
	Returns the number of channels.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   850
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   851
	The default implementation returns 0.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   852
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   853
	@return The number of channels.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   854
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   855
	virtual TUint NumChannels() {return 0;}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   856
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   857
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   858
	Returns the sample rate.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   859
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   860
	The default implementation returns 0.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   861
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   862
	@return The sample rate.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   863
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   864
	virtual TUint SampleRate() {return 0;}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   865
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   866
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   867
	Returns the default sample rate.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   868
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   869
	The default returns 0.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   870
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   871
	@return The default sample rate.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   872
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   873
	virtual TUint GetDefaultSampleRate() {return 0;}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   874
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   875
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   876
	Returns the bit rate.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   877
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   878
	The default returns 0.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   879
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   880
	@return The bit rate.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   881
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   882
	virtual TUint BitRate() {return 0;}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   883
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   884
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   885
	Returns the bytes per second.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   886
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   887
	The default returns 0.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   888
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   889
	@return The bytes per second.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   890
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   891
	virtual TInt64 BytesPerSecond() {return 0;}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   892
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   893
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   894
	Gets the supported sample rates.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   895
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   896
	The default implementation leaves with KErrNotSupported.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   897
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   898
	@param  aSampleRates
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   899
	        A reference to an array of supported sample rates.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   900
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   901
	inline virtual void GetSupportedSampleRatesL(RArray<TUint>& aSampleRates);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   902
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   903
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   904
	Gets the supported bit rates.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   905
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   906
	The default implementation leaves with KErrNotSupported.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   907
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   908
	@param  aBitRates
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   909
	        A reference to an array of supported bit rates.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   910
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   911
	inline virtual void GetSupportedBitRatesL(RArray<TUint>& aBitRates);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   912
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   913
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   914
	Gets the supported number of channels.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   915
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   916
	The default implementation leaves with KErrNotSupported.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   917
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   918
	@param  aNumChannels
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   919
	        A reference to an array of supported number of channels.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   920
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   921
	inline virtual void GetSupportedNumChannelsL(RArray<TUint>& aNumChannels);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   922
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   923
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   924
	Gets the supported data types for the given media type ID.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   925
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   926
	The default implementation leaves with KErrNotSupported.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   927
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   928
	@param  aMediaId
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   929
	        The media type id.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   930
	@param  aDataTypes
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   931
	        A reference to an array of supported data types.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   932
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   933
	inline virtual void GetSupportedDataTypesL(TMediaId aMediaId, RArray<TFourCC>& aDataTypes);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   934
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   935
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   936
	Sets the maximum clip size.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   937
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   938
	The default implementation leaves with KErrNotSupported.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   939
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   940
	@param  aBytes
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   941
	        The maximum clip size.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   942
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   943
	inline virtual void SetMaximumClipSizeL(TInt aBytes);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   944
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   945
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   946
	Returns the maximum clip size.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   947
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   948
	The default returns 0.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   949
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   950
	@return The maximum clip size.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   951
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   952
	virtual TInt MaximumClipSize() { return 0;}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   953
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   954
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   955
	Used to set the format's position.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   956
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   957
	Subsequent data reads should ignore the FrameNumber in the CMMFBuffer and use this
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   958
	setting to determine what data to provide.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   959
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   960
	The actual position the format sets itself may vary to this setting to ensure
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   961
	that it is aligned to the sample boundaries ensuring consistent data output.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   962
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   963
	If not supported, positional information should be extracted from the FrameNumber in CMMFBuffer
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   964
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   965
	@param  aPosition
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   966
	        The position the format should use.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   967
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   968
    inline virtual void SetPositionL(const TTimeIntervalMicroSeconds& aPosition);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   969
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   970
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   971
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   972
	Supplies the current position.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   973
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   974
	Subsequent data reads will commence from this position.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   975
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   976
	@return The current position in microseconds.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   977
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   978
	virtual TTimeIntervalMicroSeconds PositionL() {User::Leave(KErrNotSupported);return TTimeIntervalMicroSeconds(0);}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   979
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   980
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   981
protected:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   982
	//ConstructSourceL should never be called. The CMMFFormatEncode NewL functions should
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   983
	//always be used to instantiate a CMMFFormatEncode object (not MDataSource::NewL)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   984
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   985
	@internalAll
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   986
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   987
	virtual void ConstructSourceL( const TDesC8& /*aInitData*/ ) {User::Leave(KErrNotSupported);}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   988
	//ConstructSinkL should never be called. The CMMFFormatEncode NewL functions should
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   989
	//always be used to instantiate a CMMFFormatEncode object (not MDataSink::NewL)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   990
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   991
	@internalAll
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   992
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   993
	virtual void ConstructSinkL(  const TDesC8& /*aInitData*/ ) {User::Leave(KErrNotSupported);}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   994
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   995
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   996
	Default constructor
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   997
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   998
	CMMFFormatEncode() : MDataSource(KUidMmfFormatEncode), MDataSink(KUidMmfFormatEncode) {};
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   999
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1000
	// Creates and initialises format plugin.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1001
	static CMMFFormatEncode* CreateFormatL(TUid aImplementationUid, MDataSink* aSink);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1002
protected:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1003
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1004
	/** 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1005
	The Data path is the source for the encode format.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1006
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1007
	MDataSource* iDataPath;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1008
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1009
	/** 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1010
	The clip is the sink for the encode format.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1011
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1012
	MDataSink* iClip;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1013
private:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1014
	TUid iDtor_ID_Key;				// do not move - referenced inline in ~CMMFFormatDecode()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1015
	TUid iImplementationUid;		// do not move - referenced inline in ImplementationUid()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1016
	};
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1017
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1018
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1019
class CMMFFormatPluginSelectionParameters;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1020
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1021
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1022
@publishedAll
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1023
@released
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1024
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1025
Provides an internal utility function to choose a format plugin from ECom.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1026
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1027
class MMFFormatEcomUtilities
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1028
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1029
public:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1030
	//Internal utility function to choose a format plugin from ECOM
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1031
	static TUid SelectFormatPluginL(const CMMFFormatPluginSelectionParameters& aSelectParams);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1032
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1033
	// Internal utility function to instantiate each format decode plugin in turn
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1034
	// until we find one that works
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1035
	static CMMFFormatDecode* SelectFormatDecodePluginL(const CMMFFormatPluginSelectionParameters& aSelectParams, MDataSource* aSource);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1036
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1037
	static CMMFFormatDecode* SelectFormatDecodePluginL(const CMMFFormatPluginSelectionParameters& aSelectParams, MDataSource* aSource, TBool& aSupportsCustomInterfaces);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1038
	};
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1039
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1040
#include <mmf/server/mmfformat.inl>
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1041
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1042
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1043
#endif
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1044