h263video.cpp
上传用户:zhongxx05
上传日期:2007-06-06
资源大小:33641k
文件大小:8k
源码类别:

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. /****************************************************************************
  36.  *  Defines
  37.  */
  38. // #define ASYNC_RESIZE_OK
  39. // #define ENABLE_TRACE
  40. #define H263_VIDEO_RENDERER_NAME "H263 Video"
  41. #define H263_CODEC_FOURCC "H263"
  42. /****************************************************************************
  43.  *  Includes
  44.  */
  45. #include "h263rend.ver"
  46. #include "hxtypes.h"
  47. #include "hxwintyp.h"
  48. #include "hxresult.h"
  49. #include "hxcom.h"
  50. #include "hxevent.h"
  51. #include "hxcomm.h"
  52. #include "ihxpckts.h"
  53. #include "hxcore.h"
  54. #include "hxrendr.h"
  55. // #include "hxhyper.h"
  56. #include "hxplugn.h"
  57. #include "hxasm.h"
  58. #include "hxupgrd.h"
  59. #include "hxengin.h"
  60. #include "hxprefs.h"
  61. #include "hxerror.h"
  62. #include "hxwin.h"
  63. #include "hxvsurf.h"
  64. // #include "hxvctrl.h"
  65. #include "hxsite2.h"
  66. #include "hxthread.h"
  67. #include "hxmon.h"
  68. #include "hxformt.h"
  69. #include "h263video.h"
  70. #include "h263vidfmt.h"
  71. #include "hxheap.h"
  72. #ifndef WIDTHBYTES
  73. #define WIDTHBYTES(i) ((ULONG32)((i+31)&(~31))/8) /* ULONG aligned ! */
  74. #endif
  75. /************************************************************************
  76.  *  CH263VideoRenderer class
  77.  */
  78. /************************************************************************
  79.  *  Constants
  80.  */
  81. const char* const CH263VideoRenderer::zm_pDescription    = "RealNetworks H263 Video Renderer Plugin";
  82. const char* const CH263VideoRenderer::zm_pStreamMimeTypes[] =
  83. {
  84.     "video/H263-2000",
  85.     "video/h263-1998",
  86.     "video/h263",
  87.     "video/X-RN-3GPP-H263",
  88.     NULL
  89. };
  90. /************************************************************************
  91.  *  Constructor/Destructor
  92.  */
  93. CH263VideoRenderer::CH263VideoRenderer(void)
  94.  : CVideoRenderer(),
  95.    CHXBaseCountingObject()
  96. {
  97.     ;
  98. }
  99. CH263VideoRenderer::~CH263VideoRenderer()
  100. {    
  101.     ;
  102. }
  103. HX_RESULT STDAPICALLTYPE CH263VideoRenderer::HXCreateInstance(IUnknown** ppIUnknown)
  104. {
  105.     HX_RESULT retVal = HXR_OUTOFMEMORY;
  106.     *ppIUnknown = (IUnknown*)(IHXPlugin*) new CH263VideoRenderer();
  107.     if (*ppIUnknown)
  108.     {
  109.         (*ppIUnknown)->AddRef();
  110.         retVal = HXR_OK;
  111.     }
  112.     return retVal;
  113. }
  114. HX_RESULT STDAPICALLTYPE CH263VideoRenderer::CanUnload(void)
  115. {
  116.     return ((CHXBaseCountingObject::ObjectsActive() > 0) ? HXR_FAIL : HXR_OK);
  117. }
  118. HX_RESULT STDAPICALLTYPE CH263VideoRenderer::CanUnload2(void)
  119. {
  120.     return ((CHXBaseCountingObject::ObjectsActive() > 0) ? HXR_FAIL : HXR_OK);
  121. }
  122. /************************************************************************
  123.  *  Method:
  124.  *    IHXPlugin::GetPluginInfo
  125.  *  Purpose:
  126.  *    Returns the basic information about this plugin. Including:
  127.  *
  128.  *    bLoadMultiple whether or not this plugin DLL can be loaded
  129.  * multiple times. All File Formats must set
  130.  * this value to TRUE.
  131.  *    pDescription which is used in about UIs (can be NULL)
  132.  *    pCopyright which is used in about UIs (can be NULL)
  133.  *    pMoreInfoURL which is used in about UIs (can be NULL)
  134.  */
  135. STDMETHODIMP CH263VideoRenderer::GetPluginInfo
  136. (
  137.    REF(BOOL)        /*OUT*/ bLoadMultiple,
  138.    REF(const char*) /*OUT*/ pDescription,
  139.    REF(const char*) /*OUT*/ pCopyright,
  140.    REF(const char*) /*OUT*/ pMoreInfoURL,
  141.    REF(ULONG32)     /*OUT*/ ulVersionNumber
  142. )
  143. {
  144.     HX_RESULT retVal;
  145.     retVal = CVideoRenderer::GetPluginInfo(bLoadMultiple,
  146.    pDescription,
  147.    pCopyright,
  148.    pMoreInfoURL,
  149.    ulVersionNumber);
  150.     if (SUCCEEDED(retVal))
  151.     {
  152. pDescription    = (const char*) zm_pDescription;
  153. ulVersionNumber = TARVER_ULONG32_VERSION;
  154.     }
  155.     
  156.     return retVal;
  157. }
  158. /************************************************************************
  159.  *  Method:
  160.  *    IHXRenderer::GetRendererInfo
  161.  *  Purpose:
  162.  *    If this object is a file format object this method returns
  163.  *    information vital to the instantiation of file format plugins.
  164.  *    If this object is not a file format object, it should return
  165.  *    HXR_UNEXPECTED.
  166.  */
  167. STDMETHODIMP CH263VideoRenderer::GetRendererInfo
  168. (
  169.     REF(const char**) /*OUT*/ pStreamMimeTypes,
  170.     REF(UINT32)       /*OUT*/ unInitialGranularity
  171. )
  172. {
  173.     HX_RESULT retVal;
  174.     retVal = CVideoRenderer::GetRendererInfo(pStreamMimeTypes,
  175.      unInitialGranularity);
  176.     if (SUCCEEDED(retVal))
  177.     {
  178. pStreamMimeTypes = (const char**) zm_pStreamMimeTypes;
  179.     }
  180.     
  181.     return retVal;
  182. }
  183. /****************************************************************************
  184.  *  CreateFormatObject
  185.  */
  186. CVideoFormat* CH263VideoRenderer::CreateFormatObject(IHXValues* pHeader)
  187. {
  188.     return new CH263VideoFormat(m_pCommonClassFactory, this);
  189. }
  190. /****************************************************************************
  191.  *  GetRendererName
  192.  */
  193. const char* CH263VideoRenderer::GetRendererName(void)
  194. {
  195.     return H263_VIDEO_RENDERER_NAME;
  196. }
  197. /****************************************************************************
  198.  *  GetCodecFourCC
  199.  */
  200. const char* CH263VideoRenderer::GetCodecFourCC(void)
  201. {
  202.     return H263_CODEC_FOURCC;
  203. }
  204. /****************************************************************************
  205.  *  SetupBitmapDefaults
  206.  */
  207. void CH263VideoRenderer::SetupBitmapDefaults(IHXValues* pHeader,
  208.      HXBitmapInfoHeader &bitmapInfoHeader)
  209. {
  210.     // size calculation is taken from crvvideo
  211.     bitmapInfoHeader.biSize = sizeof (HXBitmapInfoHeader);
  212.     bitmapInfoHeader.biWidth = 0; // 352; // unknown
  213.     bitmapInfoHeader.biHeight = 0; // 288; // unknown
  214.     bitmapInfoHeader.biPlanes = 1;
  215.     bitmapInfoHeader.biBitCount = H263_PIXEL_SIZE;
  216.     bitmapInfoHeader.biCompression = H263_PIXEL_FORMAT;
  217.     bitmapInfoHeader.biSizeImage = bitmapInfoHeader.biWidth * 
  218.      bitmapInfoHeader.biHeight * 
  219.      bitmapInfoHeader.biBitCount / 
  220.      8;
  221.     bitmapInfoHeader.biXPelsPerMeter = 0; 
  222.     bitmapInfoHeader.biYPelsPerMeter = 0;
  223.     bitmapInfoHeader.biClrUsed = 0;
  224.     bitmapInfoHeader.biClrImportant = 0;
  225.     bitmapInfoHeader.rcolor = 0;
  226.     bitmapInfoHeader.gcolor = 0;
  227.     bitmapInfoHeader.bcolor = 0;    
  228. }