First public contribution.
1 // Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
2 // All rights reserved.
3 // This component and the accompanying materials are made available
4 // under the terms of "Eclipse Public License v1.0"
5 // which accompanies this distribution, and is available
6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
8 // Initial Contributors:
9 // Nokia Corporation - initial contribution.
16 #ifndef __MMF_VIDEOINPUT_H__
17 #define __MMF_VIDEOINPUT_H__
19 // Standard EPOC32 includes required by this header file
26 // Public Media Server includes
27 #include <mmf/server/mmfdatasink.h>
28 #include <mmf/server/mmfdatasource.h>
29 #include <mmf/server/mmfdatapath.h>
30 #include <mmf/server/mmfdatasourcesink.hrh>
32 #include <mmf/server/mmfcodec.h>
33 #include <mmf/server/mmfdatabuffer.h>
34 #include <mmf/common/mmfpaniccodes.h>
36 #include "mmfVideoInputInterfaceUIDs.hrh"
37 #ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
38 #include <mmf/common/mmfhelper.h>
42 const TUint KVideoInputDefaultFrameSize = 0x1000;
43 //#define KVideoInputCanResample //uncomment this to allow Video Input to sample rate convert
44 const TUid KUidMmfVideoInput = {KMmfUidVideoInputInterface};
48 void Panic(TInt aPanicCode);
50 class MMMFVideoInput : public MDataSource
52 Interface class to allow dynamic linkage to CMMFVideoInput.
57 inline static MMMFVideoInput* NewVideoInputL(TUid aImplementationUid, const TDesC8& aInitData);
59 virtual void HWFillBufferL(CMMFBuffer* aBuffer, MDataSink* aConsumer) = 0;
62 inline MMMFVideoInput() : MDataSource(KUidMmfVideoInput) {};
65 inline MMMFVideoInput* MMMFVideoInput::NewVideoInputL( TUid aImplementationUid, const TDesC8& aInitData )
67 //make sure the cast will be ok by checking the uid is what we expect
68 // __ASSERT_ALWAYS(aImplementationUid==KUidMmfVideoInput, Panic(EMMFVideoInputPanicBadUID));
69 MMMFVideoInput* retPtr = STATIC_CAST(MMMFVideoInput*, MDataSource::NewSourceL(aImplementationUid, aInitData));
74 class CMMFVideoInput : public CBase, public MMMFVideoInput
76 The interface into DevSound
81 static MDataSource* NewSourceL();
82 virtual ~CMMFVideoInput();
84 //MDataSource mixin implementations
85 virtual TFourCC SourceDataTypeCode(TMediaId /*aMediaId*/);
86 virtual void FillBufferL(CMMFBuffer* aBuffer, MDataSink* aConsumer,TMediaId /*aMediaId*/);//called by a MDataSink to request buffer fill
87 virtual void BufferEmptiedL(CMMFBuffer* aBuffer); //called by MDataSink to pass back emptied buffer to the source
88 virtual TBool CanCreateSourceBuffer();
89 virtual CMMFBuffer* CreateSourceBufferL(TMediaId /*aMediaId*/);
90 //XXX optimal source buffer size creation may depend on the sink buffer & vice versa
91 virtual CMMFBuffer* CreateSourceBufferL(TMediaId aMediaId, CMMFBuffer& /*aSinkBuffer*/)
92 {return CreateSourceBufferL(aMediaId);};
93 virtual CMMFBuffer* CreateSourceBufferL(TMediaId /*aMediaId*/, TBool &aReference);
94 //XXX optimal source buffer size creation may depend on the sink buffer & vice versa
95 virtual CMMFBuffer* CreateSourceBufferL(TMediaId aMediaId, CMMFBuffer& /*aSinkBuffer*/, TBool &aReference)
96 {return CreateSourceBufferL(aMediaId, aReference);};
97 virtual TInt SourceThreadLogon(MAsyncEventHandler& aEventHandler);
98 virtual void SourceThreadLogoff();
99 virtual void SourcePrimeL();
100 virtual void SourceStopL();
101 virtual void SourcePlayL();
102 virtual void SetSourcePrioritySettings(const TMMFPrioritySettings& aPrioritySettings);
104 virtual void NegotiateL(MDataSink& aSink);
106 // MMMFVideoInput mixin implementations
108 void HWFillBufferL(CMMFBuffer* aBuffer, MDataSink* aConsumer); //called by a FillBufferL if using HW codec
110 TRequestStatus iBufferStatus;
113 virtual void ConstructSourceL( const TDesC8& aInitData ) ;
116 inline CMMFVideoInput() {}
118 MAsyncEventHandler* iEventHandler;
146 MDataSink* iConsumer;
148 CHardwareCodec* iHWCodec;
151 TBool iFirstBufferRead;
153 TBool iDevSoundLoaded;
157 TInt iMMFDevsoundError;
159 TMMFPrioritySettings iPrioritySettings;
161 TUint iSinkSampleRate;
164 TBool iNeedsSWConversion;
165 CMMFChannelAndSampleRateConverterFactory* iChannelAndSampleRateConverterFactory;
166 CMMFChannelAndSampleRateConverter* iChannelAndSampleRateConverter;
167 CMMFDataBuffer* iConvertBuffer;
168 CMMFBuffer* iBufferToEmpty;
169 CMMFBuffer* iDevSoundBuf;