1 #ifndef GAME_SOUND_FFMPEG_DECODER_H
2 #define GAME_SOUND_FFMPEG_DECODER_H
7 #include <libavcodec/avcodec.h>
8 #include <libavformat/avformat.h>
13 #if AV_VERSION_INT(52, 2, 0) <= AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
14 LIBAVUTIL_VERSION_MINOR, LIBAVUTIL_VERSION_MICRO)
15 #include <libavutil/channel_layout.h>
18 #if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(55,28,1)
19 #define av_frame_alloc avcodec_alloc_frame
25 #include <libswresample/swresample.h>
62 static int readPacket(
void *user_data, uint8_t *
buf,
int buf_size);
63 static int writePacket(
void *user_data, uint8_t *
buf,
int buf_size);
64 static int64_t
seek(
void *user_data, int64_t offset,
int whence);
69 void open(
const std::string &fname)
override;
70 void close()
override;
75 size_t read(
char *buffer,
size_t bytes)
override;
76 void readAll(std::vector<char> &output)
override;
88 #ifndef DEFAULT_DECODER
89 #define DEFAULT_DECODER (::MWSound::FFmpeg_Decoder)
int mFrameSize
Definition: ffmpeg_decoder.hpp:46
Files::IStreamPtr mDataStream
Definition: ffmpeg_decoder.hpp:60
bool getAVAudioData()
Definition: ffmpeg_decoder.cpp:91
void open(const std::string &fname) override
Definition: ffmpeg_decoder.cpp:179
size_t read(char *buffer, size_t bytes) override
Definition: ffmpeg_decoder.cpp:384
SampleType
Definition: sound_decoder.hpp:14
std::shared_ptr< std::istream > IStreamPtr
Definition: constrainedfilestream.hpp:21
void getInfo(int *samplerate, ChannelConfig *chans, SampleType *type) override
Definition: ffmpeg_decoder.cpp:314
SwrContext * mSwr
Definition: ffmpeg_decoder.hpp:51
uint8_t * mDataBuf
Definition: ffmpeg_decoder.hpp:54
int64_t mOutputChannelLayout
Definition: ffmpeg_decoder.hpp:53
FFmpeg_Decoder & operator=(const FFmpeg_Decoder &rhs)
FFmpeg_Decoder(const FFmpeg_Decoder &rhs)
void close() override
Definition: ffmpeg_decoder.cpp:275
Definition: ffmpeg_decoder.hpp:38
int mFramePos
Definition: ffmpeg_decoder.hpp:47
double mNextPts
Definition: ffmpeg_decoder.hpp:49
AVPacket mPacket
Definition: ffmpeg_decoder.hpp:43
std::string getName() override
Definition: ffmpeg_decoder.cpp:309
uint8_t ** mFrameData
Definition: ffmpeg_decoder.hpp:55
virtual ~FFmpeg_Decoder()
Definition: ffmpeg_decoder.cpp:446
AVFrame * mFrame
Definition: ffmpeg_decoder.hpp:44
AVFormatContext * mFormatCtx
Definition: ffmpeg_decoder.hpp:40
static int64_t seek(void *user_data, int64_t offset, int whence)
Definition: ffmpeg_decoder.cpp:35
void readAll(std::vector< char > &output) override
Definition: ffmpeg_decoder.cpp:394
static int writePacket(void *user_data, uint8_t *buf, int buf_size)
Definition: ffmpeg_decoder.cpp:29
AVStream ** mStream
Definition: ffmpeg_decoder.hpp:41
static int readPacket(void *user_data, uint8_t *buf, int buf_size)
Definition: ffmpeg_decoder.cpp:14
bool getNextPacket()
Definition: ffmpeg_decoder.cpp:68
char buf[1024]
Definition: crashcatcher.cpp:62
Definition: soundmanagerimp.hpp:45
int mDataBufLen
Definition: ffmpeg_decoder.hpp:56
enum AVSampleFormat mOutputSampleFormat
Definition: ffmpeg_decoder.hpp:52
The main class responsible for loading files from a virtual file system.
Definition: manager.hpp:20
Definition: sound_decoder.hpp:33
size_t getSampleOffset() override
Definition: ffmpeg_decoder.cpp:411
ChannelConfig
Definition: sound_decoder.hpp:21
size_t readAVAudioData(void *data, size_t length)
Definition: ffmpeg_decoder.cpp:148