extern "C" {
+#define __STDC_CONSTANT_MACROS
+
#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
#include <libswresample/swresample.h>
+#include <libavutil/avutil.h>
}
struct AVCodecContextDeleter {
void operator() (AVCodecContext *ctx) {
- avcodec_free_context(&ctx);
+ avcodec_close(ctx);
+ av_freep(&ctx);
}
};
}
};
+#if (LIBAVCODEC_VERSION_MAJOR >= 55)
struct AVFrameDeleter {
void operator() (AVFrame *frame) {
av_frame_free(&frame);
}
};
+#endif
struct AVSampleDeleter {
void operator() (uint8_t *data) {
}
AVPacket packet;
- AVFrame* audio_frame = av_frame_alloc();
+#if (LIBAVCODEC_VERSION_MAJOR >= 55)
+ AVFrame *audio_frame = av_frame_alloc();
std::unique_ptr<AVFrame, AVFrameDeleter> audio_frame_deleter(audio_frame);
+#else
+ AVFrame frame_holder {};
+ AVFrame *audio_frame = &frame_holder;
+#endif
while (av_read_frame(format_ctx, &packet) >= 0) {
std::unique_ptr<AVPacket, AVPacketDeleter> av_packet_deleter(&packet);