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

Symbian

开发平台:

Visual C++

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