diff -r 000000000000 -r 951a5db380a0 videoeditorengine/vedtranscoder/inc/buffermanagementci.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/videoeditorengine/vedtranscoder/inc/buffermanagementci.h Fri Jan 29 14:08:33 2010 +0200 @@ -0,0 +1,209 @@ +/* +* Copyright (c) 2010 Ixonos Plc. +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - Initial contribution +* +* Contributors: +* Ixonos Plc +* +* Description: +* +*/ + + +#ifndef BUFFERMANAGEMENTCI_H +#define BUFFERMANAGEMENTCI_H + +// INCLUDES +#include + + +// CONSTANTS + +/** Buffer Management Custom Interface UID */ +const TUid KMmfVideoBuffermanagementUid = { 0x10204bea }; + + +// CLASS DECLARATIONS + +class MMmfVideoBufferManagementObserver; + +/** + * Buffer Management Custom Interface main interface class. Media + * devices that support this custom interface implement this class. + * + * The Buffer Management Custom Interface enchances the MDF DevVideo + * data flow model by enabling target media devices to allocate input + * data buffers for uncompressed data input. This lets client + * applications and source media devices write the input data directly + * into a suitable memory area that the target media device can use, + * possibly eliminating one extra memory copy from the data path. This + * is especially important with hardware implementations, where the + * target hardware may only have access to specially allocated memory + * that only the media device can allocate. + * + * The interface is typically implemented in pre-processing, encoding, + * and post-processing media devices. It is mainly used for video + * encoder memory buffer input in applications like video editors, and + * when using hardware-accelerated post-processors with software video + * decoders. + */ + +class MMmfVideoBufferManagement + { +public: + /** A class used to signal the buffer options used. */ + class TBufferOptions + { + public: + /** + * The number of input buffers that the media device * + * has. This is the number of buffers the client can request * + * through MmvbmGetBufferL() before writing any back. + */ + TUint iNumInputBuffers; + + /** + * Buffer size in pixels. This should match the input data + * picture size, optionally with padding to meet coding + * standard requirements. + */ + TSize iBufferSize; + }; + + + /** + * Sets the observer object to use. The observer gets notified + * when new buffers are available and when buffers need to be + * released back to the media device. + * + * This method can only be called before the media device has + * been initialised with InitializeL(). + * + * @param aObserver The observer object to use. + */ + virtual void MmvbmSetObserver(MMmfVideoBufferManagementObserver* aObserver) = 0; + + /** + * Enables input buffer management mode. In buffer management mode + * the target media device allocates memory for input buffers and + * the client can only use input buffers allocated with + * MmvbmGetBufferL(). + * + * This method can only be called before the media device has been + * initialised with InitializeL(). This method must be called if + * the client uses MmvbmGetBufferL(). + * + * @param aEnable ETrue if input buffer management mode is used. + */ + virtual void MmvbmEnable(TBool aEnable) = 0; + + /** + * Sets the buffer options to use. The client can request the + * number of input buffers that should be available, but typically + * only few (one or two) buffers can be used. + * + * This method can only be called before the media device has been + * initialised with InitializeL(). + * + * @param aOptions The buffer options to use, see TBufferOptions. + * + * @leave KErrNotSupported The requested buffer options are not + * supported. Typically the client has requested too many input + * buffers. + */ + virtual void MmvbmSetBufferOptionsL(const TBufferOptions& aOptions) = 0; + + /** + * Gets the buffer options currently in use. + * + * This method can only be called before the media device has been + * initialised with InitializeL(). + * + * @param aOptions Target buffer options data structure. + */ + virtual void MmvbmGetBufferOptions(TBufferOptions& aOptions) = 0; + + /** + * Gets a new input picture buffer. The client can then write data + * into the buffer and write it back to the media device with + * WritePictureL(). + * + * This method can only be called after the media device has been + * initialised with InitializeL(). This method can only be called + * in buffer management mode, i.e. if the client has called + * MmvbmEnable(ETrue). + * + * Note that target-allocated and client-allocated input buffers + * cannot be mixed. In buffer management mode only input buffers + * allocated with this method can be sent to the media device. + * + * If a client has retrieved buffers with MmvbmGetBufferL(), it + * must be prepated to release them synchronously at any point if + * MmmfBufferManagementObserver::MmvbmoReleaseBuffers() is + * called. This may happen if the target media device suddenly + * loses access to the buffers due to DSA abort, resource + * management conflict, or media device destruction. + * + * @param aSize The requested buffer size, in pixels. The buffer + * size should match the picture size set at initialisation phase, + * or otherwise suitable buffer may not be available. If the size + * is smaller than the size set at initialisation phase, the + * allocated buffer may be larger than requested. + * + * @return A new input picture buffer. If no free buffers are + * available, the return value is NULL. + * + * @leave General The method will leave if an error occurs. Lack + * of free buffers is not considered an error. + */ + virtual TVideoPicture* MmvbmGetBufferL(const TSize& aSize) = 0; + + /** + * Releases an input buffer back to the media device without using + * it. This method is mainly used as a response to a + * MmvbmReleaseBuffers() callback. + * + * @param aBuffer The buffer to release. + */ + virtual void MmvbmReleaseBuffer(TVideoPicture* aBuffer) = 0; + }; + + +/** + * An observer class for the buffer management custom interface. + * Clients and source media devices using the interface + * must implement this class. +*/ +class MMmfVideoBufferManagementObserver + { +public: + /** + * Notifies the observer that one or more new input buffers are + * available. The client can then use MmvbmGetBufferL() to get a + * buffer. + */ + virtual void MmvbmoNewBuffers() = 0; + + /** + * Notifies the observer all outstanding input buffers must be + * released immediately. The client must synchronously call + * MmvbmReleaseBuffer() for all buffers it has allocated but not + * returned before returning from this method. This method is + * mainly used when the target media device loses access to the + * buffers, as a result of a Direct Screen Access abort, resource + * management override, or media device desctruction. + */ + virtual void MmvbmoReleaseBuffers() = 0; + }; + + +#endif // BUFFERMANAGEMENTCI_H + +// End of File