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

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 _HXACODEC_H_
  36. #define _HXACODEC_H_
  37. #ifdef __MWERKS__
  38. #pragma once
  39. #endif
  40. #include "hxtypes.h"
  41. #include "hxcom.h"
  42. /****************************************************************************
  43.  * 
  44.  *  Interface:
  45.  *
  46.  * IHXAudioEncoderConfigurator
  47.  *
  48.  *  Purpose:
  49.  *
  50.  * Configuration Interface for RealMedia audio encoders.
  51.  *
  52.  *  IID_IHXAudioEncoderConfigurator
  53.  *
  54.  * {B9919B52-54FF-4099-984A-533E75B578B9}
  55.  *
  56.  */
  57. DEFINE_GUID(IID_IHXAudioEncoderConfigurator,
  58.     0xb9919b52, 0x54ff, 0x4099, 0x98, 0x4a, 0x53, 0x3e, 0x75, 0xb5, 0x78, 0xb9);
  59. /* forward declaration of IQueryDecoderUnit */
  60. DECLARE_INTERFACE(IQueryDecoderUnit) ;
  61. #undef  INTERFACE
  62. #define INTERFACE IHXAudioEncoderConfigurator
  63. DECLARE_INTERFACE_(IHXAudioEncoderConfigurator, IUnknown)
  64. {
  65.     /*
  66.      * IUnknown methods
  67.      */
  68.     STDMETHOD(QueryInterface) (THIS_
  69. REFIID riid,
  70. void** ppvObj) PURE;
  71.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  72.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  73.     /*
  74.      * IHXAudioEncoder configuration/encoding methods
  75.      */
  76.     STDMETHOD_(UINT32,GetNumberOfFlavors) (THIS) CONSTMETHOD PURE ;
  77.     enum PROPERTY_LONG {
  78.         FLV_PROP_MIN_SAMPLES_IN, // hand me at least this many. I might take less
  79.         FLV_PROP_MAX_BYTES_OUT,  // that's per decoder unit
  80.         FLV_PROP_PREDATA,
  81. // the following are obsolete flavours. To maintain backwards compatibility and until
  82. // we have found a better solution, these are exported even through the new interface
  83. FLV_PROP_OBSOLETE_BITSPERFRAME, // FLV_PROP_BITSPERFRAME
  84. FLV_PROP_OBSOLETE_GRANULARITY,  // FLV_PROP_GRANULARITY
  85. FLV_PROP_OBSOLETE_INTERLEAVE_FACTOR, // FLV_PROP_INTERLEAVE_FACTOR
  86. FLV_PROP_CORE_SAMPLERATE // currently only supported by HE AAC codec
  87.     } ;
  88.     enum PROPERTY_FLOAT {
  89.         FLV_PROP_BIT_RATE_APPROX // bits/second, rounded. Do not use for calculations!
  90.     } ;
  91.     enum PROPERTY_VOID {
  92.         FLV_PROP_INPUT_AUDIO_FORMAT, // struct AUDIO_FORMAT
  93.         FLV_PROP_BITS_PER_SECOND, // long[2], numerator & denominator
  94.         FLV_PROP_BITS_PER_SAMPLE, // long[2]
  95.         FLV_PROP_FLAVOR_NAME, // was FLV_PROP_NAME
  96.         FLV_PROP_CODEC_NAME, // was FLV_PROP_STATUS_TEXT
  97.         FLV_PROP_FLAVOR_DESCRIPTION, // was FLV_PROP_DESCRIPTION
  98.         FLV_PROP_OPAQUE_DATA //void *
  99.     } ;
  100.     enum {
  101.         /* use this flavor number to inquire about the properties set by SetFlavor() and
  102.            SetOption() */
  103.         FLV_CURRENT = -1
  104.     } ;
  105.     STDMETHOD(GetFlavorProperty) (THIS_
  106.                                   INT32 flvIndex,
  107.                                   PROPERTY_LONG p,
  108.                                   INT32&  l) CONSTMETHOD PURE ;
  109.     STDMETHOD(GetFlavorProperty) (THIS_
  110.                                   INT32 flvIndex,
  111.                                   PROPERTY_FLOAT p,
  112.                                   float& l) CONSTMETHOD PURE ;
  113.     /* set buflen to the amount of memory reserved for v (on input). On output, buflen will
  114.        be changed to the amount of memory actually needed. If the area was to small (or v
  115.        was set to 0), no copying will be done, but buflen will still be changed on output */
  116.     STDMETHOD(GetFlavorProperty) (THIS_
  117.                                   INT32 flvIndex,
  118.                                   PROPERTY_VOID p,
  119.                                   void*  v,
  120.                                   UINT32& buflen) CONSTMETHOD PURE ;
  121.     STDMETHOD(SetFlavor) (THIS_
  122.                           INT32 nFlavor) PURE ;
  123.     /*
  124.      * hardly any of these are supported right now. This just gives you a taste of
  125.      * what I think could possibly go in here.
  126.      */
  127.     enum OPTION_LONG {
  128.         /* OPTION   ARGUMENT */
  129.         OPT_2PASS_PASS1, /* outputstream */
  130.         OPT_2PASS_PASS2, /* inputstream */
  131.         OPT_PREDATA,  /* nbytes, maximum BFM */
  132.         OPT_BITRATE,  /* bits/s */
  133.         OPT_MAXBYTES_DECODERUNIT,  /* nbytes, max size of decoder units */
  134.         OPT_MAXSAMPLES_DECODERUNIT,/* nbytes, max size of decoder units */
  135.         OPT_QUALITY_LEVEL,
  136.         OPT_ENCODE_TYPE,
  137. OPT_BITRATE_MANAGED /* defaulted to on */
  138.     } ;
  139.     
  140.     enum OPTION_ENCODE_TYPE {
  141. OPT_ENCODE_CBR,
  142. OPT_ENCODE_VBR_BITRATE,
  143. OPT_ENCODE_VBR_QUALITY
  144. };
  145.     STDMETHOD(SetOption) (THIS_
  146.                           OPTION_LONG option, INT32 arg) PURE ;
  147.     STDMETHOD(OpenEncoder)(THIS) PURE ;
  148.     STDMETHOD_(void,CloseEncoder)(THIS) PURE ;
  149. } ;
  150. /****************************************************************************
  151.  * 
  152.  *  Interface:
  153.  *
  154.  * IHXAudioEncoder
  155.  *
  156.  *  Purpose:
  157.  *
  158.  * Encoding Interface for RealMedia audio encoders.
  159.  *
  160.  *  IID_IHXAudioEncoder
  161.  *
  162.  * {56FF66F4-A6C5-42aa-B267-C296DD075DA3}
  163.  *
  164.  */
  165. DEFINE_GUID(IID_IHXAudioEncoder, 
  166.     0x56ff66f4, 0xa6c5, 0x42aa, 0xb2, 0x67, 0xc2, 0x96, 0xdd, 0x7, 0x5d, 0xa3);
  167. #undef  INTERFACE
  168. #define INTERFACE IHXAudioEncoder
  169. DECLARE_INTERFACE_(IHXAudioEncoder, IUnknown)
  170. {
  171.     /*
  172.      * IUnknown methods
  173.      */
  174.     STDMETHOD(QueryInterface) (THIS_
  175. REFIID riid,
  176. void** ppvObj) PURE;
  177.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  178.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  179.     /*
  180.      * IHXAudioEncoder methods
  181.      */
  182.     
  183.     STDMETHOD(EncodeData)(THIS_
  184.                           void *pDataIn, UINT32 nSamplesIn,
  185.            UINT32& nSamplesConsumed,
  186.           IQueryDecoderUnit* dataOut[], UINT32& nDecoderUnits,
  187.                           INT32 eof) PURE ;
  188. #if 0
  189.     /* submit an event for action at "time" samples out from the last encoded data.
  190.        This function prototype is tentative */
  191.     STDMETHOD(SendEvent) (THIS_
  192.   int time, IHXAudioEncoderConfigurator::OPTION_LONG option,
  193.   long arg) PURE ;
  194. #endif
  195. } ;
  196. /****************************************************************************
  197.  * 
  198.  *  Interface:
  199.  *
  200.  * IHXCodecOldStyleAuthenticate
  201.  *
  202.  *  Purpose:
  203.  *
  204.  * Callers authenticate themselves for encoding
  205.  *
  206.  *  IID_IHXCodecOldStyleAuthenticate
  207.  *
  208.  *  {EAE2FEC7-AC4B-4d15-B1DC-0A94549CF2C9}
  209.  *
  210.  */
  211. DEFINE_GUID(IID_IHXCodecOldStyleAuthenticate,
  212. 0xeae2fec7, 0xac4b, 0x4d15, 0xb1, 0xdc, 0xa, 0x94, 0x54, 0x9c, 0xf2, 0xc9);
  213. #undef  INTERFACE
  214. #define INTERFACE IHXCodecOldStyleAuthenticate
  215. DECLARE_INTERFACE_(IHXCodecOldStyleAuthenticate, IUnknown)
  216. {
  217.     /*
  218.      * IUnknown methods
  219.      */
  220.     STDMETHOD(QueryInterface) (THIS_
  221. REFIID riid,
  222. void** ppvObj) PURE;
  223.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  224.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  225.     /*
  226.      * IHXCodecOldStyleAuthenticate methods
  227.      */
  228. STDMETHOD(SetPassword) (THIS_ const char* password) PURE ;
  229. } ;
  230. /****************************************************************************
  231.  * 
  232.  *  Interface:
  233.  *
  234.  * IQueryDecoderUnit
  235.  *
  236.  *  Purpose:
  237.  *
  238.  * Query Interface for Decoder Unit object. Used by encoder client (Producer)
  239.  *
  240.  *  IID_IDecoderUnitQuery
  241.  *
  242.  * {5720A4DF-7B79-47ae-8494-6B4652F2D4AD}
  243.  *
  244.  */
  245. DEFINE_GUID(IID_IQueryDecoderUnit, 
  246.     0x5720a4df, 0x7b79, 0x47ae, 0x84, 0x94, 0x6b, 0x46, 0x52, 0xf2, 0xd4, 0xad);
  247. #undef  INTERFACE
  248. #define INTERFACE   IQueryDecoderUnit
  249. DECLARE_INTERFACE_(IQueryDecoderUnit, IUnknown)
  250. {
  251.     /*
  252.      * IUnknown methods
  253.      */
  254.     STDMETHOD(QueryInterface) (THIS_
  255. REFIID riid,
  256. void** ppvObj) PURE;
  257.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  258.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  259.     /*
  260.      * IQueryDecoderUnit methods
  261.      */
  262.     /* get a pointer to this decoder unit's data, together with its length in bytes and
  263.        the number of PCM samples it represents (when decoded). Use nSamples to do
  264.        timestamping */
  265.     STDMETHOD(getData) (THIS_
  266. const char*& data, UINT32& nBytes, UINT32& nSamples) CONSTMETHOD PURE ;
  267.     /* get the buffer fullness that the decoder has when this packet has been decoded. If this
  268.        number is transmitted in the bitstream, startup time could be minimized after a seek() or
  269.        after massive packet loss */
  270.     STDMETHOD_(INT32,getBufferFullness) (THIS_) CONSTMETHOD PURE ;
  271.     /*
  272.      * decoder unit flags. 
  273.      */
  274.     enum FLAGS {
  275. ENDOFSTREAM = 1
  276.     } ;
  277.     /*
  278.      * return any flags set on this decoder unit
  279.      */
  280.     STDMETHOD_(FLAGS, getFlags) (THIS_) CONSTMETHOD PURE ;
  281. };
  282. /****************************************************************************
  283.  * 
  284.  *  Interface:
  285.  *
  286.  * IHXAudioDecoder
  287.  *
  288.  *  Purpose:
  289.  *
  290.  * Interface for RealMedia audio decoders
  291.  *
  292.  *  IID_IHXAudioDecoder
  293.  *
  294.  * {26139EDA-98D8-437b-9229-949D3BEF2551}
  295.  *
  296.  */
  297. DEFINE_GUID(IID_IHXAudioDecoder,
  298.     0x26139eda, 0x98d8, 0x437b, 0x92, 0x29, 0x94, 0x9d, 0x3b, 0xef, 0x25, 0x51);
  299. #undef  INTERFACE
  300. #define INTERFACE   IHXAudioDecoder
  301. DECLARE_INTERFACE_(IHXAudioDecoder, IUnknown)
  302. {
  303.     /*
  304.      * IUnknown methods
  305.      */
  306.     STDMETHOD(QueryInterface) (THIS_
  307. REFIID riid,
  308. void** ppvObj) PURE;
  309.     STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
  310.     STDMETHOD_(ULONG32,Release) (THIS) PURE;
  311.     /*
  312.      * IHXAudioDecoder methods
  313.      */
  314. /* configure the decoder. Needs to be called before starting to decode.
  315. cfgType: The interpretation depends on the decoder. In the case of an AAC
  316. decoder, for example, it tells the decoder whether it is configured
  317. with an ADIF header, ADTS header, or MPEG-4 AudioSpecificConfig
  318. hdr: a pointer to the config data.
  319. nBytes: the number of bytes in the config data.
  320.  */
  321.     STDMETHOD(OpenDecoder) (THIS_
  322. UINT32 cfgType,
  323. const void* config,
  324. UINT32 nBytes) PURE ;
  325. /* reset the decoder to the state just after OpenDecoder(). Use this when seeking or
  326.        when decoding has returned with an error. */
  327.     STDMETHOD(Reset) (THIS) PURE ;
  328.     /* tell the decoder to conceal nSamples samples. The concealed samples will be
  329. returned with the next Decode() call. */
  330.     STDMETHOD(Conceal) (THIS_
  331. UINT32 nSamples) PURE ;
  332. /* Decode up to nbytes bytes of bitstream data. nBytesConsumed will be updated to
  333. reflect how many bytes have been read by the decoder (and can thus be discarded
  334. in the caller). The decoder does not necessarily buffer the bitstream; that is
  335. up to the caller.
  336. samplesOut should point to an array of INT16s, large enough to hold MaxSamplesOut()
  337. samples.
  338. nSamplesOut is updated to reflect the number of samples written by the decoder.
  339. set eof when no more data is available and keep calling the decoder until it does
  340. not produce any more output.
  341. */
  342.     STDMETHOD(Decode)  (THIS_
  343. const UCHAR* data, UINT32 nBytes, UINT32 &nBytesConsumed, INT16 *samplesOut, UINT32& nSamplesOut, BOOL eof) PURE ;
  344. /*
  345. Upper limit on the number of samples the decoder will produce per call. A typical
  346. value would be 2048.
  347. */
  348.     STDMETHOD(GetMaxSamplesOut)   (THIS_
  349. UINT32& nSamples) CONSTMETHOD PURE ;
  350. /*
  351. The number of channels of audio in the audio stream.
  352. This is valid after the OpenDecoder() call.
  353. */
  354. STDMETHOD(GetNChannels) (THIS_
  355. UINT32& nChannels) CONSTMETHOD PURE ;
  356. /*
  357. The sample rate of the audio stream.
  358. This is valid after the OpenDecoder() call.
  359. */
  360. STDMETHOD(GetSampleRate) (THIS_
  361. UINT32& sampleRate) CONSTMETHOD PURE ;
  362. /*
  363.         The codec delay in samples.
  364.         To go from samples to time, divide by (nChannels*sampleRate).
  365. */
  366.     STDMETHOD(GetDelay) (THIS_
  367. UINT32& nSamples) CONSTMETHOD PURE ;
  368. } ;
  369. #ifdef __cplusplus
  370. extern "C" {
  371. #endif
  372. /* we will eventually get rid of the distinction between CreateEncoderInstance() and CreateDecoderInstance(),
  373.    merging them into a common CreateInstance(). */
  374. typedef HX_RESULT (HXEXPORT_PTR FPRACreateEncoderInstance) (const CLSID &clsid, IUnknown** ppUnknown) ;
  375. // need this for static linking under Unix
  376. HX_RESULT HXEXPORT ENTRYPOINT(RACreateEncoderInstance) (const CLSID &clsid, IUnknown** ppUnknown) ;
  377. typedef HX_RESULT (HXEXPORT_PTR FPRACreateDecoderInstance) (const CLSID &clsid, IUnknown** ppUnknown) ;
  378. // need this for static linking under Unix
  379. HX_RESULT HXEXPORT ENTRYPOINT(RACreateDecoderInstance) (const CLSID &clsid, IUnknown** ppUnknown) ;
  380. #ifdef __cplusplus
  381. }
  382. #endif
  383. #endif // _HXACODEC_H_