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

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 _HXCOLOR_H_
  36. #define _HXCOLOR_H_
  37. #ifdef __cplusplus
  38. extern "C" {
  39. #endif
  40. #include "ciddefs.h"
  41. /*
  42.  * component GUID support.
  43.  */
  44. HX_RESULT HXEXPORT ENTRYPOINT(GetHXColorGUID) (UCHAR* pGUID);
  45. /*
  46.  * Initialize color conversion library.
  47.  */
  48. void HXEXPORT ENTRYPOINT(InitColorConverter) ();
  49. /*
  50.  * Set YUV color adjustments.
  51.  * Use:
  52.  *  void SetColorAdjustments (float Brightness,
  53.  *              float Contrast, float Saturation, float Hue);
  54.  * Input:
  55.  *  Brightness - brightness adjustment [-1,1], default - 0
  56.  *  Contrast   - contrast adjustment [-1,1], default - 0
  57.  *  Saturation - saturation adjustment [-1,1], default - 0
  58.  *  Hue        - hue adjustment  [-1,1], default - 0
  59.  * Returns:
  60.  *  none.
  61.  */
  62. void HXEXPORT ENTRYPOINT(SetColorAdjustments) (float Brightness,
  63.                 float Contrast, float Saturation, float Hue);
  64. /*
  65.  * Get the current YUV color adjustments.
  66.  * Use:
  67.  *  void GetColorAdjustments (float *Brightness,
  68.  *              float *Contrast, float *Saturation, float *Hue);
  69.  * Output:
  70.  *  Brightness - brightness adjustment [-1,1], default - 0
  71.  *  Contrast   - contrast adjustment [-1,1], default - 0
  72.  *  Saturation - saturation adjustment [-1,1], default - 0
  73.  *  Hue        - hue adjustment  [-1,1], default - 0
  74.  * Returns:
  75.  *  none.
  76.  */
  77. void HXEXPORT ENTRYPOINT(GetColorAdjustments) (float* Brightness,
  78.                 float* Contrast, float* Saturation, float* Hue);
  79. /*
  80.  * Suggest palette to use for 8-bit RGB output.
  81.  * Use:
  82.  *  int SuggestRGB8Palette (int nColors, UINT32 *lpRGBVals);
  83.  * Input:
  84.  *  nColors - the number of existing colors in palette
  85.  *  lpRGBVals - RGB values for each palette entry
  86.  *  lpIndices - pixel values (palette indices)
  87.  * Returns:
  88.  *  >0, the total number of colors to be used, if success
  89.  *  -1, if error
  90.  */
  91. #ifdef _FAT_HXCOLOR
  92. int HXEXPORT ENTRYPOINT(SuggestRGB8Palette) (int nColors, UINT32 *lpRGBVals);
  93. #endif
  94. /*
  95.  * Set palette to use for 8-bit RGB output.
  96.  * Use:
  97.  *  int SetRGB8Palette (int nColors, UINT32 *lpRGBVals, int *lpIndices);
  98.  * Input:
  99.  *  nColors - the number of colors in palette
  100.  *  lpRGBVals - RGB values for each palette entry
  101.  *  lpIndices - pixel values (palette indices)
  102.  * Returns:
  103.  *  >0, the total number of colors set, if success
  104.  *  -1, if error
  105.  */
  106. #ifdef _FAT_HXCOLOR
  107. int HXEXPORT ENTRYPOINT(SetRGB8Palette) (int nColors, UINT32 *lpRGBVals, int *lpIndices);
  108. #endif
  109. /*
  110.  * Sets YUV 4:4:4 -> YUV 4:2:0 chroma resampling mode
  111.  * Use:
  112.  *  int SetChromaResamplingMode(int nNewMode);
  113.  * Input:
  114.  *  nNewMode - a chroma resampling mode to use
  115.  *   E.g. given input   a b
  116.  *   chroma samples:    c d
  117.  *   we will produce:
  118.  *      mode = 0:       (a+b+c+d) / 4
  119.  *             1:       (a+b) / 2
  120.  *             2:       (c+d) / 2
  121.  * Returns:
  122.  *  previously set resampling mode.
  123.  */
  124. #ifdef _FAT_HXCOLOR
  125. int HXEXPORT ENTRYPOINT(SetChromaResamplingMode)(int nNewMode);
  126. #endif
  127. /*
  128.  * Low-level format-conversion routines.
  129.  * Use:
  130.  *  int XXXXtoYYYY (unsigned char *dest_ptr, int dest_width, int dest_height,
  131.  *      int dest_pitch, int dest_x, int dest_y, int dest_dx, int dest_dy,
  132.  *      unsigned char *src_ptr, int src_width, int src_height, int src_pitch,
  133.  *      int src_x, int src_y, int src_dx, int src_dy);
  134.  * Input:
  135.  *  dest_ptr - pointer to a destination buffer
  136.  *  dest_width, dest_height - width/height of the destination image (pixels)
  137.  *  dest_pitch - pitch of the dest. buffer (in bytes; <0 - if bottom up image)
  138.  *  dest_x, dest_y, dest_dx, dest_dy - destination rectangle (pixels)
  139.  *  src_ptr - pointer to an input image
  140.  *  src_width, src_height - width/height of the input image (pixels)
  141.  *  src_pitch - pitch of the source buffer (in bytes; <0 - if bottom up image)
  142.  *  src_x, src_y, src_dx, src_dy - source rectangle (pixels)
  143.  * Returns:
  144.  *  0 - if success; -1 if failure.
  145.  * Notes:
  146.  *  a) In all cases, pointers to the source and destination buffers must be
  147.  *     DWORD aligned, and both pitch parameters must be multiple of 4!!!
  148.  *  b) Converters that deal with YUV 4:2:2, or 4:2:0 formats may also require
  149.  *     rectangle parameters (x,y,dx,dy) to be multiple of 2. Failure to provide
  150.  *     aligned rectangles will result in partially converted image.
  151.  *  c) Currently only scale factors of 1:1 and 2:1 are supported; if the rates
  152.  *     dest_dx/src_dx & dest_dy/src_dy are neither 1, or 2, the converters
  153.  *     will fail.
  154.  */
  155. typedef int (* LPHXCOLORCONVERTER) 
  156.             (unsigned char *, int, int, int, int, int, int, int, 
  157.             unsigned char *, int, int, int, int, int, int, int);
  158.     
  159. #if defined(HELIX_CONFIG_NOSTATICS)
  160. #include "nostatic/yuv.h" //for color_data_t
  161.     typedef int (* LPHXCOLORCONVERTERNOSTATIC) 
  162.           (unsigned char *, int, int, int, int, int, int, int, 
  163.            unsigned char *, int, int, int, int, int, int, int, 
  164.            color_data_t* );
  165.     
  166. #endif
  167.     
  168. HX_RESULT HXEXPORT ENTRYPOINT(GetCompatibleColorFormats)(INT32 cidIn, INT32* pcidOut, UINT32* pnSize);
  169. /*
  170.  * Find a converter to trasform data from format X to format Y.
  171.  * Use:
  172.  *  LPHXCOLORCONVERTER GetColorConverter (INT32 cidIn, INT32 cidOut);
  173.  * Input:
  174.  *  cidIn - input color format ID (!CID_UNKNOWN)
  175.  *  cidOut - desirable output color format ID (!CID_UNKNOWN)
  176.  * Returns:
  177.  *  pointer to an appropriate color conversion routine, if success;
  178.  *  NULL - conversion is not supported.
  179.  */
  180. LPHXCOLORCONVERTER HXEXPORT ENTRYPOINT(GetColorConverter) (INT32 cidIn, INT32 cidOut);
  181. /*
  182.  * Low-level format-conversion routines.
  183.  * Use:
  184.  *  int I420toYYYY (unsigned char *dest_ptr, int dest_width, int dest_height,
  185.  *      int dest_pitch, int dest_x, int dest_y, int dest_dx, int dest_dy,
  186.  *      unsigned char *pY, unsigned char *pU, unsigned char *pV,
  187.  *      int src_width, int src_height, int yPitch, int uPitch, int vPitch,
  188.  *      int src_x, int src_y, int src_dx, int src_dy);
  189.  * Input:
  190.  *  dest_ptr - pointer to a destination buffer
  191.  *  dest_width, dest_height - width/height of the destination image (pixels)
  192.  *  dest_pitch - pitch of the dest. buffer (in bytes; <0 - if bottom up image)
  193.  *  dest_x, dest_y, dest_dx, dest_dy - destination rectangle (pixels)
  194.  *  pY - pointer to the y plane
  195.  *  pU - pointer to the u plane
  196.  *  pV - pointer to the v plane
  197.  *  src_width, src_height - width/height of the input image (pixels)
  198.  *  yPitch - pitch of the y source buffer (in bytes; <0 - if bottom up image)
  199.  *  uPitch - pitch of the u source buffer (in bytes; <0 - if bottom up image)
  200.  *  vPitch - pitch of the v source buffer (in bytes; <0 - if bottom up image)
  201.  *  src_x, src_y, src_dx, src_dy - source rectangle (pixels)
  202.  * Returns:
  203.  *  0 - if success; -1 if failure.
  204.  * Notes:
  205.  *  a) In all cases, pointers to the source and destination buffers must be
  206.  *     DWORD aligned, and both pitch parameters must be multiple of 4!!!
  207.  *  b) Converters that deal with YUV 4:2:2, or 4:2:0 formats may also require
  208.  *     rectangle parameters (x,y,dx,dy) to be multiple of 2. Failure to provide
  209.  *     aligned rectangles will result in partially converted image.
  210.  *  c) Currently only scale factors of 1:1 and 2:1 are supported; if the rates
  211.  *     dest_dx/src_dx & dest_dy/src_dy are neither 1, or 2, the converters
  212.  *     will fail.
  213.  */
  214. typedef int (* LPHXCOLORCONVERTER2) 
  215.                 (unsigned char *, int, int, int, int, int, int, int, 
  216.                  unsigned char *, unsigned char *, unsigned char *,  
  217.                  int, int, int, int, int, int, int, int, int);
  218. LPHXCOLORCONVERTER2 HXEXPORT ENTRYPOINT(GetColorConverter2) (INT32 cidIn, INT32 cidOut);
  219. /*
  220.  * Try selected compatible color formats.
  221.  * Use:
  222.  *  BOOL ScanCompatibleColorFormats (INT32 cidIn, INT32 cidOutMask, void *pParam,
  223.  *      BOOL (*pfnTryIt) (void *pParam, INT32 cidOut, LPHXCOLORCONVERTER pfnCC));
  224.  * Input:
  225.  *  cidIn - input color format ID (!CID_UNKNOWN)
  226.  *  cidOutMask - masks output formats to try (use ~0 to scan all formats)
  227.  *  pParam - pointer to a parameter block to pass to fpTryIt ()
  228.  *  pfnTryIt - pointer to a function, which will be called for each
  229.  *          compatible output format;
  230.  * Special Inputs:
  231.  *  Last INT32 argument is dummy unused one created just for avoiding ADS 1.2 ARM compiler's crash due to 
  232.  *  not being able handle nested function ptr as the last argument. It should be taken out once we
  233.  *  are sure that is not the case such as compiler update from current 1.2 to 2.0.
  234.  *
  235.  * Returns:
  236.  *  TRUE, if fpTryIt() has exited with TRUE status;
  237.  *  FALSE, if non of the compatible formats has been accepted by fpTryIt().
  238.  */
  239. BOOL HXEXPORT ENTRYPOINT(ScanCompatibleColorFormats) (INT32 cidIn, INT32 cidOutMask, void *pParam,
  240.     BOOL (*pfnTryIt) (void *pParam, INT32 cidOut, LPHXCOLORCONVERTER pfnCC),INT32=0);
  241. /*
  242.  * Try all compatible color formats.
  243.  */
  244. BOOL HXEXPORT ENTRYPOINT(ScanAllCompatibleColorFormats) (INT32 cidIn, void *pParam,
  245.     BOOL (*pfnTryIt) (void *pParam, INT32 cidOut, LPHXCOLORCONVERTER pfnCC),INT32=0);
  246. /***********************
  247.  * Old HXCOLOR.DLL interface:
  248.  ****************************************************/
  249. #define T_RGB888 7
  250. #define T_RGB555 8
  251. #define T_RGB565 9
  252. /*
  253.  * Main color-conversion function.
  254.  *
  255.  * Input:
  256.  *  ysrc, usrc, vsrc - pointers to planar YUV420
  257.  *  dst - pointer to RGB output buffer
  258.  *  width, height - size of input image, in pixels
  259.  *  pitch - horizontal pitch of RGB output buffer, in pixels
  260.  *          negative pitch toggles inverted output
  261.  *          usually, pitch = width (or 2*width if expanding)
  262.  *  format - format of RGB output buffer
  263.  *  expand - flag to enable bilinear-interpolated output
  264.  *           output buffer must be twice as large
  265.  *
  266.  * Output:
  267.  *  dst filled with RGB output.
  268.  */
  269. #ifdef _FAT_HXCOLOR
  270. void HXEXPORT ENTRYPOINT(ConvertYUVtoRGB)   (UCHAR* ySrc,
  271.                  UCHAR* uSrc,
  272.                  UCHAR* vSrc,
  273.                  INT32  nPitchSrc,
  274.                  UCHAR* Dst,
  275.                  INT32  nWidth,
  276.                  INT32  nHeight,
  277.                  INT32  nPitchDst,
  278.                  INT16  nFormat,
  279.                  INT16  nExpand);
  280. #endif
  281. /*
  282.  * Mac color-conversion function.
  283.  *
  284.  * Input:
  285.  *  ysrc, usrc, vsrc - pointers to planar YUV420
  286.  *  dst - pointer to RGB output buffer
  287.  *  width, height - size of input image, in pixels
  288.  *  pitch - horizontal pitch of RGB output buffer, in pixels
  289.  *          negative pitch toggles inverted output
  290.  *          usually, pitch = width (or 2*width if expanding)
  291.  *  format - format of RGB output buffer
  292.  *  expand - flag to enable bilinear-interpolated output
  293.  *           output buffer must be twice as large
  294.  *
  295.  * Output:
  296.  *  dst filled with RGB output.
  297.  */
  298. #ifdef _FAT_HXCOLOR
  299. #ifdef _MACINTOSH
  300. #pragma export on
  301. #endif //_MACINTOSH
  302. void HXEXPORT ENTRYPOINT(ConvertYUVtoMacRGB32)   (UCHAR* ySrc,
  303.                  UCHAR* uSrc,
  304.                  UCHAR* vSrc,
  305.                  INT32  nPitchSrc,
  306.                  UCHAR* Dst,
  307.                  INT32  nWidth,
  308.                  INT32  nHeight,
  309.                  INT32  nPitchDst,
  310.                  INT16  nFormat,
  311.                  INT16  nExpand);
  312. #ifdef _MACINTOSH
  313. #pragma export off
  314. #endif //_MACINTOSH
  315. #endif
  316. /*
  317.  * Converts a RGB3 buffer into a YUV buffer in Y'CbCr 4:2:0 format.
  318.  */
  319. #ifdef _FAT_HXCOLOR
  320. void HXEXPORT ENTRYPOINT(ConvertRGBtoYUV)   (UCHAR* pInput,
  321.                  UCHAR* pOutput,
  322.                  INT32  nWidth,
  323.                  INT32  nHeight,
  324.                  BOOL   bBGR);
  325. #endif
  326. /*
  327.  * Converts a RGB3 buffer into an XRGB buffer.
  328.  */
  329. #ifdef _FAT_HXCOLOR
  330. void HXEXPORT ENTRYPOINT(ConvertRGB24toXRGB) (UCHAR* pSrc, UCHAR* pDest,
  331.     ULONG32 srcSize, ULONG32 destSize, INT32 nWidth, INT32 nHeight);
  332. #endif
  333. #ifdef __cplusplus
  334. }
  335. #endif
  336. #endif // _HXCOLOR_H_