hxcolor.h
上传用户:dangjiwu
上传日期:2013-07-19
资源大小:42019k
文件大小:14k
源码类别:

Symbian

开发平台:

Visual C++

  1. /* ***** BEGIN LICENSE BLOCK *****
  2.  * Source last modified: $Id: hxcolor.h,v 1.4.28.1 2004/07/09 02:00:04 hubbe Exp $
  3.  * 
  4.  * Portions Copyright (c) 1995-2004 RealNetworks, Inc. All Rights Reserved.
  5.  * 
  6.  * The contents of this file, and the files included with this file,
  7.  * are subject to the current version of the RealNetworks Public
  8.  * Source License (the "RPSL") available at
  9.  * http://www.helixcommunity.org/content/rpsl unless you have licensed
  10.  * the file under the current version of the RealNetworks Community
  11.  * Source License (the "RCSL") available at
  12.  * http://www.helixcommunity.org/content/rcsl, in which case the RCSL
  13.  * will apply. You may also obtain the license terms directly from
  14.  * RealNetworks.  You may not use this file except in compliance with
  15.  * the RPSL or, if you have a valid RCSL with RealNetworks applicable
  16.  * to this file, the RCSL.  Please see the applicable RPSL or RCSL for
  17.  * the rights, obligations and limitations governing use of the
  18.  * contents of the file.
  19.  * 
  20.  * Alternatively, the contents of this file may be used under the
  21.  * terms of the GNU General Public License Version 2 or later (the
  22.  * "GPL") in which case the provisions of the GPL are applicable
  23.  * instead of those above. If you wish to allow use of your version of
  24.  * this file only under the terms of the GPL, and not to allow others
  25.  * to use your version of this file under the terms of either the RPSL
  26.  * or RCSL, indicate your decision by deleting the provisions above
  27.  * and replace them with the notice and other provisions required by
  28.  * the GPL. If you do not delete the provisions above, a recipient may
  29.  * use your version of this file under the terms of any one of the
  30.  * RPSL, the RCSL or the GPL.
  31.  * 
  32.  * This file is part of the Helix DNA Technology. RealNetworks is the
  33.  * developer of the Original Code and owns the copyrights in the
  34.  * portions it created.
  35.  * 
  36.  * This file, and the files included with this file, is distributed
  37.  * and made available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY
  38.  * KIND, EITHER EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS
  39.  * ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES
  40.  * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET
  41.  * ENJOYMENT OR NON-INFRINGEMENT.
  42.  * 
  43.  * Technology Compatibility Kit Test Suite(s) Location:
  44.  *    http://www.helixcommunity.org/content/tck
  45.  * 
  46.  * Contributor(s):
  47.  * 
  48.  * ***** END LICENSE BLOCK ***** */
  49. #ifndef _HXCOLOR_H_
  50. #define _HXCOLOR_H_
  51. #ifdef __cplusplus
  52. extern "C" {
  53. #endif
  54. #include "ciddefs.h"
  55. /*
  56.  * component GUID support.
  57.  */
  58. HX_RESULT HXEXPORT ENTRYPOINT(GetHXColorGUID) (UCHAR* pGUID);
  59. /*
  60.  * Initialize color conversion library.
  61.  */
  62. void HXEXPORT ENTRYPOINT(InitColorConverter) ();
  63. /*
  64.  * Set YUV color adjustments.
  65.  * Use:
  66.  *  void SetColorAdjustments (float Brightness,
  67.  *              float Contrast, float Saturation, float Hue);
  68.  * Input:
  69.  *  Brightness - brightness adjustment [-1,1], default - 0
  70.  *  Contrast   - contrast adjustment [-1,1], default - 0
  71.  *  Saturation - saturation adjustment [-1,1], default - 0
  72.  *  Hue        - hue adjustment  [-1,1], default - 0
  73.  * Returns:
  74.  *  none.
  75.  */
  76. void HXEXPORT ENTRYPOINT(SetColorAdjustments) (float Brightness,
  77.                 float Contrast, float Saturation, float Hue);
  78. /*
  79.  * Get the current YUV color adjustments.
  80.  * Use:
  81.  *  void GetColorAdjustments (float *Brightness,
  82.  *              float *Contrast, float *Saturation, float *Hue);
  83.  * Output:
  84.  *  Brightness - brightness adjustment [-1,1], default - 0
  85.  *  Contrast   - contrast adjustment [-1,1], default - 0
  86.  *  Saturation - saturation adjustment [-1,1], default - 0
  87.  *  Hue        - hue adjustment  [-1,1], default - 0
  88.  * Returns:
  89.  *  none.
  90.  */
  91. void HXEXPORT ENTRYPOINT(GetColorAdjustments) (float* Brightness,
  92.                 float* Contrast, float* Saturation, float* Hue);
  93. /*
  94.  * Suggest palette to use for 8-bit RGB output.
  95.  * Use:
  96.  *  int SuggestRGB8Palette (int nColors, UINT32 *lpRGBVals);
  97.  * Input:
  98.  *  nColors - the number of existing colors in palette
  99.  *  lpRGBVals - RGB values for each palette entry
  100.  *  lpIndices - pixel values (palette indices)
  101.  * Returns:
  102.  *  >0, the total number of colors to be used, if success
  103.  *  -1, if error
  104.  */
  105. #ifdef _FAT_HXCOLOR
  106. int HXEXPORT ENTRYPOINT(SuggestRGB8Palette) (int nColors, UINT32 *lpRGBVals);
  107. #endif
  108. /*
  109.  * Set palette to use for 8-bit RGB output.
  110.  * Use:
  111.  *  int SetRGB8Palette (int nColors, UINT32 *lpRGBVals, int *lpIndices);
  112.  * Input:
  113.  *  nColors - the number of colors in palette
  114.  *  lpRGBVals - RGB values for each palette entry
  115.  *  lpIndices - pixel values (palette indices)
  116.  * Returns:
  117.  *  >0, the total number of colors set, if success
  118.  *  -1, if error
  119.  */
  120. #ifdef _FAT_HXCOLOR
  121. int HXEXPORT ENTRYPOINT(SetRGB8Palette) (int nColors, UINT32 *lpRGBVals, int *lpIndices);
  122. #endif
  123. /*
  124.  * Sets YUV 4:4:4 -> YUV 4:2:0 chroma resampling mode
  125.  * Use:
  126.  *  int SetChromaResamplingMode(int nNewMode);
  127.  * Input:
  128.  *  nNewMode - a chroma resampling mode to use
  129.  *   E.g. given input   a b
  130.  *   chroma samples:    c d
  131.  *   we will produce:
  132.  *      mode = 0:       (a+b+c+d) / 4
  133.  *             1:       (a+b) / 2
  134.  *             2:       (c+d) / 2
  135.  * Returns:
  136.  *  previously set resampling mode.
  137.  */
  138. #ifdef _FAT_HXCOLOR
  139. int HXEXPORT ENTRYPOINT(SetChromaResamplingMode)(int nNewMode);
  140. #endif
  141. /*
  142.  * Low-level format-conversion routines.
  143.  * Use:
  144.  *  int XXXXtoYYYY (unsigned char *dest_ptr, int dest_width, int dest_height,
  145.  *      int dest_pitch, int dest_x, int dest_y, int dest_dx, int dest_dy,
  146.  *      unsigned char *src_ptr, int src_width, int src_height, int src_pitch,
  147.  *      int src_x, int src_y, int src_dx, int src_dy);
  148.  * Input:
  149.  *  dest_ptr - pointer to a destination buffer
  150.  *  dest_width, dest_height - width/height of the destination image (pixels)
  151.  *  dest_pitch - pitch of the dest. buffer (in bytes; <0 - if bottom up image)
  152.  *  dest_x, dest_y, dest_dx, dest_dy - destination rectangle (pixels)
  153.  *  src_ptr - pointer to an input image
  154.  *  src_width, src_height - width/height of the input image (pixels)
  155.  *  src_pitch - pitch of the source buffer (in bytes; <0 - if bottom up image)
  156.  *  src_x, src_y, src_dx, src_dy - source rectangle (pixels)
  157.  * Returns:
  158.  *  0 - if success; -1 if failure.
  159.  * Notes:
  160.  *  a) In all cases, pointers to the source and destination buffers must be
  161.  *     DWORD aligned, and both pitch parameters must be multiple of 4!!!
  162.  *  b) Converters that deal with YUV 4:2:2, or 4:2:0 formats may also require
  163.  *     rectangle parameters (x,y,dx,dy) to be multiple of 2. Failure to provide
  164.  *     aligned rectangles will result in partially converted image.
  165.  *  c) Currently only scale factors of 1:1 and 2:1 are supported; if the rates
  166.  *     dest_dx/src_dx & dest_dy/src_dy are neither 1, or 2, the converters
  167.  *     will fail.
  168.  */
  169. typedef int (* LPHXCOLORCONVERTER) 
  170.             (unsigned char *, int, int, int, int, int, int, int, 
  171.             unsigned char *, int, int, int, int, int, int, int);
  172.     
  173. #if defined(HELIX_CONFIG_NOSTATICS)
  174. #include "nostatic/yuv.h" //for color_data_t
  175.     typedef int (* LPHXCOLORCONVERTERNOSTATIC) 
  176.           (unsigned char *, int, int, int, int, int, int, int, 
  177.            unsigned char *, int, int, int, int, int, int, int, 
  178.            color_data_t* );
  179.     
  180. #endif
  181.     
  182. HX_RESULT HXEXPORT ENTRYPOINT(GetCompatibleColorFormats)(INT32 cidIn, INT32* pcidOut, UINT32* pnSize);
  183. /*
  184.  * Find a converter to trasform data from format X to format Y.
  185.  * Use:
  186.  *  LPHXCOLORCONVERTER GetColorConverter (INT32 cidIn, INT32 cidOut);
  187.  * Input:
  188.  *  cidIn - input color format ID (!CID_UNKNOWN)
  189.  *  cidOut - desirable output color format ID (!CID_UNKNOWN)
  190.  * Returns:
  191.  *  pointer to an appropriate color conversion routine, if success;
  192.  *  NULL - conversion is not supported.
  193.  */
  194. LPHXCOLORCONVERTER HXEXPORT ENTRYPOINT(GetColorConverter) (INT32 cidIn, INT32 cidOut);
  195. /*
  196.  * Low-level format-conversion routines.
  197.  * Use:
  198.  *  int I420toYYYY (unsigned char *dest_ptr, int dest_width, int dest_height,
  199.  *      int dest_pitch, int dest_x, int dest_y, int dest_dx, int dest_dy,
  200.  *      unsigned char *pY, unsigned char *pU, unsigned char *pV,
  201.  *      int src_width, int src_height, int yPitch, int uPitch, int vPitch,
  202.  *      int src_x, int src_y, int src_dx, int src_dy);
  203.  * Input:
  204.  *  dest_ptr - pointer to a destination buffer
  205.  *  dest_width, dest_height - width/height of the destination image (pixels)
  206.  *  dest_pitch - pitch of the dest. buffer (in bytes; <0 - if bottom up image)
  207.  *  dest_x, dest_y, dest_dx, dest_dy - destination rectangle (pixels)
  208.  *  pY - pointer to the y plane
  209.  *  pU - pointer to the u plane
  210.  *  pV - pointer to the v plane
  211.  *  src_width, src_height - width/height of the input image (pixels)
  212.  *  yPitch - pitch of the y source buffer (in bytes; <0 - if bottom up image)
  213.  *  uPitch - pitch of the u source buffer (in bytes; <0 - if bottom up image)
  214.  *  vPitch - pitch of the v source buffer (in bytes; <0 - if bottom up image)
  215.  *  src_x, src_y, src_dx, src_dy - source rectangle (pixels)
  216.  * Returns:
  217.  *  0 - if success; -1 if failure.
  218.  * Notes:
  219.  *  a) In all cases, pointers to the source and destination buffers must be
  220.  *     DWORD aligned, and both pitch parameters must be multiple of 4!!!
  221.  *  b) Converters that deal with YUV 4:2:2, or 4:2:0 formats may also require
  222.  *     rectangle parameters (x,y,dx,dy) to be multiple of 2. Failure to provide
  223.  *     aligned rectangles will result in partially converted image.
  224.  *  c) Currently only scale factors of 1:1 and 2:1 are supported; if the rates
  225.  *     dest_dx/src_dx & dest_dy/src_dy are neither 1, or 2, the converters
  226.  *     will fail.
  227.  */
  228. typedef int (* LPHXCOLORCONVERTER2) 
  229.                 (unsigned char *, int, int, int, int, int, int, int, 
  230.                  unsigned char *, unsigned char *, unsigned char *,  
  231.                  int, int, int, int, int, int, int, int, int);
  232. LPHXCOLORCONVERTER2 HXEXPORT ENTRYPOINT(GetColorConverter2) (INT32 cidIn, INT32 cidOut);
  233. /*
  234.  * Try selected compatible color formats.
  235.  * Use:
  236.  *  BOOL ScanCompatibleColorFormats (INT32 cidIn, INT32 cidOutMask, void *pParam,
  237.  *      BOOL (*pfnTryIt) (void *pParam, INT32 cidOut, LPHXCOLORCONVERTER pfnCC));
  238.  * Input:
  239.  *  cidIn - input color format ID (!CID_UNKNOWN)
  240.  *  cidOutMask - masks output formats to try (use ~0 to scan all formats)
  241.  *  pParam - pointer to a parameter block to pass to fpTryIt ()
  242.  *  pfnTryIt - pointer to a function, which will be called for each
  243.  *          compatible output format;
  244.  * Special Inputs:
  245.  *  Last INT32 argument is dummy unused one created just for avoiding ADS 1.2 ARM compiler's crash due to 
  246.  *  not being able handle nested function ptr as the last argument. It should be taken out once we
  247.  *  are sure that is not the case such as compiler update from current 1.2 to 2.0.
  248.  *
  249.  * Returns:
  250.  *  TRUE, if fpTryIt() has exited with TRUE status;
  251.  *  FALSE, if non of the compatible formats has been accepted by fpTryIt().
  252.  */
  253. BOOL HXEXPORT ENTRYPOINT(ScanCompatibleColorFormats) (INT32 cidIn, INT32 cidOutMask, void *pParam,
  254.     BOOL (*pfnTryIt) (void *pParam, INT32 cidOut, LPHXCOLORCONVERTER pfnCC),INT32=0);
  255. /*
  256.  * Try all compatible color formats.
  257.  */
  258. BOOL HXEXPORT ENTRYPOINT(ScanAllCompatibleColorFormats) (INT32 cidIn, void *pParam,
  259.     BOOL (*pfnTryIt) (void *pParam, INT32 cidOut, LPHXCOLORCONVERTER pfnCC),INT32=0);
  260. /***********************
  261.  * Old HXCOLOR.DLL interface:
  262.  ****************************************************/
  263. #define T_RGB888 7
  264. #define T_RGB555 8
  265. #define T_RGB565 9
  266. /*
  267.  * Main color-conversion function.
  268.  *
  269.  * Input:
  270.  *  ysrc, usrc, vsrc - pointers to planar YUV420
  271.  *  dst - pointer to RGB output buffer
  272.  *  width, height - size of input image, in pixels
  273.  *  pitch - horizontal pitch of RGB output buffer, in pixels
  274.  *          negative pitch toggles inverted output
  275.  *          usually, pitch = width (or 2*width if expanding)
  276.  *  format - format of RGB output buffer
  277.  *  expand - flag to enable bilinear-interpolated output
  278.  *           output buffer must be twice as large
  279.  *
  280.  * Output:
  281.  *  dst filled with RGB output.
  282.  */
  283. #ifdef _FAT_HXCOLOR
  284. void HXEXPORT ENTRYPOINT(ConvertYUVtoRGB)   (UCHAR* ySrc,
  285.                  UCHAR* uSrc,
  286.                  UCHAR* vSrc,
  287.                  INT32  nPitchSrc,
  288.                  UCHAR* Dst,
  289.                  INT32  nWidth,
  290.                  INT32  nHeight,
  291.                  INT32  nPitchDst,
  292.                  INT16  nFormat,
  293.                  INT16  nExpand);
  294. #endif
  295. /*
  296.  * Mac color-conversion function.
  297.  *
  298.  * Input:
  299.  *  ysrc, usrc, vsrc - pointers to planar YUV420
  300.  *  dst - pointer to RGB output buffer
  301.  *  width, height - size of input image, in pixels
  302.  *  pitch - horizontal pitch of RGB output buffer, in pixels
  303.  *          negative pitch toggles inverted output
  304.  *          usually, pitch = width (or 2*width if expanding)
  305.  *  format - format of RGB output buffer
  306.  *  expand - flag to enable bilinear-interpolated output
  307.  *           output buffer must be twice as large
  308.  *
  309.  * Output:
  310.  *  dst filled with RGB output.
  311.  */
  312. #ifdef _FAT_HXCOLOR
  313. #ifdef _MACINTOSH
  314. #pragma export on
  315. #endif //_MACINTOSH
  316. void HXEXPORT ENTRYPOINT(ConvertYUVtoMacRGB32)   (UCHAR* ySrc,
  317.                  UCHAR* uSrc,
  318.                  UCHAR* vSrc,
  319.                  INT32  nPitchSrc,
  320.                  UCHAR* Dst,
  321.                  INT32  nWidth,
  322.                  INT32  nHeight,
  323.                  INT32  nPitchDst,
  324.                  INT16  nFormat,
  325.                  INT16  nExpand);
  326. #ifdef _MACINTOSH
  327. #pragma export off
  328. #endif //_MACINTOSH
  329. #endif
  330. /*
  331.  * Converts a RGB3 buffer into a YUV buffer in Y'CbCr 4:2:0 format.
  332.  */
  333. #ifdef _FAT_HXCOLOR
  334. void HXEXPORT ENTRYPOINT(ConvertRGBtoYUV)   (UCHAR* pInput,
  335.                  UCHAR* pOutput,
  336.                  INT32  nWidth,
  337.                  INT32  nHeight,
  338.                  BOOL   bBGR);
  339. #endif
  340. /*
  341.  * Converts a RGB3 buffer into an XRGB buffer.
  342.  */
  343. #ifdef _FAT_HXCOLOR
  344. void HXEXPORT ENTRYPOINT(ConvertRGB24toXRGB) (UCHAR* pSrc, UCHAR* pDest,
  345.     ULONG32 srcSize, ULONG32 destSize, INT32 nWidth, INT32 nHeight);
  346. #endif
  347. #ifdef __cplusplus
  348. }
  349. #endif
  350. #endif // _HXCOLOR_H_