hxvamain.h
上传用户:zhongxx05
上传日期:2007-06-06
资源大小:33641k
文件大小:6k
源码类别:

Symbian

开发平台:

C/C++

  1. /* ***** BEGIN LICENSE BLOCK ***** 
  2.  * Version: RCSL 1.0/RPSL 1.0 
  3.  *  
  4.  * Portions Copyright (c) 1995-2002 RealNetworks, Inc. All Rights Reserved. 
  5.  *      
  6.  * The contents of this file, and the files included with this file, are 
  7.  * subject to the current version of the RealNetworks Public Source License 
  8.  * Version 1.0 (the "RPSL") available at 
  9.  * http://www.helixcommunity.org/content/rpsl unless you have licensed 
  10.  * the file under the RealNetworks Community Source License Version 1.0 
  11.  * (the "RCSL") available at http://www.helixcommunity.org/content/rcsl, 
  12.  * in which case the RCSL will apply. You may also obtain the license terms 
  13.  * directly from RealNetworks.  You may not use this file except in 
  14.  * compliance with the RPSL or, if you have a valid RCSL with RealNetworks 
  15.  * applicable to this file, the RCSL.  Please see the applicable RPSL or 
  16.  * RCSL for the rights, obligations and limitations governing use of the 
  17.  * contents of the file.  
  18.  *  
  19.  * This file is part of the Helix DNA Technology. RealNetworks is the 
  20.  * developer of the Original Code and owns the copyrights in the portions 
  21.  * it created. 
  22.  *  
  23.  * This file, and the files included with this file, is distributed and made 
  24.  * available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 
  25.  * EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES, 
  26.  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS 
  27.  * FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 
  28.  * 
  29.  * Technology Compatibility Kit Test Suite(s) Location: 
  30.  *    http://www.helixcommunity.org/content/tck 
  31.  * 
  32.  * Contributor(s): 
  33.  *  
  34.  * ***** END LICENSE BLOCK ***** */ 
  35. #ifndef HXVAMAIN_H__
  36. #define HXVAMAIN_H__
  37. #include "hxresult.h"
  38. //
  39. // Enumerate all of our external and internal image formats.
  40. // Each enumeration literal is a format identifier, thus the name PIA_FID.
  41. //
  42. typedef enum {
  43. HXVA_FID_TYPE_UNDEFINED,
  44. HXVA_FID_TYPE_RGB,
  45. HXVA_FID_TYPE_YUV,
  46. HXVA_FID_TYPE_DATA,
  47. HXVA_NUM_FID_TYPES
  48. } HXVA_FID_TYPES;
  49. #define FIDENUM(fid, type) fid,
  50. typedef enum {
  51. FIDENUM(HXVA_FID_UNDEFINED, HXVA_FID_TYPE_UNDEFINED)
  52.           // Init
  53. FIDENUM(HXVA_FID_RGB24, HXVA_FID_TYPE_RGB)
  54.           // R 8 bits G  8 Bits B 8 Bits
  55. FIDENUM(HXVA_FID_YUV12, HXVA_FID_TYPE_YUV)
  56. // I420
  57. // Y plane, U plane Quarter size V plane Quarter size
  58. FIDENUM(HXVA_FID_IYUV, HXVA_FID_TYPE_YUV)
  59. // Same as I420
  60. FIDENUM(HXVA_FID_YUY2, HXVA_FID_TYPE_YUV)
  61. FIDENUM(HXVA_FID_H261, HXVA_FID_TYPE_DATA)
  62. FIDENUM(HXVA_FID_H263, HXVA_FID_TYPE_DATA)
  63. FIDENUM(HXVA_FID_H263PLUS, HXVA_FID_TYPE_DATA)
  64.     HXVA_NUM_IMAGE_FORMATS
  65. } HXVA_FID;
  66. #define TYPEENUM(fid, type) type,
  67. #define Is_Valid_HXVA_FID(fid) (UINT32(fid) < UINT32(HXVA_NUM_IMAGE_FORMATS))
  68. struct HXVA_Point
  69. {
  70.         UINT32 x;
  71. UINT32 y;
  72.         HXVA_Point()
  73. x = y = 0; 
  74. }
  75.         HXVA_Point(UINT32 xi, UINT32 yi)
  76. x = xi;
  77. y = yi; 
  78. }
  79. };
  80. struct HXVA_Dimensions
  81. {
  82.         UINT32 width;
  83. UINT32 height;
  84.         HXVA_Dimensions()
  85. width = height = 0; 
  86. }
  87.         HXVA_Dimensions(UINT32 w, UINT32 h)
  88. width = w;
  89. height = h; 
  90. }
  91. };
  92. struct HXVA_Rectangle
  93. {
  94.         HXVA_Point location;
  95. // Upper left corner
  96.         HXVA_Dimensions dimensions;
  97.         HXVA_Rectangle()
  98. location = HXVA_Point();
  99. dimensions = HXVA_Dimensions(); 
  100. }
  101.         HXVA_Rectangle(UINT32 w, UINT32 h)
  102. location = HXVA_Point();
  103. dimensions = HXVA_Dimensions(w,h);
  104. }
  105. HXVA_Rectangle(UINT32 x, UINT32 y, UINT32 w, UINT32 h)
  106. location= HXVA_Point(x,y);
  107. dimensions= HXVA_Dimensions(w,h); 
  108. }
  109. };
  110. // A HXVA_Image_Format object contains enough decription of the image 
  111. // format as to Init the codec.
  112. struct HXVA_Image_Format
  113. {
  114.         HXVA_FID         fid;
  115.         HXVA_Dimensions  dimensions;
  116. // Width and Height requested or actual
  117.         HXVA_Rectangle   rectangle;
  118. // Rectangle requested or actual        
  119.         
  120. union {
  121.             struct {
  122.                 UINT32     y_pitch;
  123.                 UINT32     u_pitch;
  124.                 UINT32     v_pitch;
  125.             } yuv_info;
  126.         };
  127.         //
  128.         // Define Methods for operating on PIA_Image_Formats
  129.         //
  130.                         HXVA_Image_Format();
  131.         void            Clear();
  132.         // Fills in any unset fields 
  133. void            Complete();
  134. };
  135. // A HXVA_Image object represents an actual instance of an image.
  136. struct HXVA_Image {
  137.         HXVA_Image_Format    format;
  138.         UINT32                 size;
  139.             // "size" gives the total length, in bytes, of the image's data.
  140.         UINT32               sequence_number;
  141.             // TR
  142.         union {
  143.             struct {
  144.                 UINT8         *y_plane;
  145.                 UINT8         *u_plane;
  146.                 UINT8         *v_plane;
  147.             } yuv_info;
  148.             // for non-YUV formats.
  149.             UINT8             *data;
  150.         };
  151.         //
  152.         // Define Methods for operating on HXVA_Images
  153.         //
  154.                         HXVA_Image();
  155.         // The constructor simply gives each field a "NULL"-like value.
  156.         void            SetBasePointer(void*);
  157.             // Does it intelligently for YUV/Data
  158.         UINT8*          GetBasePointer(void) const;
  159.             // Y pointer or Data pointer
  160. };
  161. extern "C" HXVA_FID_TYPES hxva_fid_type[];
  162. inline  BOOL HXVA_FID_Is_YUV(HXVA_FID fid)
  163.         {
  164.             if (Is_Valid_HXVA_FID(fid))
  165.                 return (hxva_fid_type[fid]==HXVA_FID_TYPE_YUV);
  166.             return FALSE;
  167.         }
  168. #endif // HXVAMAIN_H__