--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/videoeditorengine/h263decoder/src/vdemain.cpp Fri Jan 29 14:08:33 2010 +0200
@@ -0,0 +1,448 @@
+/*
+* 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:
+* Video decoder engine main module.
+*
+*/
+
+
+
+
+/*
+ * Includes
+ */
+
+#include "h263dConfig.h"
+
+#include "vdemain.h"
+#include "renapi.h"
+#include "rendri.h"
+#include "h263dext.h"
+#include "vde.h"
+
+#include "biblin.h"
+
+
+/*
+ * Global functions
+ */
+
+/* {{-output"vdeFree.txt"}} */
+/*
+ * vdeFree
+ *
+ *
+ * Parameters:
+ * Nothing
+ *
+ * Function:
+ * This function deinitializes this module.
+ *
+ * Returns:
+ * VDE_OK if the function was successful
+ * VDE_ERROR indicating a general error
+ *
+ *
+ */
+
+int vdeFree(void)
+/* {{-output"vdeFree.txt"}} */
+{
+ if (vdcFree() < 0)
+ return VDE_ERROR;
+
+ return VDE_OK;
+}
+
+
+/* {{-output"vdeGetLatestFrame.txt"}} */
+/*
+ * vdeGetLatestFrame
+ *
+ *
+ * Parameters:
+ * hInstance instance data
+ *
+ * ppy, ppu, ppv used to return Y, U and V frame pointers
+ *
+ * pLumWidth, pLumHeight used to return luminance image width and height
+ * Note these values can be counted on even if
+ * the function returns an error.
+ *
+ * pFrameNum used to return frame number
+ *
+ * Function:
+ * This function returns the latest correctly decoded frame
+ * (and some side-information).
+ *
+ * Note that no thread synchronization is used since the function
+ * is used only from the mobidntc.c and it is very likely that
+ * the same decoder instance is used only from a single calling
+ * thread at the same time.
+ *
+ * Returns:
+ * VDE_OK if the function was successful
+ * VDE_ERROR indicating a general error
+ */
+
+
+int vdeGetLatestFrame(
+ vdeHInstance_t hInstance,
+ u_char **ppy, u_char **ppu, u_char **ppv,
+ int *pLumWidth, int *pLumHeight,
+ int *pFrameNum)
+/* {{-output"vdeGetLatestFrame.txt"}} */
+{
+ int
+ retValue;
+
+ vdeImb_t
+ *pImb;
+
+ vdeImsItem_t
+ *pImsItem;
+
+ vdeInstance_t
+ *instance = (vdeInstance_t *) hInstance;
+
+
+ vdeAssert(instance != NULL);
+
+ /* Ensure that image width and height are returned anyway */
+ *pLumWidth = instance->lumWidth;
+ *pLumHeight = instance->lumHeight;
+
+ retValue = vdeImsGetReference(
+ &instance->imageStore,
+ VDEIMS_REF_LATEST, 0,
+ &pImsItem);
+ if (retValue < 0)
+ return retValue;
+
+ if (!pImsItem)
+ return VDE_ERROR;
+
+ pImb = pImsItem->imb;
+
+ if (vdeImbYUV(pImb, ppy, ppu, ppv, pLumWidth, pLumHeight) < 0)
+ return VDE_ERROR;
+
+ *pFrameNum = renDriFrameNumber(pImb->drawItem);
+
+ return VDE_OK;
+}
+
+
+
+/* {{-output"vdeInit.txt"}} */
+/*
+ * vdeInit
+ *
+ *
+ * Parameters:
+ * param a h263dOpen_t structure containing
+ * the initialization parameters
+ *
+ * Function:
+ * This function allocates and initializes an H.263 video decoder engine
+ * (VDE) instance.
+ *
+ * Returns:
+ * a handle to the new instance or
+ * NULL if the initialization fails
+ *
+ *
+ */
+
+vdeHInstance_t vdeInit(h263dOpen_t *param)
+/* {{-output"vdeInit.txt"}} */
+{
+ vdeInstance_t *instance;
+
+ vdeAssert(param);
+ vdeAssert(!param->fRPS || (param->fRPS && param->numReferenceFrames > 1));
+
+ instance = (vdeInstance_t *)
+ vdeMalloc(sizeof(vdeInstance_t) + param->freeSpace);
+ if (instance == NULL)
+ goto errInstanceAllocation;
+ memset(instance, 0, sizeof(vdeInstance_t));
+
+ if (param->lumWidth % 16)
+ param->lumWidth = (param->lumWidth / 16 + 1) * 16;
+
+ if (param->lumHeight % 16)
+ param->lumHeight = (param->lumHeight / 16 + 1) * 16;
+
+ if (vdeImsOpen(&instance->imageStore, param->numPreallocatedFrames,
+ param->lumWidth, param->lumHeight) < 0)
+ goto errVdeImsOpen;
+
+ instance->vdcHInstance = vdcOpen(&instance->imageStore,
+ param->fRPS ? param->numReferenceFrames : 1,
+ (void *) instance);
+ if (!instance->vdcHInstance)
+ goto errVdcOpen;
+
+ if (vdeFrtOpen(&instance->renStore) < 0)
+ goto errRenStore;
+
+ if (vdeFrtOpen(&instance->startCallbackStore) < 0)
+ goto errStartCallbackStore;
+
+ if (vdeFrtOpen(&instance->endCallbackStore) < 0)
+ goto errEndCallbackStore;
+
+
+ instance->lumWidth = param->lumWidth;
+ instance->lumHeight = param->lumHeight;
+
+ return (vdeHInstance_t) instance;
+
+ /* Error cases (release resources in reverse order) */
+
+errEndCallbackStore:
+
+ vdeFrtClose(&instance->startCallbackStore);
+errStartCallbackStore:
+
+ vdeFrtClose(&instance->renStore);
+errRenStore:
+
+ vdcClose(instance->vdcHInstance);
+errVdcOpen:
+
+ vdeImsClose(&instance->imageStore);
+errVdeImsOpen:
+
+ vdeDealloc(instance);
+errInstanceAllocation:
+
+ return NULL;
+}
+
+
+/* {{-output"vdeIsINTRA.txt"}} */
+/*
+ * vdeIsINTRA
+ *
+ *
+ * Parameters:
+ * hInstance handle of instance data
+ * frameStart pointer to memory chunk containing a frame
+ * frameLength number of bytes in frame
+ *
+ * Function:
+ * This function returns 1 if the passed frame is an INTRA frame.
+ * Otherwise the function returns 0.
+ *
+ * Note:
+ * This function does not use vdeque services since it is intended to be
+ * used in non-thread version of the codec only.
+ *
+ * Returns:
+ * See above.
+ */
+
+int vdeIsINTRA(
+ vdeHInstance_t hInstance,
+ void *frameStart,
+ unsigned frameLength)
+/* {{-output"vdeIsINTRA.txt"}} */
+{
+ vdeInstance_t *instance = (vdeInstance_t *) hInstance;
+
+ vdeAssert(instance != NULL);
+
+ /* Note: We assume that vdeDetermineStreamType has been called to
+ decide whether the stream is MPEG-4 or H.263 */
+
+ if (instance->fMPEG4)
+ return vdcIsMPEGINTRA(instance->vdcHInstance, frameStart, frameLength);
+ else
+ return vdcIsINTRA(instance->vdcHInstance, frameStart, frameLength);
+}
+
+
+/* {{-output"vdeLoad.txt"}} */
+/*
+ * vdeLoad
+ *
+ *
+ * Parameters:
+ * rendererFileName file from which to get renderer functions
+ *
+ * Function:
+ * This function initializes this module.
+ *
+ * Renderer functions are dynamically loaded from the given file.
+ * If rendererFileName is NULL, renderer functions are expected to be
+ * statically linked.
+ *
+ * Returns:
+ * VDE_OK if the function was successful
+ * VDE_ERROR indicating a general error
+ *
+ *
+ */
+
+int vdeLoad(const char * /*rendererFileName*/)
+/* {{-output"vdeLoad.txt"}} */
+{
+
+ if (vdcLoad() < 0)
+ return VDE_ERROR;
+
+ return VDE_OK;
+}
+
+
+
+
+/* {{-output"vdeSetInputBuffer.txt"}} */
+/*
+ * vdeSetInputBuffer
+ *
+ *
+ * Parameters:
+ * hInstance handle of instance data
+ * buffer a new bit buffer to use
+ *
+ * Function:
+ * This function sets the bit buffer to use for decoding.
+ * It is intended that this function is used mainly in applications
+ * where frames are provided one by one from applications.
+ * Some upper level function must create a bit buffer for each frame,
+ * pass a pointer to the created bit buffer to the decoder using this
+ * function and then decode the frame.
+ *
+ * Returns:
+ * VDE_OK if the function was successful
+ * VDE_ERROR indicating a general error
+ *
+ *
+ */
+
+int vdeSetInputBuffer(vdeHInstance_t hInstance, bibBuffer_t *buffer)
+/* {{-output"vdeSetInputBuffer.txt"}} */
+{
+ vdeInstance_t *instance = (vdeInstance_t *) hInstance;
+
+ if (instance == NULL)
+ return VDE_ERROR;
+
+ instance->inBuffer = buffer;
+
+ return VDE_OK;
+}
+
+
+
+int vdeSetOutputBuffer(vdeHInstance_t hInstance, bibBuffer_t *buffer)
+/* {{-output"vdeSetOutputBuffer.txt"}} */
+{
+ vdeInstance_t *instance = (vdeInstance_t *) hInstance;
+
+ if (instance == NULL)
+ return VDE_ERROR;
+
+ instance->outBuffer = buffer;
+
+ return VDE_OK;
+}
+
+int vdeSetBufferEdit(vdeHInstance_t hInstance, bibBufferEdit_t *bufEdit)
+/* {{-output"vdeSetOutputBuffer.txt"}} */
+{
+ vdeInstance_t *instance = (vdeInstance_t *) hInstance;
+
+ if (instance == NULL)
+ return VDE_ERROR;
+
+ instance->bufEdit = bufEdit;
+
+ return VDE_OK;
+}
+
+int vdeSetVideoEditParams(vdeHInstance_t hInstance, int aColorEffect, TBool aGetDecodedFrame,
+ TInt aColorToneU, TInt aColorToneV)
+{
+ vdeInstance_t *instance = (vdeInstance_t *) hInstance;
+
+ if (instance == NULL)
+ return VDE_ERROR;
+
+ instance->iColorEffect = aColorEffect;
+ instance->iGetDecodedFrame = aGetDecodedFrame;
+ instance->iColorToneU = aColorToneU;
+ instance->iColorToneV = aColorToneV;
+
+ return VDE_OK;
+}
+
+
+
+
+
+
+
+
+
+/* {{-output"vdeShutDown.txt"}} */
+/*
+ * vdeShutDown
+ *
+ *
+ * Parameters:
+ * hInstance handle of instance data
+ *
+ * Function:
+ * This function has to be called in the end of each video sequence.
+ * It frees the resources (the VDE instance) allocated by vdeInit.
+ *
+ * Returns:
+ * VDE_OK if the closing was successful
+ * VDE_ERROR indicating a general error
+ *
+ *
+ */
+
+int vdeShutDown(vdeHInstance_t hInstance)
+/* {{-output"vdeShutDown.txt"}} */
+{
+ int retValue = VDE_OK;
+ vdeInstance_t *instance = (vdeInstance_t *) hInstance;
+
+ if (vdcClose(instance->vdcHInstance) < 0)
+ retValue = VDE_ERROR;
+
+ if (vdeFrtClose(&instance->endCallbackStore) < 0)
+ retValue = VDE_ERROR;
+
+ if (vdeFrtClose(&instance->startCallbackStore) < 0)
+ retValue = VDE_ERROR;
+
+ if (vdeFrtClose(&instance->renStore) < 0)
+ retValue = VDE_ERROR;
+
+ if (vdeImsClose(&instance->imageStore) < 0)
+ retValue = VDE_ERROR;
+
+ vdeDealloc(instance);
+
+ return retValue;
+}
+
+// End of File