diff -r 000000000000 -r 951a5db380a0 videoeditorengine/h263decoder/src/vdeimb.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/videoeditorengine/h263decoder/src/vdeimb.cpp Fri Jan 29 14:08:33 2010 +0200 @@ -0,0 +1,185 @@ +/* +* 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: +* Individual image buffer handling. +* +*/ + + +/* + * Includes + */ + + +#include "h263dConfig.h" +#include "vdeimb.h" + +#include "vde.h" + + +/* + * Global functions + */ + +/* {{-output"vdeImbAlloc.txt"}} */ +/* + * vdeImbAlloc + * + * Parameters: + * width width of the luminance image in pixels + * height height of the luminance image in pixels + * + * Function: + * This function allocates and initializes a new image buffer of + * requested size. + * + * Returns: + * a pointer to the created image buffer, + * or NULL if the function failed + * + * + */ + +vdeImb_t *vdeImbAlloc(int width, int height, int fYuvNeeded) +/* {{-output"vdeImbAlloc.txt"}} */ +{ + vdeImb_t *imb; + + imb = (vdeImb_t *) vdeMalloc(sizeof(vdeImb_t)); + if (imb == NULL) + return NULL; + memset(imb, 0, sizeof(vdeImb_t)); + + + imb->drawItem = renDriAlloc(width, height, fYuvNeeded); + if (imb->drawItem == NULL) + goto errRenDriAlloc; + { + int numMBsInPicture; + + numMBsInPicture = width * height / 256; + + imb->yQuantParams = (int *) vdeMalloc(numMBsInPicture * sizeof(int)); + if (imb->yQuantParams == NULL) + goto errYQuantParams; + + imb->uvQuantParams = (int *) vdeMalloc(numMBsInPicture * sizeof(int)); + if (imb->uvQuantParams == NULL) + goto errUVQuantParams; + + } + + return imb; + + /* Error situations: release everything in reverse order */ + +errUVQuantParams: + + vdeDealloc(imb->yQuantParams); +errYQuantParams: + + renDriFree(imb->drawItem); + +errRenDriAlloc: + + vdeDealloc(imb); + + return NULL; +} + + +/* {{-output"vdeImbCopyParameters.txt"}} */ +/* + * vdeImbCopyParameters + * + * Parameters: + * dstImb destination image buffer + * srcImb source image buffer + * + * Function: + * This function copies the srcImb structure to the dstImb structure. + * All other parameters are copied but the actual picture contents. + * The function handles nested structures correctly. + * + * Returns: + * (See vde.h for descriptions of return values.) + * VDE_OK + * VDE_ERROR + * + * + */ + +int vdeImbCopyParameters(vdeImb_t *dstImb, const vdeImb_t *srcImb) +/* {{-output"vdeImbCopyParameters.txt"}} */ +{ + /* drawItem */ + renDriCopyParameters(dstImb->drawItem, srcImb->drawItem); + + dstImb->fReferenced = srcImb->fReferenced; + dstImb->tr = srcImb->tr; + dstImb->trRef = srcImb->trRef; + + { + int numOfMBs = renDriNumOfMBs(srcImb->drawItem); + + /* yQuantParams */ + memcpy( + dstImb->yQuantParams, + srcImb->yQuantParams, + numOfMBs * sizeof(int)); + + /* uvQuantParams */ + memcpy( + dstImb->uvQuantParams, + srcImb->uvQuantParams, + numOfMBs * sizeof(int)); + + } + + return VDE_OK; +} + + +/* {{-output"vdeImbDealloc.txt"}} */ +/* + * vdeImbDealloc + * + * Parameters: + * imb a pointer to image buffer to destroy + * + * Function: + * This function deallocates the given image buffer. + * + * Returns: + * Nothing + * + * + */ + +void vdeImbDealloc(vdeImb_t *imb) +/* {{-output"vdeImbDealloc.txt"}} */ +{ + if (!imb) + return; + + if (imb->drawItem) + renDriFree(imb->drawItem); + + vdeDealloc(imb->yQuantParams); + vdeDealloc(imb->uvQuantParams); + + vdeDealloc(imb); +} +// End of File