os/mm/mmdevicefw/mdf/src/video/encoderadapter/mdfvideoencodehwdeviceadapter.cpp
author sl
Tue, 10 Jun 2014 14:32:02 +0200
changeset 1 260cb5ec6c19
permissions -rw-r--r--
Update contrib.
sl@0
     1
// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
sl@0
     2
// All rights reserved.
sl@0
     3
// This component and the accompanying materials are made available
sl@0
     4
// under the terms of "Eclipse Public License v1.0"
sl@0
     5
// which accompanies this distribution, and is available
sl@0
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
sl@0
     7
//
sl@0
     8
// Initial Contributors:
sl@0
     9
// Nokia Corporation - initial contribution.
sl@0
    10
//
sl@0
    11
// Contributors:
sl@0
    12
//
sl@0
    13
// Description:
sl@0
    14
//
sl@0
    15
sl@0
    16
#include "mdfvideoencodehwdeviceadapter.h"
sl@0
    17
#include <mmf/server/mmfdatabuffer.h>
sl@0
    18
#include <mmf/devvideo/devvideobase.h>
sl@0
    19
#include <mmf/devvideo/devvideopuconfig.h>
sl@0
    20
#include <mmf/server/mmfdatabuffer.h>
sl@0
    21
sl@0
    22
// Literal descriptor for the encoder's info
sl@0
    23
_LIT8(KEncoderInfoCSInfo, "Coded by Symbian");
sl@0
    24
// Literal descriptor for the encoder's implementation info
sl@0
    25
_LIT8(KEncoderInfoISInfo, "Implemented by Symbian");
sl@0
    26
// Literal descriptor for the video encoder panic
sl@0
    27
_LIT(KDevVideoEncoderPanicCategory, "DevVideoEncoder");
sl@0
    28
sl@0
    29
// Processing unit's input port index
sl@0
    30
const TInt KEncoderPUInputPortIndex  = 0;
sl@0
    31
// Processing unit's output port index
sl@0
    32
const TInt KEncoderPUOutputPortIndex = 0;
sl@0
    33
// Processing unit's major version number
sl@0
    34
const TInt KEncoderPUInfoVersionMaj = 0;
sl@0
    35
// Processing unit's minor version number
sl@0
    36
const TInt KEncoderPUInfoVersionMin = 1;
sl@0
    37
// Processing unit's build version number
sl@0
    38
const TInt KEncoderPUInfoVersionBuild = 1;
sl@0
    39
// Bytes per pixel
sl@0
    40
const TInt KBytesPerPixel = 3;
sl@0
    41
sl@0
    42
void DevVideoEncoderPanic(TInt aReason)
sl@0
    43
	{
sl@0
    44
	User::Panic(KDevVideoEncoderPanicCategory, aReason);
sl@0
    45
	}
sl@0
    46
sl@0
    47
sl@0
    48
/** 
sl@0
    49
 Constructs a new instance of CMdfVideoEncodeHwDeviceAdapter.
sl@0
    50
 @return    "CMdfVideoEncodeHwDeviceAdapter*"
sl@0
    51
            A pointer to the newly constructed HwDevice
sl@0
    52
 */
sl@0
    53
CMdfVideoEncodeHwDeviceAdapter* CMdfVideoEncodeHwDeviceAdapter::NewL()
sl@0
    54
	{
sl@0
    55
	CMdfVideoEncodeHwDeviceAdapter* self = new(ELeave) CMdfVideoEncodeHwDeviceAdapter;
sl@0
    56
	CleanupStack::PushL(self);
sl@0
    57
	self->ConstructL();
sl@0
    58
	CleanupStack::Pop(self);
sl@0
    59
	return self;
sl@0
    60
	}
sl@0
    61
sl@0
    62
/**
sl@0
    63
 Default constructor
sl@0
    64
*/
sl@0
    65
CMdfVideoEncodeHwDeviceAdapter::CMdfVideoEncodeHwDeviceAdapter()
sl@0
    66
	{
sl@0
    67
	}
sl@0
    68
sl@0
    69
/**
sl@0
    70
 Safe contructor for CMdfVideoEncodeHwDeviceAdapter.
sl@0
    71
*/
sl@0
    72
void CMdfVideoEncodeHwDeviceAdapter::ConstructL()
sl@0
    73
	{
sl@0
    74
	// Load the PU Loader plugin
sl@0
    75
	iPuLoader = static_cast<CMdfPuLoader*>
sl@0
    76
		(REComSession::CreateImplementationL(TUid::Uid(KUidPuLoaderImplementation), iPuLoaderDtorKey));
sl@0
    77
	}
sl@0
    78
sl@0
    79
/**
sl@0
    80
 Default destructor
sl@0
    81
*/
sl@0
    82
CMdfVideoEncodeHwDeviceAdapter::~CMdfVideoEncodeHwDeviceAdapter()
sl@0
    83
	{
sl@0
    84
	if(iEncoderPU) 
sl@0
    85
		{
sl@0
    86
		iPuLoader->UnloadProcessingUnit(iEncoderPU);		
sl@0
    87
		}
sl@0
    88
sl@0
    89
	delete iPuLoader;
sl@0
    90
	delete iPuData;
sl@0
    91
	delete iManufacturer;
sl@0
    92
	REComSession::DestroyedImplementation(iPuLoaderDtorKey);
sl@0
    93
sl@0
    94
	for (TInt i = 0; i < iOutputVideoFormats.Count(); i++)
sl@0
    95
		{
sl@0
    96
		delete iOutputVideoFormats[i];
sl@0
    97
		}
sl@0
    98
		
sl@0
    99
	iEncoderPUOutputPortsArray.Reset();
sl@0
   100
	iEncoderPUOutputPortsArray.Close();
sl@0
   101
	
sl@0
   102
	iEncoderPUInputPortsArray.Reset();
sl@0
   103
	iEncoderPUInputPortsArray.Close();
sl@0
   104
	
sl@0
   105
	iPictureRates.Reset();
sl@0
   106
	iPictureRates.Close();
sl@0
   107
	
sl@0
   108
	iInputVideoFormats.Reset();
sl@0
   109
	iInputVideoFormats.Close();
sl@0
   110
	
sl@0
   111
	iOutputVideoFormats.Reset();
sl@0
   112
	iOutputVideoFormats.Close();
sl@0
   113
		
sl@0
   114
	for (TInt i = 0; i < iDataBuffers.Count(); i++)
sl@0
   115
		{
sl@0
   116
		User::Free((TAny*)iDataBuffers[i].iData.Ptr());
sl@0
   117
		}
sl@0
   118
	iDataBuffers.Reset();
sl@0
   119
	iDataBuffers.Close();
sl@0
   120
	
sl@0
   121
	delete iInputBuffer;
sl@0
   122
	delete iOutputBuffer;
sl@0
   123
	}
sl@0
   124
sl@0
   125
void CMdfVideoEncodeHwDeviceAdapter::LoadProcessingUnitL(const CImplementationInformation& aImplInfo)
sl@0
   126
	{
sl@0
   127
	iPuUid = aImplInfo.ImplementationUid();
sl@0
   128
	
sl@0
   129
	iEncoderPU = iPuLoader->LoadProcessingUnitL(*this,iPuUid);
sl@0
   130
	// store the opaque data associated with this PU so we can extract information about 
sl@0
   131
	// the PU later
sl@0
   132
	iPuData = CCodecApiVideoOpaqueData::NewL(aImplInfo.OpaqueData());
sl@0
   133
	iManufacturer = HBufC::NewL(iPuData->Manufacturer().Length());
sl@0
   134
	iManufacturer->Des().Copy(iPuData->Manufacturer());
sl@0
   135
	}
sl@0
   136
sl@0
   137
// private method : body of Initialize()
sl@0
   138
void CMdfVideoEncodeHwDeviceAdapter::InitializeL()
sl@0
   139
	{
sl@0
   140
	if (!iEncoderPU)
sl@0
   141
		{
sl@0
   142
		iProxy->MdvrpInitializeComplete(this, KErrNotFound);
sl@0
   143
		return;	
sl@0
   144
		}
sl@0
   145
	
sl@0
   146
	// we have to pre-check that the image format is set correctly,
sl@0
   147
	// else an attempt to set it into the config will panic.
sl@0
   148
	switch(iFormat.iDataFormat) 
sl@0
   149
		{
sl@0
   150
		case 0:
sl@0
   151
			User::Leave(KErrNotReady);
sl@0
   152
			break;
sl@0
   153
		case ERgbRawData:
sl@0
   154
		case ERgbFbsBitmap:
sl@0
   155
		case EYuvRawData:
sl@0
   156
			break;
sl@0
   157
		default:
sl@0
   158
			User::Leave(KErrNotSupported);
sl@0
   159
			break;
sl@0
   160
		}
sl@0
   161
sl@0
   162
	// get the encoder input ports
sl@0
   163
	User::LeaveIfError(iEncoderPU->GetInputPorts(iEncoderPUInputPortsArray));
sl@0
   164
sl@0
   165
	// set the observer for the encoder input ports
sl@0
   166
	for(TInt i = 0; i < iEncoderPUInputPortsArray.Count(); i++)
sl@0
   167
		{
sl@0
   168
		iEncoderPUInputPortsArray[i]->MipSetObserver(*this);
sl@0
   169
		}
sl@0
   170
		
sl@0
   171
	// get the encoder output ports
sl@0
   172
	User::LeaveIfError(iEncoderPU->GetOutputPorts(iEncoderPUOutputPortsArray));
sl@0
   173
sl@0
   174
	// set the observer for the encoder input ports
sl@0
   175
	for(TInt i = 0; i < iEncoderPUOutputPortsArray.Count(); i++)
sl@0
   176
		{
sl@0
   177
		iEncoderPUOutputPortsArray[i]->MopSetObserver(*this);
sl@0
   178
		}
sl@0
   179
sl@0
   180
	TInt bufSize = iPictureSize.iHeight * iPictureSize.iWidth * KBytesPerPixel;
sl@0
   181
	iDataBuffers.Reset();
sl@0
   182
sl@0
   183
	// create the buffer. zero out all fields
sl@0
   184
	TVideoOutputBuffer buf;
sl@0
   185
	memset(&buf, 0, sizeof(buf));
sl@0
   186
sl@0
   187
	TUint8* bufData = (TUint8*)User::AllocL(bufSize);
sl@0
   188
	CleanupStack::PushL(bufData);
sl@0
   189
	
sl@0
   190
	buf.iData.Set(bufData, bufSize);
sl@0
   191
	iDataBuffers.AppendL(buf);
sl@0
   192
	
sl@0
   193
	CleanupStack::Pop(bufData); // don't destroy - owned by iDataBuffers
sl@0
   194
sl@0
   195
	TDevVideoRecordPuConfig config;
sl@0
   196
	config.iFrameSize = iPictureSize;
sl@0
   197
	config.iImageFormat = iFormat;
sl@0
   198
	config.iFrameRate = iFrameRate;
sl@0
   199
		
sl@0
   200
	TPuConfigDevVideoRecord puConfig(config);
sl@0
   201
sl@0
   202
	// initialize with config info.
sl@0
   203
	iEncoderPU->Configure(puConfig);
sl@0
   204
	
sl@0
   205
	// create input buffer
sl@0
   206
	iInputBuffer = CMMFDescriptorBuffer::NewL(bufSize);
sl@0
   207
	iEncoderPUInputPortsArray[KEncoderPUInputPortIndex]->MipUseBuffer(*iInputBuffer);
sl@0
   208
			
sl@0
   209
	// create output buffer 
sl@0
   210
	TUint32 outputPortBufferSize = 
sl@0
   211
		iEncoderPUOutputPortsArray[KEncoderPUOutputPortIndex]->MopBufferSize();
sl@0
   212
	iOutputBuffer = CMMFDescriptorBuffer::NewL(outputPortBufferSize);
sl@0
   213
	iEncoderPUOutputPortsArray[KEncoderPUOutputPortIndex]->MopUseBuffer(*iOutputBuffer);
sl@0
   214
	
sl@0
   215
	// initialize the encoder PU
sl@0
   216
	iEncoderPU->Initialize();
sl@0
   217
	
sl@0
   218
	}
sl@0
   219
sl@0
   220
/**
sl@0
   221
 @see CMMFVideoHwDevice
sl@0
   222
 */
sl@0
   223
TAny* CMdfVideoEncodeHwDeviceAdapter::CustomInterface(TUid aInterface)
sl@0
   224
	{
sl@0
   225
	if (aInterface.iUid == KUidDevVideoHwDeviceAdapterSetup)
sl@0
   226
		{
sl@0
   227
		return static_cast<MDevVideoHwDeviceAdapterSetup*>(this);
sl@0
   228
		}
sl@0
   229
	return NULL;
sl@0
   230
	}
sl@0
   231
sl@0
   232
/**
sl@0
   233
 @see CMMFVideoRecordHwDevice
sl@0
   234
 */
sl@0
   235
CPreProcessorInfo* CMdfVideoEncodeHwDeviceAdapter::PreProcessorInfoLC()
sl@0
   236
	{
sl@0
   237
	// we have no preprocessor info
sl@0
   238
	return NULL;
sl@0
   239
	}
sl@0
   240
sl@0
   241
/**
sl@0
   242
 @see CMMFVideoRecordHwDevice
sl@0
   243
 */
sl@0
   244
void CMdfVideoEncodeHwDeviceAdapter::SetInputFormatL(const TUncompressedVideoFormat& aFormat, const TSize& aPictureSize)
sl@0
   245
	{
sl@0
   246
	iFormat = aFormat;
sl@0
   247
	iPictureSize = aPictureSize;
sl@0
   248
	}
sl@0
   249
sl@0
   250
/**
sl@0
   251
 @see CMMFVideoRecordHwDevice
sl@0
   252
 */
sl@0
   253
void CMdfVideoEncodeHwDeviceAdapter::SetSourceCameraL(TInt /* aCameraHandle */, TReal /* aPictureRate */)
sl@0
   254
	{
sl@0
   255
	User::Leave(KErrNotSupported);
sl@0
   256
	}
sl@0
   257
sl@0
   258
/**
sl@0
   259
 @see CMMFVideoRecordHwDevice
sl@0
   260
 */
sl@0
   261
void CMdfVideoEncodeHwDeviceAdapter::SetSourceMemoryL(TReal aMaxPictureRate, TBool /* aConstantPictureRate */, TBool /* aProcessRealtime */)
sl@0
   262
	{
sl@0
   263
	iFrameRate = (TInt)aMaxPictureRate;
sl@0
   264
	}
sl@0
   265
sl@0
   266
/**
sl@0
   267
 @see CMMFVideoRecordHwDevice
sl@0
   268
 */
sl@0
   269
void CMdfVideoEncodeHwDeviceAdapter::Initialize()
sl@0
   270
	{
sl@0
   271
	TRAPD(err, InitializeL());
sl@0
   272
	if(err != KErrNone) 
sl@0
   273
		{
sl@0
   274
		iProxy->MdvrpInitializeComplete(this, err);
sl@0
   275
		}
sl@0
   276
	}
sl@0
   277
	
sl@0
   278
/**
sl@0
   279
 @see CMMFVideoRecordHwDevice
sl@0
   280
 */
sl@0
   281
void CMdfVideoEncodeHwDeviceAdapter::WritePictureL(TVideoPicture* aPicture)
sl@0
   282
	{
sl@0
   283
	__ASSERT_ALWAYS(iEncoderPU, DevVideoEncoderPanic(0));
sl@0
   284
	
sl@0
   285
	if(!aPicture) 
sl@0
   286
		{
sl@0
   287
		User::Leave(KErrArgument);
sl@0
   288
		}
sl@0
   289
		
sl@0
   290
	// the picture size MUST be the same as the size the encoder has
sl@0
   291
	// been initialized with. 
sl@0
   292
	if(aPicture->iData.iDataSize != iPictureSize) 
sl@0
   293
	{
sl@0
   294
		User::Leave(KErrArgument);
sl@0
   295
	}
sl@0
   296
	
sl@0
   297
	// Picture received : increment picture count
sl@0
   298
	iPictureCounters.iInputPictures++;
sl@0
   299
	iCurrentPicture = aPicture;
sl@0
   300
	TDes8& data = iInputBuffer->Data();
sl@0
   301
	data.SetLength((*aPicture->iData.iRawData).Length());
sl@0
   302
	data.Copy(*aPicture->iData.iRawData);
sl@0
   303
	iEncoderPUInputPortsArray[KEncoderPUInputPortIndex]->MipWriteData(*iInputBuffer);
sl@0
   304
	iEncoderPUOutputPortsArray[KEncoderPUOutputPortIndex]->MopReadData(*iOutputBuffer);	
sl@0
   305
	
sl@0
   306
	// Picture encoded : increment picture count
sl@0
   307
	iPictureCounters.iPicturesProcessed++;
sl@0
   308
	}
sl@0
   309
sl@0
   310
/**
sl@0
   311
 @see CMMFVideoRecordHwDevice
sl@0
   312
 */
sl@0
   313
void CMdfVideoEncodeHwDeviceAdapter::InputEnd()
sl@0
   314
	{
sl@0
   315
	// The client has notified us it has reached the end of the input stream
sl@0
   316
	iInputStreamEnd = ETrue;
sl@0
   317
	iProxy->MdvrpStreamEnd();
sl@0
   318
	}
sl@0
   319
sl@0
   320
/**
sl@0
   321
 @see CMMFVideoRecordHwDevice
sl@0
   322
 */
sl@0
   323
void CMdfVideoEncodeHwDeviceAdapter::Start()
sl@0
   324
	{
sl@0
   325
	__ASSERT_ALWAYS(iEncoderPU, DevVideoEncoderPanic(0));
sl@0
   326
	iEncoderPU->Execute();
sl@0
   327
	}
sl@0
   328
sl@0
   329
/**
sl@0
   330
 @see CMMFVideoRecordHwDevice
sl@0
   331
 */
sl@0
   332
void CMdfVideoEncodeHwDeviceAdapter::Stop()
sl@0
   333
	{
sl@0
   334
	iProxy->MdvrpFatalError(this, KErrNotSupported);
sl@0
   335
	}
sl@0
   336
sl@0
   337
/**
sl@0
   338
 @see CMMFVideoRecordHwDevice
sl@0
   339
 */
sl@0
   340
void CMdfVideoEncodeHwDeviceAdapter::Pause()
sl@0
   341
	{
sl@0
   342
	iProxy->MdvrpFatalError(this, KErrNotSupported);
sl@0
   343
	}
sl@0
   344
sl@0
   345
/**
sl@0
   346
 @see CMMFVideoRecordHwDevice
sl@0
   347
 */
sl@0
   348
void CMdfVideoEncodeHwDeviceAdapter::Resume()
sl@0
   349
	{
sl@0
   350
	iProxy->MdvrpFatalError(this, KErrNotSupported);
sl@0
   351
	}
sl@0
   352
sl@0
   353
/**
sl@0
   354
 @see CMMFVideoRecordHwDevice
sl@0
   355
 */
sl@0
   356
void CMdfVideoEncodeHwDeviceAdapter::Freeze()
sl@0
   357
	{
sl@0
   358
	iProxy->MdvrpFatalError(this, KErrNotSupported);
sl@0
   359
	}
sl@0
   360
sl@0
   361
/**
sl@0
   362
 @see CMMFVideoRecordHwDevice
sl@0
   363
 */
sl@0
   364
void CMdfVideoEncodeHwDeviceAdapter::ReleaseFreeze()
sl@0
   365
	{
sl@0
   366
	iProxy->MdvrpFatalError(this, KErrNotSupported);
sl@0
   367
	}
sl@0
   368
sl@0
   369
/**
sl@0
   370
 @see CMMFVideoRecordHwDevice
sl@0
   371
 */
sl@0
   372
TTimeIntervalMicroSeconds CMdfVideoEncodeHwDeviceAdapter::RecordingPosition()
sl@0
   373
	{
sl@0
   374
	// return picture count times frame rate
sl@0
   375
	return iPictureCounters.iPicturesProcessed * (1000000 / iFrameRate);
sl@0
   376
	}
sl@0
   377
sl@0
   378
/**
sl@0
   379
 @see CMMFVideoRecordHwDevice
sl@0
   380
 */
sl@0
   381
void CMdfVideoEncodeHwDeviceAdapter::GetPictureCounters(CMMFDevVideoRecord::TPictureCounters& aCounters)
sl@0
   382
	{
sl@0
   383
	aCounters = iPictureCounters;
sl@0
   384
	}
sl@0
   385
sl@0
   386
/**
sl@0
   387
 @see CMMFVideoRecordHwDevice
sl@0
   388
 */
sl@0
   389
void CMdfVideoEncodeHwDeviceAdapter::GetFrameStabilisationOutput(TRect& aRect)
sl@0
   390
	{
sl@0
   391
	aRect = TRect(iPictureSize);
sl@0
   392
	}
sl@0
   393
sl@0
   394
/**
sl@0
   395
 @see CMMFVideoRecordHwDevice
sl@0
   396
 */
sl@0
   397
TUint CMdfVideoEncodeHwDeviceAdapter::NumComplexityLevels()
sl@0
   398
	{
sl@0
   399
	// separate complexity levels are not available; return 1
sl@0
   400
	return 1;
sl@0
   401
	}
sl@0
   402
sl@0
   403
/**
sl@0
   404
 @see CMMFVideoRecordHwDevice
sl@0
   405
 */
sl@0
   406
void CMdfVideoEncodeHwDeviceAdapter::SetComplexityLevel(TUint /* aLevel */)
sl@0
   407
	{
sl@0
   408
	}
sl@0
   409
sl@0
   410
/**
sl@0
   411
 @see CMMFVideoEncodeHwDevice
sl@0
   412
 */
sl@0
   413
CVideoEncoderInfo* CMdfVideoEncodeHwDeviceAdapter::VideoEncoderInfoLC()
sl@0
   414
	{
sl@0
   415
	//if PU is not loaded panic
sl@0
   416
	if(iPuData == NULL)	
sl@0
   417
		{
sl@0
   418
		DevVideoEncoderPanic(KErrNotReady);	
sl@0
   419
		}
sl@0
   420
	// output formats array
sl@0
   421
	iOutputVideoFormats.Reset();
sl@0
   422
	CCompressedVideoFormat* videoCV = NULL;
sl@0
   423
	videoCV = CCompressedVideoFormat::NewL(iPuData->OutputDataType() , KNullDesC8);
sl@0
   424
	CleanupStack::PushL(videoCV);
sl@0
   425
	iOutputVideoFormats.AppendL(videoCV);
sl@0
   426
	// Note; CCompressedVideo object is destroyed in destructor
sl@0
   427
	CleanupStack::Pop(videoCV);
sl@0
   428
	
sl@0
   429
	// input formats array
sl@0
   430
	iInputVideoFormats.Reset();
sl@0
   431
	TUncompressedVideoFormat inputFormats[3];
sl@0
   432
	inputFormats[0].iDataFormat = ERgbRawData;
sl@0
   433
	inputFormats[0].iRgbFormat = ERgb16bit565;
sl@0
   434
	iInputVideoFormats.AppendL(inputFormats[0]);
sl@0
   435
	inputFormats[1].iDataFormat = ERgbFbsBitmap;
sl@0
   436
	inputFormats[1].iRgbFormat = EFbsBitmapColor16M;
sl@0
   437
	iInputVideoFormats.AppendL(inputFormats[1]);
sl@0
   438
	inputFormats[2].iDataFormat = EYuvRawData;
sl@0
   439
    memset(&inputFormats[2].iYuvFormat, 0, sizeof(TYuvFormat));
sl@0
   440
	iInputVideoFormats.AppendL(inputFormats[2]);
sl@0
   441
		
sl@0
   442
	// construct the video Encoder info object
sl@0
   443
	CVideoEncoderInfo* vInfo = CVideoEncoderInfo::NewL(
sl@0
   444
		iPuUid,
sl@0
   445
		*iManufacturer,
sl@0
   446
		KNullDesC,
sl@0
   447
		TVersion(KEncoderPUInfoVersionMaj, KEncoderPUInfoVersionMin, KEncoderPUInfoVersionBuild),
sl@0
   448
		EFalse, // not accelerated
sl@0
   449
		EFalse, // does not support direct capture
sl@0
   450
		iInputVideoFormats.Array(),
sl@0
   451
		iOutputVideoFormats.Array(),
sl@0
   452
		iPuData->MaxPictureSize(),
sl@0
   453
		EDuCodedPicture, // data unit type(s)
sl@0
   454
		EDuElementaryStream, // data encapsulation type
sl@0
   455
		1, // num bitrate layers
sl@0
   456
		EFalse, // does not support supplemental enhancement info
sl@0
   457
		1, // unequal error protection levels not supported
sl@0
   458
		KMaxTUint32, // max bitrate supported
sl@0
   459
		iPuData->MaxPictureRates().Array(),
sl@0
   460
		1, // in-layer scalability not supported
sl@0
   461
		0, // no supported picture options
sl@0
   462
		EFalse, // picture loss not supported,
sl@0
   463
		EFalse, // slice loss not supported,
sl@0
   464
		KEncoderInfoCSInfo,
sl@0
   465
		KEncoderInfoISInfo);
sl@0
   466
sl@0
   467
	CleanupStack::PushL(vInfo);
sl@0
   468
	return vInfo;
sl@0
   469
	}
sl@0
   470
sl@0
   471
/**
sl@0
   472
 @see CMMFVideoEncodeHwDevice
sl@0
   473
 */
sl@0
   474
void CMdfVideoEncodeHwDeviceAdapter::SetOutputFormatL(const CCompressedVideoFormat& /* aFormat */, 
sl@0
   475
					  TVideoDataUnitType /* aDataUnitType */, 					
sl@0
   476
					  TVideoDataUnitEncapsulation /* aDataEncapsulation */,
sl@0
   477
					  TBool /* aSegmentationAllowed */)
sl@0
   478
	{
sl@0
   479
	User::Leave(KErrNotSupported);
sl@0
   480
	}
sl@0
   481
sl@0
   482
/**
sl@0
   483
 @see CMMFVideoEncodeHwDevice
sl@0
   484
 */
sl@0
   485
void CMdfVideoEncodeHwDeviceAdapter::SetOutputRectL(const TRect& /* aRect */)
sl@0
   486
	{
sl@0
   487
	User::Leave(KErrNotSupported);
sl@0
   488
	}
sl@0
   489
sl@0
   490
/**
sl@0
   491
 @see CMMFVideoEncodeHwDevice
sl@0
   492
 */
sl@0
   493
void CMdfVideoEncodeHwDeviceAdapter::SetInputDevice(CMMFVideoPreProcHwDevice* /*aDevice*/)
sl@0
   494
	{
sl@0
   495
	// Function is not supported.
sl@0
   496
	}
sl@0
   497
sl@0
   498
/**
sl@0
   499
 @see CMMFVideoEncodeHwDevice
sl@0
   500
 */
sl@0
   501
void CMdfVideoEncodeHwDeviceAdapter::SetErrorsExpected(TBool /* aBitErrors */, TBool /* aPacketLosses */)
sl@0
   502
	{
sl@0
   503
	// Function is not supported.
sl@0
   504
	}
sl@0
   505
sl@0
   506
/**
sl@0
   507
 @see CMMFVideoEncodeHwDevice
sl@0
   508
 */
sl@0
   509
void CMdfVideoEncodeHwDeviceAdapter::SetMinRandomAccessRate(TReal /* aRate */)
sl@0
   510
	{
sl@0
   511
	// Function is not supported.
sl@0
   512
	}
sl@0
   513
sl@0
   514
/**
sl@0
   515
 @see CMMFVideoEncodeHwDevice
sl@0
   516
 */
sl@0
   517
void CMdfVideoEncodeHwDeviceAdapter::SetNumBitrateLayersL(TUint /* aNumLayers */)
sl@0
   518
	{
sl@0
   519
	User::Leave(KErrNotSupported);
sl@0
   520
	}
sl@0
   521
sl@0
   522
/**
sl@0
   523
 @see CMMFVideoEncodeHwDevice
sl@0
   524
 */
sl@0
   525
void CMdfVideoEncodeHwDeviceAdapter::SetScalabilityLayerTypeL(TUint /* aLayer */, TScalabilityType /* aScalabilityType */)
sl@0
   526
	{
sl@0
   527
	User::Leave(KErrNotSupported);
sl@0
   528
	}
sl@0
   529
sl@0
   530
/**
sl@0
   531
 @see CMMFVideoEncodeHwDevice
sl@0
   532
 */
sl@0
   533
void CMdfVideoEncodeHwDeviceAdapter::SetGlobalReferenceOptions(TUint /* aMaxReferencePictures */, TUint /* aMaxPictureOrderDelay */)
sl@0
   534
	{
sl@0
   535
	// Function is not supported.
sl@0
   536
	}
sl@0
   537
sl@0
   538
/**
sl@0
   539
 @see CMMFVideoEncodeHwDevice
sl@0
   540
 */
sl@0
   541
void CMdfVideoEncodeHwDeviceAdapter::SetLayerReferenceOptions(TUint /* aLayer */, TUint /* aMaxReferencePictures */, TUint /* aMaxPictureOrderDelay */)
sl@0
   542
	{
sl@0
   543
	// Function is not supported.
sl@0
   544
	}
sl@0
   545
sl@0
   546
/**
sl@0
   547
 @see CMMFVideoEncodeHwDevice
sl@0
   548
 */
sl@0
   549
void CMdfVideoEncodeHwDeviceAdapter::SetBufferOptionsL(const TEncoderBufferOptions& /* aOptions */)
sl@0
   550
	{
sl@0
   551
	User::Leave(KErrNotSupported);
sl@0
   552
	}
sl@0
   553
sl@0
   554
/**
sl@0
   555
 @see CMMFVideoEncodeHwDevice
sl@0
   556
 */
sl@0
   557
void CMdfVideoEncodeHwDeviceAdapter::SetCodingStandardSpecificOptionsL(const TDesC8& /* aOptions */)
sl@0
   558
	{
sl@0
   559
	User::Leave(KErrNotSupported);
sl@0
   560
	}
sl@0
   561
sl@0
   562
/**
sl@0
   563
 @see CMMFVideoEncodeHwDevice
sl@0
   564
 */
sl@0
   565
void CMdfVideoEncodeHwDeviceAdapter::SetImplementationSpecificEncoderOptionsL(const TDesC8& /* aOptions */)
sl@0
   566
	{
sl@0
   567
	User::Leave(KErrNotSupported);
sl@0
   568
	}
sl@0
   569
sl@0
   570
/**
sl@0
   571
 @see CMMFVideoEncodeHwDevice
sl@0
   572
 */
sl@0
   573
HBufC8* CMdfVideoEncodeHwDeviceAdapter::CodingStandardSpecificInitOutputLC()
sl@0
   574
	{
sl@0
   575
	User::Leave(KErrNotSupported);
sl@0
   576
	return NULL;
sl@0
   577
	}
sl@0
   578
sl@0
   579
/**
sl@0
   580
 @see CMMFVideoEncodeHwDevice
sl@0
   581
 */
sl@0
   582
HBufC8* CMdfVideoEncodeHwDeviceAdapter::ImplementationSpecificInitOutputLC()
sl@0
   583
	{
sl@0
   584
	User::Leave(KErrNotSupported);
sl@0
   585
	return NULL;
sl@0
   586
	}
sl@0
   587
sl@0
   588
/**
sl@0
   589
 @see CMMFVideoEncodeHwDevice
sl@0
   590
 */
sl@0
   591
void CMdfVideoEncodeHwDeviceAdapter::SetErrorProtectionLevelsL(TUint /* aNumLevels */, TBool /* aSeparateBuffers */)
sl@0
   592
	{
sl@0
   593
	User::Leave(KErrNotSupported);
sl@0
   594
	}
sl@0
   595
sl@0
   596
/**
sl@0
   597
 @see CMMFVideoEncodeHwDevice
sl@0
   598
 */
sl@0
   599
void CMdfVideoEncodeHwDeviceAdapter::SetErrorProtectionLevelL(TUint /* aLevel */, TUint /* aBitrate */, TUint /* aStrength */)
sl@0
   600
	{
sl@0
   601
	User::Leave(KErrNotSupported);
sl@0
   602
	}
sl@0
   603
sl@0
   604
/**
sl@0
   605
 @see CMMFVideoEncodeHwDevice
sl@0
   606
 */
sl@0
   607
void CMdfVideoEncodeHwDeviceAdapter::SetChannelPacketLossRate(TUint /* aLevel */, 
sl@0
   608
							  TReal /* aLossRate */, 
sl@0
   609
							  TTimeIntervalMicroSeconds32 /* aLossBurstLength */)
sl@0
   610
	{
sl@0
   611
	// Function is not supported.
sl@0
   612
	}
sl@0
   613
sl@0
   614
/**
sl@0
   615
 @see CMMFVideoEncodeHwDevice
sl@0
   616
 */
sl@0
   617
void CMdfVideoEncodeHwDeviceAdapter::SetChannelBitErrorRate(TUint /* aLevel */, TReal /* aErrorRate */, TReal /* aStdDeviation */)
sl@0
   618
	{
sl@0
   619
	// Function is not supported.
sl@0
   620
	}
sl@0
   621
sl@0
   622
/**
sl@0
   623
 @see CMMFVideoEncodeHwDevice
sl@0
   624
 */
sl@0
   625
void CMdfVideoEncodeHwDeviceAdapter::SetSegmentTargetSize(TUint /* aLayer */, TUint /* aSizeBytes */, TUint /* aSizeMacroblocks */)
sl@0
   626
	{
sl@0
   627
	// Function is not supported.
sl@0
   628
	}
sl@0
   629
sl@0
   630
/**
sl@0
   631
 @see CMMFVideoEncodeHwDevice
sl@0
   632
 */
sl@0
   633
void CMdfVideoEncodeHwDeviceAdapter::SetRateControlOptions(TUint /* aLayer */, const TRateControlOptions& /* aOptions */)
sl@0
   634
	{
sl@0
   635
	// Function is not supported.
sl@0
   636
	}
sl@0
   637
sl@0
   638
/**
sl@0
   639
 @see CMMFVideoEncodeHwDevice
sl@0
   640
 */
sl@0
   641
void CMdfVideoEncodeHwDeviceAdapter::SetInLayerScalabilityL(TUint /* aLayer */, TUint /* aNumSteps */,
sl@0
   642
							TInLayerScalabilityType /* aScalabilityType */,
sl@0
   643
							const TArray<TUint>& /* aBitrateShare */,
sl@0
   644
							const TArray<TUint>& /* aPictureShare */)
sl@0
   645
	{
sl@0
   646
	User::Leave(KErrNotSupported);
sl@0
   647
	}
sl@0
   648
sl@0
   649
/**
sl@0
   650
 @see CMMFVideoEncodeHwDevice
sl@0
   651
 */
sl@0
   652
void CMdfVideoEncodeHwDeviceAdapter::SetLayerPromotionPointPeriod(TUint /* aLayer */, TUint /* aPeriod */)
sl@0
   653
	{
sl@0
   654
	// Function is not supported.
sl@0
   655
	}
sl@0
   656
sl@0
   657
/**
sl@0
   658
 @see CMMFVideoEncodeHwDevice
sl@0
   659
 */
sl@0
   660
HBufC8* CMdfVideoEncodeHwDeviceAdapter::CodingStandardSpecificSettingsOutputLC()
sl@0
   661
	{
sl@0
   662
	User::Leave(KErrNotSupported);
sl@0
   663
	return NULL;
sl@0
   664
	}
sl@0
   665
sl@0
   666
/**
sl@0
   667
 @see CMMFVideoEncodeHwDevice
sl@0
   668
 */
sl@0
   669
HBufC8* CMdfVideoEncodeHwDeviceAdapter::ImplementationSpecificSettingsOutputLC()
sl@0
   670
	{
sl@0
   671
	User::Leave(KErrNotSupported);
sl@0
   672
	return NULL;
sl@0
   673
	}
sl@0
   674
sl@0
   675
/**
sl@0
   676
 @see CMMFVideoEncodeHwDevice
sl@0
   677
 */
sl@0
   678
void CMdfVideoEncodeHwDeviceAdapter::SendSupplementalInfoL(const TDesC8& /* aData */)
sl@0
   679
	{
sl@0
   680
	User::Leave(KErrNotSupported);
sl@0
   681
	}
sl@0
   682
sl@0
   683
/**
sl@0
   684
 @see CMMFVideoEncodeHwDevice
sl@0
   685
 */
sl@0
   686
void CMdfVideoEncodeHwDeviceAdapter::SendSupplementalInfoL(const TDesC8& /* aData */, const TTimeIntervalMicroSeconds& /* aTimestamp */)
sl@0
   687
	{
sl@0
   688
	User::Leave(KErrNotSupported);
sl@0
   689
	}
sl@0
   690
sl@0
   691
/**
sl@0
   692
 @see CMMFVideoEncodeHwDevice
sl@0
   693
 */
sl@0
   694
void CMdfVideoEncodeHwDeviceAdapter::CancelSupplementalInfo()
sl@0
   695
	{
sl@0
   696
	// Function is not supported.
sl@0
   697
	}
sl@0
   698
sl@0
   699
/**
sl@0
   700
 @see CMMFVideoEncodeHwDevice
sl@0
   701
 */
sl@0
   702
void CMdfVideoEncodeHwDeviceAdapter::GetOutputBufferStatus(TUint& aNumFreeBuffers, TUint& aTotalFreeBytes)
sl@0
   703
	{
sl@0
   704
	// We have one output buffer, which has a max size of one raw frame.
sl@0
   705
	aNumFreeBuffers = 1;
sl@0
   706
	aTotalFreeBytes = iDataBuffers[0].iData.Size();
sl@0
   707
	}
sl@0
   708
sl@0
   709
/**
sl@0
   710
 @see CMMFVideoEncodeHwDevice
sl@0
   711
 */
sl@0
   712
void CMdfVideoEncodeHwDeviceAdapter::ReturnBuffer(TVideoOutputBuffer* /*aBuffer*/)
sl@0
   713
	{
sl@0
   714
	// Receive a used output buffer (from DevVideoRecord)
sl@0
   715
	// We do nothing - we have one buffer, which is going to be re-used.
sl@0
   716
	}
sl@0
   717
sl@0
   718
/**
sl@0
   719
 @see CMMFVideoEncodeHwDevice
sl@0
   720
 */
sl@0
   721
void CMdfVideoEncodeHwDeviceAdapter::PictureLoss()
sl@0
   722
	{
sl@0
   723
	// Function is not supported.
sl@0
   724
	}
sl@0
   725
sl@0
   726
/**
sl@0
   727
 @see CMMFVideoEncodeHwDevice
sl@0
   728
 */
sl@0
   729
void CMdfVideoEncodeHwDeviceAdapter::PictureLoss(const TArray<TPictureId>& /* aPictures */)
sl@0
   730
	{
sl@0
   731
	// Function is not supported.
sl@0
   732
	}
sl@0
   733
sl@0
   734
/**
sl@0
   735
 @see CMMFVideoEncodeHwDevice
sl@0
   736
 */
sl@0
   737
void CMdfVideoEncodeHwDeviceAdapter::SliceLoss(TUint /* aFirstMacroblock */, TUint /* aNumMacroblocks */, const TPictureId& /* aPicture */)
sl@0
   738
	{
sl@0
   739
	// Function is not supported.
sl@0
   740
	}
sl@0
   741
sl@0
   742
/**
sl@0
   743
 @see CMMFVideoEncodeHwDevice
sl@0
   744
 */
sl@0
   745
void CMdfVideoEncodeHwDeviceAdapter::ReferencePictureSelection(const TDesC8& /* aSelectionData */)
sl@0
   746
	{
sl@0
   747
	// Function is not supported.
sl@0
   748
	}
sl@0
   749
sl@0
   750
/**
sl@0
   751
 @see CMMFVideoRecordHwDevice
sl@0
   752
 */
sl@0
   753
void CMdfVideoEncodeHwDeviceAdapter::CommitL()
sl@0
   754
	{
sl@0
   755
	User::Leave(KErrNotSupported);
sl@0
   756
	}
sl@0
   757
sl@0
   758
/**
sl@0
   759
 @see CMMFVideoRecordHwDevice
sl@0
   760
 */
sl@0
   761
void CMdfVideoEncodeHwDeviceAdapter::Revert()
sl@0
   762
	{
sl@0
   763
	// Function is not supported.
sl@0
   764
	}
sl@0
   765
sl@0
   766
/**
sl@0
   767
 @see CMMFVideoEncodeHwDevice
sl@0
   768
 */
sl@0
   769
void CMdfVideoEncodeHwDeviceAdapter::SetProxy(MMMFDevVideoRecordProxy& aProxy)
sl@0
   770
	{
sl@0
   771
	ASSERT(!iProxy);
sl@0
   772
	iProxy = &aProxy;
sl@0
   773
	}
sl@0
   774
sl@0
   775
void CMdfVideoEncodeHwDeviceAdapter::MipoWriteDataComplete(const MMdfInputPort* aInputPort, CMMFBuffer* aBuffer, TInt aErrorCode) 
sl@0
   776
	{
sl@0
   777
	if (aErrorCode != KErrNone)
sl@0
   778
		{
sl@0
   779
		iProxy->MdvrpFatalError(this, aErrorCode);
sl@0
   780
		return;
sl@0
   781
		}
sl@0
   782
	
sl@0
   783
	if (aInputPort == iEncoderPUInputPortsArray[KEncoderPUInputPortIndex])
sl@0
   784
		{
sl@0
   785
		if (aBuffer->LastBuffer())
sl@0
   786
			{
sl@0
   787
			iEncoderPU->Stop();
sl@0
   788
			}	
sl@0
   789
		else
sl@0
   790
			{
sl@0
   791
			iProxy->MdvrpReturnPicture(iCurrentPicture);
sl@0
   792
			iCurrentPicture = NULL;		
sl@0
   793
			}
sl@0
   794
		}
sl@0
   795
	}
sl@0
   796
	
sl@0
   797
sl@0
   798
void CMdfVideoEncodeHwDeviceAdapter::MipoDisconnectTunnelComplete(const MMdfInputPort* /*aInputPort*/, TInt aErrorCode)
sl@0
   799
	{
sl@0
   800
	if (aErrorCode != KErrNone)
sl@0
   801
		{
sl@0
   802
		iProxy->MdvrpFatalError(this, aErrorCode);
sl@0
   803
		}	
sl@0
   804
	}
sl@0
   805
	
sl@0
   806
void CMdfVideoEncodeHwDeviceAdapter::MopoDisconnectTunnelComplete(const MMdfOutputPort* /*aOutputPort*/, TInt aErrorCode)
sl@0
   807
	{
sl@0
   808
	if (aErrorCode != KErrNone)
sl@0
   809
		{
sl@0
   810
		iProxy->MdvrpFatalError(this, aErrorCode);
sl@0
   811
		}		
sl@0
   812
	}	
sl@0
   813
sl@0
   814
sl@0
   815
void CMdfVideoEncodeHwDeviceAdapter::MopoReadDataComplete(const MMdfOutputPort* aOutputPort, CMMFBuffer* aBuffer, TInt aErrorCode)
sl@0
   816
	{
sl@0
   817
	if (aErrorCode != KErrNone)
sl@0
   818
		{
sl@0
   819
		iProxy->MdvrpFatalError(this, aErrorCode);
sl@0
   820
		return;
sl@0
   821
		}		
sl@0
   822
	if (aOutputPort == iEncoderPUOutputPortsArray[KEncoderPUOutputPortIndex])
sl@0
   823
		{
sl@0
   824
		TVideoOutputBuffer buf;
sl@0
   825
		CMMFDataBuffer* dataBuffer = static_cast<CMMFDataBuffer*>(aBuffer);
sl@0
   826
		TUint bufSize = dataBuffer->BufferSize();
sl@0
   827
		buf.iData.Set(const_cast<TUint8*>((dataBuffer->Data()).Ptr()), dataBuffer->BufferSize());
sl@0
   828
sl@0
   829
		if (aBuffer->LastBuffer())
sl@0
   830
			{
sl@0
   831
			iEncoderPU->Stop();
sl@0
   832
			iProxy->MdvrpStreamEnd();
sl@0
   833
			}	
sl@0
   834
		else
sl@0
   835
			{
sl@0
   836
					
sl@0
   837
			if (!iInputStreamEnd)
sl@0
   838
				{
sl@0
   839
				// still expecting more buffers, so let client know
sl@0
   840
				iProxy->MdvrpNewBuffer(&buf);
sl@0
   841
				}
sl@0
   842
			else
sl@0
   843
				{
sl@0
   844
				dataBuffer->Data().SetLength(0);
sl@0
   845
				dataBuffer->SetLastBuffer(ETrue);
sl@0
   846
				// Write a zero sized input buffer to the port, with the last buffer flag set
sl@0
   847
				iEncoderPUInputPortsArray[KEncoderPUInputPortIndex]->MipWriteData(*iInputBuffer);
sl@0
   848
				}
sl@0
   849
			}
sl@0
   850
		}		
sl@0
   851
	}
sl@0
   852
	
sl@0
   853
sl@0
   854
void CMdfVideoEncodeHwDeviceAdapter::InitializeComplete(const CMdfProcessingUnit* /*aPu*/, TInt aErrorCode)
sl@0
   855
	{
sl@0
   856
	// KB: We have an error code, so use it not fatal error in this case	
sl@0
   857
	iProxy->MdvrpInitializeComplete(this, aErrorCode);
sl@0
   858
	}
sl@0
   859
	
sl@0
   860
void CMdfVideoEncodeHwDeviceAdapter::ExecuteComplete(const CMdfProcessingUnit* /*aPu*/, TInt aErrorCode)
sl@0
   861
	{
sl@0
   862
	if (aErrorCode != KErrNone)
sl@0
   863
		{
sl@0
   864
		iProxy->MdvrpFatalError(this, aErrorCode);
sl@0
   865
		return;
sl@0
   866
		}				
sl@0
   867
	}
sl@0
   868
	
sl@0
   869
void CMdfVideoEncodeHwDeviceAdapter::MipoRestartTunnelComplete(const MMdfInputPort* /*aInputPort*/, TInt /*aErrorCode*/)
sl@0
   870
	{
sl@0
   871
	// Function is not supported.
sl@0
   872
	}	
sl@0
   873
	
sl@0
   874
void CMdfVideoEncodeHwDeviceAdapter::MopoRestartTunnelComplete(const MMdfOutputPort* /*aOutputPort*/,  TInt /*aErrorCode*/)
sl@0
   875
	{
sl@0
   876
	// Function is not supported.
sl@0
   877
	}
sl@0
   878
sl@0
   879
/**
sl@0
   880
 @see CMMFVideoRecordHwDevice
sl@0
   881
 */
sl@0
   882
void CMdfVideoEncodeHwDeviceAdapter::SetClockSource(MMMFClockSource* /* aClock */) 
sl@0
   883
	{
sl@0
   884
	// Function is not supported.
sl@0
   885
	}
sl@0
   886
sl@0
   887
/**
sl@0
   888
 @see CMMFVideoRecordHwDevice
sl@0
   889
 */
sl@0
   890
void CMdfVideoEncodeHwDeviceAdapter::SetPreProcessTypesL(TUint32 /* aPreProcessTypes */)
sl@0
   891
	{
sl@0
   892
	User::Leave(KErrNotSupported);
sl@0
   893
	}
sl@0
   894
sl@0
   895
/**
sl@0
   896
 @see CMMFVideoRecordHwDevice
sl@0
   897
 */
sl@0
   898
void CMdfVideoEncodeHwDeviceAdapter::SetRgbToYuvOptionsL(TRgbRange /* aRange */, const TYuvFormat& /* aOutputFormat */)
sl@0
   899
	{
sl@0
   900
	User::Leave(KErrNotSupported);
sl@0
   901
	}
sl@0
   902
sl@0
   903
/**
sl@0
   904
 @see CMMFVideoRecordHwDevice
sl@0
   905
 */
sl@0
   906
void CMdfVideoEncodeHwDeviceAdapter::SetYuvToYuvOptionsL(const TYuvFormat& /* aInputFormat */, const TYuvFormat& /* aOutputFormat */)
sl@0
   907
	{
sl@0
   908
	User::Leave(KErrNotSupported);
sl@0
   909
	}
sl@0
   910
sl@0
   911
/**
sl@0
   912
 @see CMMFVideoRecordHwDevice
sl@0
   913
 */
sl@0
   914
void CMdfVideoEncodeHwDeviceAdapter::SetRotateOptionsL(TRotationType /* aRotationType */)
sl@0
   915
	{
sl@0
   916
	User::Leave(KErrNotSupported);
sl@0
   917
	}
sl@0
   918
sl@0
   919
/**
sl@0
   920
 @see CMMFVideoRecordHwDevice
sl@0
   921
 */
sl@0
   922
void CMdfVideoEncodeHwDeviceAdapter::SetScaleOptionsL(const TSize& /* aTargetSize */, TBool /* aAntiAliasFiltering */)
sl@0
   923
	{
sl@0
   924
	User::Leave(KErrNotSupported);
sl@0
   925
	}
sl@0
   926
sl@0
   927
/**
sl@0
   928
 @see CMMFVideoRecordHwDevice
sl@0
   929
 */
sl@0
   930
void CMdfVideoEncodeHwDeviceAdapter::SetInputCropOptionsL(const TRect& /* aRect */)
sl@0
   931
	{
sl@0
   932
	User::Leave(KErrNotSupported);
sl@0
   933
	}
sl@0
   934
sl@0
   935
/**
sl@0
   936
 @see CMMFVideoRecordHwDevice
sl@0
   937
 */
sl@0
   938
void CMdfVideoEncodeHwDeviceAdapter::SetOutputCropOptionsL(const TRect& /* aRect */)
sl@0
   939
	{
sl@0
   940
	User::Leave(KErrNotSupported);
sl@0
   941
	}
sl@0
   942
sl@0
   943
/**
sl@0
   944
 @see CMMFVideoRecordHwDevice
sl@0
   945
 */
sl@0
   946
void CMdfVideoEncodeHwDeviceAdapter::SetOutputPadOptionsL(const TSize& /* aOutputSize */, const TPoint& /* aPicturePos */)
sl@0
   947
	{
sl@0
   948
	User::Leave(KErrNotSupported);
sl@0
   949
	}
sl@0
   950
sl@0
   951
/**
sl@0
   952
 @see CMMFVideoRecordHwDevice
sl@0
   953
 */
sl@0
   954
void CMdfVideoEncodeHwDeviceAdapter::SetColorEnhancementOptionsL(const TColorEnhancementOptions& /* aOptions */)
sl@0
   955
	{
sl@0
   956
	User::Leave(KErrNotSupported);
sl@0
   957
	}
sl@0
   958
sl@0
   959
/**
sl@0
   960
 @see CMMFVideoRecordHwDevice
sl@0
   961
 */
sl@0
   962
void CMdfVideoEncodeHwDeviceAdapter::SetFrameStabilisationOptionsL(const TSize& /* aOutputSize */, TBool /* aFrameStabilisation */)
sl@0
   963
	{
sl@0
   964
	User::Leave(KErrNotSupported);
sl@0
   965
	}
sl@0
   966
sl@0
   967
/**
sl@0
   968
 @see CMMFVideoRecordHwDevice
sl@0
   969
 */
sl@0
   970
void CMdfVideoEncodeHwDeviceAdapter::SetCustomPreProcessOptionsL(const TDesC8& /* aOptions */)
sl@0
   971
	{
sl@0
   972
	User::Leave(KErrNotSupported);
sl@0
   973
	}
sl@0
   974
sl@0
   975