videoeditorengine/h263decoder/inc/vdeimb.h
author Mikael Laine <mikael.laine@ixonos.com>
Fri, 29 Jan 2010 14:08:33 +0200
changeset 0 951a5db380a0
permissions -rw-r--r--
Committing the Video Editor package under the Eclipse Public License

/*
* 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:  
* A header file for the Video Decoder Engine Image Buffer abstract 
* data type.
*
*/


#ifndef _VDEIMB_H_
#define _VDEIMB_H_



/*
 * Includes
 */

#include "renapi.h"
#include "rendri.h"


/*
 * Defines
 */

/* Displaying status */
#define VDEIMB_NO_DISPLAYING 1
#define VDEIMB_WAITING 2
#define VDEIMB_DISPLAYED 4

/* Full-picture freeze status,
   see vdeImb_t for description of the definitions */
#define VDEIMB_FPF_REQUEST 2
#define VDEIMB_FPF_RELEASE 1
#define VDEIMB_FPF_NOT_SPECIFIED 0


/*
 * Structures and typedefs
 */

/* {{-output"vdeImb_t_info.txt" -ignore"*" -noCR}}
   vdeImb_t defines the structure of a single image buffer which is capable
   of storing one YUV 4:2:0 image and a number of paramaters as 
   side-information. The YUV image as well as the YUV to RGB conversion and
   displaying related parameters are kept in a renDrawItem_t structure.
   Decoder related parameters are stored in the vdeImb_t itself.
   One may directly refer to the member variables of the vdeImb_t structure.
   However, one should use the functions and macros in the Renderer Draw Item
   Interface for accessing the contents of the drawItem member of vdeImb_t.
   {{-output"vdeImb_t_info.txt"}} */

/* {{-output"vdeImb_t.txt"}} */
typedef struct {
   renDrawItem_t *drawItem;   /* renderer draw item which actually contains
                                 the frame memory (and some parameters) */

   int fReferenced;           /* non-zero if the image buffer is going to be
                                 used as a reference frame. Otherwise, zero. */

   int tr;                    /* the TR field of H.263 which is associated with
                                 the image buffer */

   
   int trRef;                 /* Referenced for a TR prediction,
                                 0 if the frame is a normal picture referenced
                                   once at maximum (in the next picture),
                                 1 if the frame is referenced multiple times
                                   in the future frames.
                                 This information is used to update reference
                                 picture data structures. It is neede at least
                                 in streaming applications. */

   int *yQuantParams;      /* luminance quantizer parameter for each 
                              macroblock in scan-order */
                              
   int *uvQuantParams;     /* chrominance quantizer parameter for each 
                              macroblock in scan-order */

} vdeImb_t;
/* {{-output"vdeImb_t.txt"}} */


/*
 * Function prototypes
 */

vdeImb_t *vdeImbAlloc(int width, int height, int fYuvNeeded);

int vdeImbCopyParameters(vdeImb_t *dstImb, const vdeImb_t *srcImb);

void vdeImbDealloc(vdeImb_t *imb);


/*
 * Macros
 */

/* {{-output"vdeImbYUV.txt"}} */
/*
 * vdeImbYUV
 *
 * Parameters:
 *    vdeImb_t *pimb             a pointer to image buffer
 *    u_char **ppy, **ppu, **ppv used to return the pointers to the top-left
 *                               corner of Y, U and V image buffers
 *                               respectively
 *    int *pWidth, *pHeight      used to return the width and height of
 *                               the luminance image in pixels
 *
 * Function:
 *    This function returns the Y, U and V pointers to the passed image buffer
 *    as well as the dimensions of the luminance frame of the image buffer.
 *
 * Returns:
 *    REN_OK                     if the function was successful
 *    REN_ERROR                  indicating a general error
 *
 */

#define vdeImbYUV(pimb, ppy, ppu, ppv, pWidth, pHeight) \
   renDriYUV((pimb)->drawItem, (ppy), (ppu), (ppv), (pWidth), (pHeight))
/* {{-output"vdeImbYUV.txt"}} */

#endif
// End of File