2012-06-05 11:01:47 +00:00
|
|
|
/**
|
|
|
|
* Part of HEVC Encoder
|
|
|
|
* By Marko Viitanen ( fador at iki.fi ), Tampere University of Technology, Department of Computer Systems.
|
|
|
|
*/
|
|
|
|
|
|
|
|
/*! \file picture.h
|
|
|
|
\brief Picture header
|
|
|
|
\author Marko Viitanen
|
|
|
|
\date 2012-06
|
|
|
|
|
|
|
|
Contains all picture related functions and structs
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef _PICTURE_H_
|
|
|
|
#define _PICTURE_H_
|
|
|
|
|
|
|
|
|
2013-03-12 15:06:21 +00:00
|
|
|
/* Functions */
|
|
|
|
|
|
|
|
uint32_t SAD32x32(int16_t *block,uint32_t stride1,int16_t* block2, uint32_t stride2);
|
|
|
|
uint32_t SAD16x16(int16_t *block,uint32_t stride1,int16_t* block2, uint32_t stride2);
|
|
|
|
double imagePSNR(uint8_t *frame1, uint8_t *frame2, uint32_t x, uint32_t y);
|
|
|
|
|
2012-06-05 11:01:47 +00:00
|
|
|
/** \defgroup picture_group Picture handler group
|
|
|
|
* This group contains all picture related stuff
|
|
|
|
* @{
|
|
|
|
*/
|
|
|
|
|
2012-06-11 15:43:29 +00:00
|
|
|
enum { CU_NOTSET = 0,CU_PCM, CU_SKIP, CU_SPLIT, CU_INTRA, CU_INTER };
|
2012-06-11 12:26:32 +00:00
|
|
|
|
2012-06-11 12:39:18 +00:00
|
|
|
#define GET_SPLITDATA(CU) ((CU)->split)
|
|
|
|
#define SET_SPLITDATA(CU,flag) { (CU)->split=(flag); }
|
2012-06-11 12:26:32 +00:00
|
|
|
|
|
|
|
/*!
|
|
|
|
\brief Struct for CU info
|
|
|
|
*/
|
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
uint8_t mode;
|
|
|
|
uint32_t cost;
|
|
|
|
} CU_info_intra;
|
|
|
|
|
|
|
|
|
|
|
|
/*!
|
|
|
|
\brief Struct for CU info
|
|
|
|
*/
|
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
uint8_t type;
|
2013-03-12 15:06:21 +00:00
|
|
|
CU_info_intra intra;
|
2012-06-11 12:39:18 +00:00
|
|
|
uint8_t split;
|
2012-06-11 12:26:32 +00:00
|
|
|
} CU_info;
|
|
|
|
|
2012-06-05 11:01:47 +00:00
|
|
|
/*!
|
|
|
|
\brief Struct which contains all picture data
|
|
|
|
*/
|
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
uint8_t* yData; /*!< \brief Pointer to Y-data */
|
|
|
|
uint8_t* uData; /*!< \brief Pointer to U-data */
|
|
|
|
uint8_t* vData; /*!< \brief Pointer to V-data */
|
2012-06-11 15:43:29 +00:00
|
|
|
|
|
|
|
uint8_t* yRecData; /*!< \brief Pointer to reconstructed Y-data */
|
|
|
|
uint8_t* uRecData; /*!< \brief Pointer to reconstructed U-data */
|
|
|
|
uint8_t* vRecData; /*!< \brief Pointer to reconstructed V-data */
|
|
|
|
|
2012-06-05 11:01:47 +00:00
|
|
|
int width; /*!< \brief Picture width */
|
|
|
|
int height; /*!< \brief Picture height */
|
|
|
|
uint8_t referenced; /*!< \brief Is this picture referenced */
|
2012-06-11 12:26:32 +00:00
|
|
|
CU_info** CU; /*!< \brief info for each CU at each depth */
|
|
|
|
uint8_t type;
|
2013-03-11 10:06:08 +00:00
|
|
|
uint8_t slicetype;
|
2012-06-05 11:01:47 +00:00
|
|
|
} picture;
|
|
|
|
|
|
|
|
/*!
|
|
|
|
\brief Struct which contains array of picture structs
|
|
|
|
*/
|
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
picture** pics; /*!< \brief Pointer to array of picture pointers */
|
|
|
|
unsigned int size; /*!< \brief Array size */
|
|
|
|
unsigned int used_size;
|
|
|
|
|
|
|
|
} picture_list;
|
|
|
|
|
|
|
|
|
|
|
|
picture_list *picture_list_init(int size);
|
|
|
|
int picture_list_resize(picture_list *list, int size);
|
|
|
|
int picture_list_destroy(picture_list *list);
|
|
|
|
|
|
|
|
int picture_destroy(picture *pic);
|
|
|
|
|
|
|
|
|
2012-06-06 11:09:28 +00:00
|
|
|
enum { SLICE_P = 0, SLICE_B = 1, SLICE_I = 2 };
|
|
|
|
|
|
|
|
|
2012-06-05 11:01:47 +00:00
|
|
|
/** @} */ // end of group1
|
|
|
|
|
|
|
|
#endif
|