diff options
Diffstat (limited to 'Src/aacdec/NSVAACDecoder.h')
-rw-r--r-- | Src/aacdec/NSVAACDecoder.h | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/Src/aacdec/NSVAACDecoder.h b/Src/aacdec/NSVAACDecoder.h new file mode 100644 index 00000000..56b7bf25 --- /dev/null +++ b/Src/aacdec/NSVAACDecoder.h @@ -0,0 +1,52 @@ +#pragma once +#include "../nsv/dec_if.h" +#include "incs/mp4AudioDecIfc.h" +#include <bfc/platform/types.h> +#include "ADTSHeader.h" +#include "../nsv/svc_nsvFactory.h" + +// {55632E28-8171-4670-AE5D-CF714900C62E} +static const GUID NSV_AAC_GUID = +{ 0x55632e28, 0x8171, 0x4670, { 0xae, 0x5d, 0xcf, 0x71, 0x49, 0x0, 0xc6, 0x2e } }; + +class NSVDecoder : public svc_nsvFactory +{ +public: + static const char *getServiceName() { return "AAC NSV Decoder"; } + static GUID getServiceGuid() { return NSV_AAC_GUID; } + IAudioDecoder *CreateAudioDecoder(FOURCC format, IAudioOutput **output); + +protected: + RECVS_DISPATCH; +}; + +class NSVAACDecoder : public IAudioDecoder +{ +public: + static NSVAACDecoder *CreateDecoder(); + NSVAACDecoder(); + ~NSVAACDecoder(); + void Initialize(CAccessUnitPtr access_unit); + int decode(void *in, int in_len, void *out, int *out_len, unsigned int out_fmt[8]); + void flush(); + bool OK(); + +private: + void FillOutputFormat(unsigned int out_fmt[8]); + void CopyToOutput(void *out, int *out_len); + +private: + /* data */ + mp4AudioDecoderHandle decoder; + CCompositionUnitPtr composition_unit; /* output */ + CAccessUnitPtr access_unit; /* input */ + + int in_position; + int out_left; + size_t source_position; +// unsigned char pcm_buf[65536*2]; +// int pcm_buf_used; +// int readpos; +// unsigned int cbvalid; +}; + |