summaryrefslogtreecommitdiff
path: root/decoders/ffmpeg_decoder.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'decoders/ffmpeg_decoder.cpp')
-rw-r--r--decoders/ffmpeg_decoder.cpp36
1 files changed, 36 insertions, 0 deletions
diff --git a/decoders/ffmpeg_decoder.cpp b/decoders/ffmpeg_decoder.cpp
new file mode 100644
index 0000000..d66c72b
--- /dev/null
+++ b/decoders/ffmpeg_decoder.cpp
@@ -0,0 +1,36 @@
+#include "ffmpeg_decoder.h"
+
+#include <iostream>
+
+DecoderFFmpeg::DecoderFFmpeg(const std::string& filename) {
+ av_register_all();
+
+ std::cerr << "Opening file: " << av_open_input_file(&lavf_ctx, filename.c_str(), 0, 0, 0) << std::endl;
+
+ av_find_stream_info(lavf_ctx);
+
+ dump_format(lavf_ctx, 0, filename.c_str(), 0);
+
+ lavc_ctx = lavf_ctx->streams[0]->codec;
+ codec = avcodec_find_decoder(lavc_ctx->codec_id);
+
+ std::cerr << "Opening decoder: " << avcodec_open(lavc_ctx, codec) << std::endl;
+}
+
+DecoderFFmpeg::~DecoderFFmpeg() {
+
+}
+
+std::size_t DecoderFFmpeg::read(char* buf, std::size_t buf_size) {
+ AVPacket packet;
+
+ av_read_packet(lavf_ctx, &packet);
+
+ int len = avcodec_decode_audio3(lavc_ctx, (int16_t*)buf, (int*)&buf_size, &packet);
+
+ std::cerr << "Decoded " << len << " bytes of data to " << buf_size << " bytes of raw data." << std::endl;
+
+ av_free_packet(&packet);
+
+ return buf_size;
+}