vdr-plugin-softhddevice-drm-gles 1.4.0
codec_audio.h
Go to the documentation of this file.
1
21#ifndef __CODEC_AUDIO_H
22#define __CODEC_AUDIO_H
23
24extern "C" {
25#include <libavcodec/avcodec.h>
26}
27
31#define CODEC_PCM 0x01
32#define CODEC_MPA 0x02
33#define CODEC_AC3 0x04
34#define CODEC_EAC3 0x08
35#define CODEC_DTS 0x10
36
41{
43 IEC61937_AC3 = 0x01,
50};
51
52#define IEC61937_PREAMBLE1 0xF872
53#define IEC61937_PREAMBLE2 0x4E1F
54#define DTS_PREAMBLE_16BE_1 0x7FFE
55#define DTS_PREAMBLE_16BE_2 0x8001
56
60#define DTS1_FRAME_SIZE 512
61#define DTS2_FRAME_SIZE 1024
62#define DTS3_FRAME_SIZE 2048
63#define AC3_FRAME_SIZE 1536
64#define EAC3_FRAME_SIZE 6144
65#define TRUEHD_FRAME_SIZE 15360
66
67#define MAX_FRAME_SIZE EAC3_FRAME_SIZE
68
69class cSoftHdAudio;
70
75public:
77 virtual ~cAudioDecoder(void);
78 void Open(AVCodecID, AVCodecParameters * = nullptr, AVRational = { .num = 1, .den = 90000 });
79 void Close(void);
80 void Decode(const AVPacket *);
81 void FlushBuffers(void);
82 void SetPassthrough(int);
83 AVCodecID GetCodecId() const { return m_codecId; };
84
85private:
87 AVCodecContext *m_pAudioCtx;
88 AVCodecID m_codecId = AV_CODEC_ID_NONE;
89 AVFrame *m_pFrame;
90 int64_t m_lastPts;
100
101 int DecodePassthrough(const AVPacket *, AVFrame *);
102 int UpdateFormat(void);
103};
104
105#endif
cAudioDecoder - Audio decoder class
Definition: codec_audio.h:74
int DecodePassthrough(const AVPacket *, AVFrame *)
Passthrough audio data.
uint16_t m_spdifOutput[MAX_FRAME_SIZE *2]
SPDIF output buffer.
Definition: codec_audio.h:97
int UpdateFormat(void)
Handle audio format changes.
AVCodecContext * m_pAudioCtx
ffmpeg audio codec context
Definition: codec_audio.h:87
virtual ~cAudioDecoder(void)
Audio decoder class destructor.
Definition: codec_audio.cpp:67
int m_currentHwSampleRate
current hw sample rate
Definition: codec_audio.h:95
void FlushBuffers(void)
Flush the audio decoder.
int m_currentHwNumChannels
current number of hw channels
Definition: codec_audio.h:96
void Decode(const AVPacket *)
Decode an audio packet.
AVFrame * m_pFrame
decoded ffmpeg audio frame
Definition: codec_audio.h:89
int m_spdifIndex
index into SPDIF output buffer
Definition: codec_audio.h:98
int m_passthroughMask
passthrough mask to be set
Definition: codec_audio.h:91
AVCodecID m_codecId
current codec id
Definition: codec_audio.h:88
int m_currentPassthrough
current passthrough mask
Definition: codec_audio.h:92
AVCodecID GetCodecId() const
Definition: codec_audio.h:83
cAudioDecoder(cSoftHdAudio *)
Audio decoder class constructor.
Definition: codec_audio.cpp:48
int m_spdifRepeatCount
SPDIF repeat counter.
Definition: codec_audio.h:99
int64_t m_lastPts
last seen PTS
Definition: codec_audio.h:90
int m_currentSampleRate
current sample rate
Definition: codec_audio.h:93
cSoftHdAudio * m_pAudio
audio module
Definition: codec_audio.h:86
void SetPassthrough(int)
Set audio pass-through mask.
int m_currentNumChannels
current number of channels
Definition: codec_audio.h:94
void Open(AVCodecID, AVCodecParameters *=nullptr, AVRational={ .num=1,.den=90000 })
Open and initiate the audio decoder.
Definition: codec_audio.cpp:81
void Close(void)
Close the audio decoder.
cSoftHdAudio - Audio class
Definition: audio.h:45
IEC61937
IEC Data type enumeration.
Definition: codec_audio.h:41
@ IEC61937_TRUEHD
TrueHD data (not used)
Definition: codec_audio.h:49
@ IEC61937_DTS3
DTS type III (2048 samples)
Definition: codec_audio.h:47
@ IEC61937_DTS2
DTS type II (1024 samples)
Definition: codec_audio.h:46
@ IEC61937_AC3
AC-3 data.
Definition: codec_audio.h:43
@ IEC61937_NULL
no data
Definition: codec_audio.h:42
@ IEC61937_DTSHD
DTS HD data (not used)
Definition: codec_audio.h:48
@ IEC61937_EAC3
E-AC-3 data.
Definition: codec_audio.h:44
@ IEC61937_DTS1
DTS type I (512 samples)
Definition: codec_audio.h:45
#define MAX_FRAME_SIZE
Definition: codec_audio.h:67