winamp/Src/Plugins/DSP/sc_serv3/ADTSHeader.h
2024-09-24 14:54:57 +02:00

62 lines
1.8 KiB
C

#pragma once
#ifndef _ADTS_HEADER_H
#define _ADTS_HEADER_H
#include "nmrCommon/intTypes.h"
#include "global.h"
#include "uvox2Common.h"
typedef struct ADTSHeader
{
unsigned int syncword;
unsigned int layer;
unsigned int id;
unsigned int protection;
unsigned int profile;
unsigned int sample_rate_index;
unsigned int private_bit;
unsigned int channel_configuration;
unsigned int original;
unsigned int home;
int frame_length;
unsigned int buffer_fullness;
unsigned int num_data_blocks;
} ADTSHeader, *aac_adts_header_t;
enum
{
NErr_Success = 0,
NErr_True = 0,
NErr_False = 8, // returned from a bool-like function to indicate "false" as opposed to "i had an error while figuring it out"
NErr_UnsupportedFormat = 13,
NErr_LostSynchronization = 17,
NErr_WrongFormat = 24, // data was understood but is indicating a different format than expected. e.g. an layer 2 header being encountered by a layer 3 parser
NErr_Reserved = 25 // typically returned when a parser encounters data with a reserved flag set to true
};
struct AAC_FrameInfo : public parserInfo
{
int m_blocks;
int m_aot;
int verifyFrame (const unsigned char *buf, unsigned int len);
int getUvoxType() { return AAC_LC_DATA; }
const char *getVersionName() const;
const char *getAOT() const;
AAC_FrameInfo (unsigned long value = 0);
AAC_FrameInfo (const unsigned char *p, unsigned int len);
};
int getAACFrameInfo (const unsigned char *hdr, unsigned int len, AAC_FrameInfo &info);
/* must be 7 bytes */
const int aac_adts_parse(const aac_adts_header_t header, const __uint8 *buffer);
const int aac_adts_get_channel_count(const aac_adts_header_t header);
#if 0
const int aac_adts_match(const aac_adts_header_t header1, const aac_adts_header_t header2);
#endif
const __uint16 getADTSFrameInfo(const char *hdr, unsigned int *samplerate, __uint8 *asc_header = 0);
#endif