diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/src/vdefrt.cpp --- a/videoeditorengine/h263decoder/src/vdefrt.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,666 +0,0 @@ -/* -* 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: -* Frame type -dependent settings. -* -*/ - - - - -/* - * Includes - */ - - -#include "h263dConfig.h" - -#include "vdefrt.h" -#include "vde.h" -#include "h263dapi.h" - - - -/* - * Defines - */ - -/* The following two definitions are used to indicate that all image - widths/heights belong to the scope of the correponding setting. */ -#define VDEFRT_ALL_WIDTHS 0 -#define VDEFRT_ALL_HEIGHTS 0 - - -/* - * Structures and typedefs - */ - -/* Size list item */ -typedef struct { - LST_ITEM_SKELETON - - int width; /* image width associated with this item */ - int height; /* image height associated with this item */ - u_char fSnapshot; /* snapshot flag associated with this item */ - - u_int32 dataHandle; /* handle to generic data */ - void (*dealloc) (void *); /* function for dataHandle dealloction */ -} vdeFrtSizeListItem_t; - -/* NOTE: Currently the snapshot scope must be used together with the frame - size scope. It is not possible to store or retrieve an item based - on the snapshot flag only. */ - -/* - * Local function prototypes - */ - -static int vdeFrtRemoveAll(vdeFrtStore_t *store); - -static int vdeFrtSeekSize(lst_t *sizeList, int width, int height, - vdeFrtSizeListItem_t **seekHit); - -static int vdeFrtSeekItem(lst_t *sizeList, int width, int height, - u_char fSnapshot, vdeFrtSizeListItem_t **seekHit); - - -/* - * Global functions - */ - -/* {{-output"vdeFrtClose.txt"}} */ -/* - * vdeFrtClose - * - * Parameters: - * store a pointer to a frame type store - * - * Function: - * This function closes the given frame type store. - * - * Returns: - * VDE_OK if the function was successful - * VDE_ERROR if an error occured - * - * - */ - -int vdeFrtClose(vdeFrtStore_t *store) -/* {{-output"vdeFrtClose.txt"}} */ -{ - int retValue; - - retValue = vdeFrtRemoveAll(store); - if (retValue < 0) - return retValue; - - if (lstClose(&store->sizeList) < 0) - return VDE_ERROR; - - return VDE_OK; -} - - -/* {{-output"vdeFrtGetItem.txt"}} */ -/* - * vdeFrtGetItem - * - * Parameters: - * store a pointer to a frame type store - * frameType specifies the frame type for the wanted item - * item used to return an item from the store - * - * Function: - * This function fetches the item from the given store which corresponds - * to the given frame type. - * - * Returns: - * VDE_OK if the function was successful - * VDE_ERROR if an error occured - * - * - */ - -int vdeFrtGetItem(vdeFrtStore_t *store, h263dFrameType_t *frameType, u_int32 *item) -/* {{-output"vdeFrtGetItem.txt"}} */ -{ - switch (frameType->scope) { - case H263D_FTYPE_NDEF: - case H263D_FTYPE_SIZE + H263D_FTYPE_SNAPSHOT: - { - int retValue; - vdeFrtSizeListItem_t *listItem; - - /* seek item with matching size and snapshot flag */ - retValue = vdeFrtSeekItem(&store->sizeList, frameType->width, - frameType->height, frameType->fSnapshot, &listItem); - if (retValue < 0) - return retValue; - - if (listItem) - *item = listItem->dataHandle; - - else { - if (lstTail(&store->sizeList, (void **) &listItem) < 0) - return VDE_ERROR; - - /* If a default item exists */ - if (listItem && - listItem->width == VDEFRT_ALL_WIDTHS && - listItem->height == VDEFRT_ALL_HEIGHTS) - *item = listItem->dataHandle; - - else { - *item = 0; - return VDE_OK_NOT_AVAILABLE; - } - } - - return VDE_OK; - - } - - case H263D_FTYPE_SIZE: - { - int retValue; - vdeFrtSizeListItem_t *listItem; - - retValue = vdeFrtSeekSize(&store->sizeList, frameType->width, - frameType->height, &listItem); - if (retValue < 0) - return retValue; - - if (listItem) - *item = listItem->dataHandle; - - else { - if (lstTail(&store->sizeList, (void **) &listItem) < 0) - return VDE_ERROR; - - /* If a default item exists */ - if (listItem && - listItem->width == VDEFRT_ALL_WIDTHS && - listItem->height == VDEFRT_ALL_HEIGHTS) - *item = listItem->dataHandle; - - else { - *item = 0; - return VDE_OK_NOT_AVAILABLE; - } - } - - return VDE_OK; - } - - case H263D_FTYPE_DEF: - { - vdeFrtSizeListItem_t *tailItem; - - if (lstTail(&store->sizeList, (void **) &tailItem) < 0) - return VDE_ERROR; - - /* If a default item exists */ - if (tailItem->width == VDEFRT_ALL_WIDTHS && - tailItem->height == VDEFRT_ALL_HEIGHTS) { - *item = tailItem->dataHandle; - return VDE_OK; - } - - else { - *item = 0; - return VDE_OK_NOT_AVAILABLE; - } - } - - default: - return VDE_ERROR; - } -} - - -/* {{-output"vdeFrtOpen.txt"}} */ -/* - * vdeFrtOpen - * - * Parameters: - * store a pointer to a frame type store - * - * Function: - * This function initializes the given frame type store. - * - * Returns: - * VDE_OK if the function was successful - * VDE_ERROR if an error occured - * - * - */ - -int vdeFrtOpen(vdeFrtStore_t *store) -/* {{-output"vdeFrtOpen.txt"}} */ -{ - if (lstOpen(&store->sizeList) < 0) - return VDE_ERROR; - - return VDE_OK; -} - - -/* {{-output"vdeFrtPutItem.txt"}} */ -/* - * vdeFrtPutItem - * - * Parameters: - * store a pointer to a frame type store - * frameType specifies the frame type for the given item - * item a data handle to store - * removeItem a function which is used to deallocate - * the data handle when it is removed from - * the store. NULL may be given if no - * deallocation is needed. - * - * Function: - * This function puts a data handle to the frame type store. - * - * Returns: - * VDE_OK if the function was successful - * VDE_ERROR if an error occured - * - * - */ - -int vdeFrtPutItem(vdeFrtStore_t *store, h263dFrameType_t *frameType, - u_int32 item, void (*removeItem) (void *)) -/* {{-output"vdeFrtPutItem.txt"}} */ -{ - switch (frameType->scope) { - case H263D_FTYPE_ALL: - { - int retValue; - vdeFrtSizeListItem_t *newItem; - - retValue = vdeFrtRemoveAll(store); - if (retValue < 0) - return retValue; - - newItem = (vdeFrtSizeListItem_t *) - vdeMalloc(sizeof(vdeFrtSizeListItem_t)); - if (!newItem) - return VDE_ERROR; - - newItem->width = VDEFRT_ALL_WIDTHS; - newItem->height = VDEFRT_ALL_HEIGHTS; - newItem->fSnapshot = 0; - newItem->dataHandle = item; - newItem->dealloc = removeItem; - - if (lstAdd(&store->sizeList, newItem) < 0) { - vdeDealloc(newItem); - return VDE_ERROR; - } - - return VDE_OK; - } - - case H263D_FTYPE_DEF: - { - vdeFrtSizeListItem_t *tailItem; - - if (lstTail(&store->sizeList, (void **) &tailItem) < 0) - return VDE_ERROR; - - /* If a default item exists */ - if (tailItem->width == VDEFRT_ALL_WIDTHS && - tailItem->height == VDEFRT_ALL_HEIGHTS) { - - if (tailItem->dealloc) - tailItem->dealloc((void *) tailItem->dataHandle); - - /* Overwrite its data handle */ - tailItem->dataHandle = item; - } - - else { - vdeFrtSizeListItem_t *newItem; - - newItem = (vdeFrtSizeListItem_t *) - vdeMalloc(sizeof(vdeFrtSizeListItem_t)); - if (!newItem) - return VDE_ERROR; - - newItem->width = VDEFRT_ALL_WIDTHS; - newItem->height = VDEFRT_ALL_HEIGHTS; - newItem->fSnapshot = 0; - newItem->dataHandle = item; - newItem->dealloc = removeItem; - - if (lstEnd(&store->sizeList) < 0) { - vdeDealloc(newItem); - return VDE_ERROR; - } - - if (lstAdd(&store->sizeList, newItem) < 0) { - vdeDealloc(newItem); - return VDE_ERROR; - } - } - - return VDE_OK; - } - - case H263D_FTYPE_SIZE: - { - int retValue; - vdeFrtSizeListItem_t *listItem; - - retValue = vdeFrtSeekSize(&store->sizeList, frameType->width, - frameType->height, &listItem); - if (retValue < 0) - return retValue; - - /* If a setting with the same size already exists */ - if (listItem) { - - if (listItem->dealloc) - listItem->dealloc((void *) listItem->dataHandle); - - /* Overwrite its data handle */ - listItem->dataHandle = item; - } - - else { - vdeFrtSizeListItem_t *newItem; - - if (lstHead(&store->sizeList, (void **) &listItem) < 0) - return VDE_ERROR; - - newItem = (vdeFrtSizeListItem_t *) - vdeMalloc(sizeof(vdeFrtSizeListItem_t)); - if (!newItem) - return VDE_ERROR; - - newItem->width = frameType->width; - newItem->height = frameType->height; - newItem->fSnapshot = 0; - newItem->dataHandle = item; - newItem->dealloc = removeItem; - - if (lstAdd(&store->sizeList, newItem) < 0) { - vdeDealloc(newItem); - return VDE_ERROR; - } - } - - return VDE_OK; - } - - case H263D_FTYPE_SIZE + H263D_FTYPE_SNAPSHOT: - { - int retValue; - vdeFrtSizeListItem_t *listItem; - - retValue = vdeFrtSeekItem(&store->sizeList, frameType->width, - frameType->height, frameType->fSnapshot, &listItem); - if (retValue < 0) - return retValue; - - /* If a setting with the same parameters already exists */ - if (listItem) { - - if (listItem->dealloc) - listItem->dealloc((void *) listItem->dataHandle); - - /* Overwrite its data handle */ - listItem->dataHandle = item; - } - - else { - vdeFrtSizeListItem_t *newItem; - - if (lstHead(&store->sizeList, (void **) &listItem) < 0) - return VDE_ERROR; - - newItem = (vdeFrtSizeListItem_t *) - vdeMalloc(sizeof(vdeFrtSizeListItem_t)); - if (!newItem) - return VDE_ERROR; - - newItem->width = frameType->width; - newItem->height = frameType->height; - newItem->fSnapshot = frameType->fSnapshot; - newItem->dataHandle = item; - newItem->dealloc = removeItem; - - if (lstAdd(&store->sizeList, newItem) < 0) { - vdeDealloc(newItem); - return VDE_ERROR; - } - } - - return VDE_OK; - - } - default: - return VDE_ERROR; - } -} - - -/* {{-output"vdeFrtRemoveItem.txt"}} */ -/* - * vdeFrtRemoveItem - * - * Parameters: - * store a pointer to a frame type store - * frameType specifies the frame type for the item to remove - * - * Function: - * This function removes an entry from the given frame type store. - * The entry corresponds to the given frame type. - * - * Returns: - * VDE_OK if the function was successful - * VDE_ERROR if an error occured - * - * - */ - -int vdeFrtRemoveItem(vdeFrtStore_t *store, h263dFrameType_t *frameType) -/* {{-output"vdeFrtRemoveItem.txt"}} */ -{ - switch (frameType->scope) { - case H263D_FTYPE_ALL: - { - int retValue; - - retValue = vdeFrtRemoveAll(store); - if (retValue < 0) - return retValue; - - return VDE_OK; - } - - case H263D_FTYPE_DEF: - { - vdeFrtSizeListItem_t *tailItem; - - if (lstTail(&store->sizeList, (void **) &tailItem) < 0) - return VDE_ERROR; - - /* If a default item exists */ - if (tailItem && tailItem->width == VDEFRT_ALL_WIDTHS && - tailItem->height == VDEFRT_ALL_HEIGHTS) { - - /* Remove it */ - if (lstRemove(&store->sizeList, (void **) &tailItem) < 0) - return VDE_ERROR; - - if (tailItem->dealloc) - tailItem->dealloc((void *) tailItem->dataHandle); - - vdeDealloc(tailItem); - } - - return VDE_OK; - } - - case H263D_FTYPE_SIZE: - { - int retValue; - vdeFrtSizeListItem_t *listItem; - - retValue = vdeFrtSeekSize(&store->sizeList, frameType->width, - frameType->height, &listItem); - if (retValue < 0) - return retValue; - - /* If an item with the same size already exists */ - if (listItem) { - - /* Remove it */ - if (lstRemove(&store->sizeList, (void **) &listItem) < 0) - return VDE_ERROR; - - if (listItem->dealloc) - listItem->dealloc((void *) listItem->dataHandle); - - vdeDealloc(listItem); - } - - return VDE_OK; - } - - case H263D_FTYPE_SIZE + H263D_FTYPE_SNAPSHOT: - { - int retValue; - vdeFrtSizeListItem_t *listItem; - - retValue = vdeFrtSeekItem(&store->sizeList, frameType->width, - frameType->height, frameType->fSnapshot, &listItem); - if (retValue < 0) - return retValue; - - /* If an item with the same parameters already exists */ - if (listItem) { - - /* Remove it */ - if (lstRemove(&store->sizeList, (void **) &listItem) < 0) - return VDE_ERROR; - - if (listItem->dealloc) - listItem->dealloc((void *) listItem->dataHandle); - - vdeDealloc(listItem); - } - return VDE_OK; - - } - - default: - return VDE_ERROR; - } -} - - -/* - * Local functions - */ - -/* - * vdeFrtRemoveAll - * This function removes all items from the given store. - */ - -static int vdeFrtRemoveAll(vdeFrtStore_t *store) -{ - vdeFrtSizeListItem_t *listItem; - - if (lstHead(&store->sizeList, (void **) &listItem) < 0) - return VDE_ERROR; - - do { - if (lstRemove(&store->sizeList, (void **) &listItem) < 0) - return VDE_ERROR; - - if (listItem) { - if (listItem->dealloc) - listItem->dealloc((void *) listItem->dataHandle); - vdeDealloc(listItem); - } - } while (listItem); - - return VDE_OK; -} - - -/* - * vdeFrtSeekSize - * This function seeks for the given width and height from the given - * size list. It returns the matching size list item (if there is one). - */ - -static int vdeFrtSeekSize(lst_t *sizeList, int width, int height, - vdeFrtSizeListItem_t **seekHit) -{ - vdeFrtSizeListItem_t *listItem; - - *seekHit = NULL; - - if (lstHead(sizeList, (void **) &listItem) < 0) - return VDE_ERROR; - - while (listItem) { - if (lstNext(sizeList, (void **) &listItem) < 0) - return VDE_ERROR; - - if (listItem && listItem->width == width && listItem->height == height) { - *seekHit = listItem; - break; - } - } - - return VDE_OK; -} - -/* - * vdeFrtSeekItem - * This function seeks for an item with the given parameters from the - * size list. It returns the matching list item (if there is one). - */ - -static int vdeFrtSeekItem(lst_t *sizeList, int width, int height, - u_char fSnapshot, vdeFrtSizeListItem_t **seekHit) -{ - vdeFrtSizeListItem_t *listItem; - - *seekHit = NULL; - - if (lstHead(sizeList, (void **) &listItem) < 0) - return VDE_ERROR; - - while (listItem) { - - if (listItem && listItem->width == width && listItem->height == height && - listItem->fSnapshot == fSnapshot) { - *seekHit = listItem; - break; - } - if (lstNext(sizeList, (void **) &listItem) < 0) - return VDE_ERROR; - } - - return VDE_OK; -} - -// End of File