videoeditorengine/vedtranscoder/inc/buffermanagementci.h
changeset 0 951a5db380a0
--- /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 <mmf/devvideo/devvideobase.h>
+
+
+// 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