src/platform/ffmpeg/ffmpeg-encoder.h (view raw)
1#ifndef FFMPEG_ENCODER
2#define FFMPEG_ENCODER
3
4#include "gba-thread.h"
5
6#include <libavcodec/avcodec.h>
7#include <libavformat/avformat.h>
8#include <libavresample/avresample.h>
9
10struct FFmpegEncoder {
11 struct GBAAVStream d;
12 AVFormatContext* context;
13
14 unsigned audioBitrate;
15 const char* audioCodec;
16
17 unsigned videoBitrate;
18 const char* videoCodec;
19
20 const char* containerFormat;
21
22 AVCodecContext* audio;
23 enum AVSampleFormat sampleFormat;
24 int sampleRate;
25 uint16_t* audioBuffer;
26 size_t audioBufferSize;
27 uint16_t* postaudioBuffer;
28 size_t postaudioBufferSize;
29 AVFrame* audioFrame;
30 size_t currentAudioSample;
31 int64_t currentAudioFrame;
32 AVAudioResampleContext* resampleContext;
33 AVStream* audioStream;
34
35 AVCodecContext* video;
36 enum AVPixelFormat pixFormat;
37 AVFrame* videoFrame;
38 int64_t currentVideoFrame;
39 AVStream* videoStream;
40};
41
42void FFmpegEncoderInit(struct FFmpegEncoder*);
43bool FFmpegEncoderSetAudio(struct FFmpegEncoder*, const char* acodec, unsigned abr);
44bool FFmpegEncoderSetVideo(struct FFmpegEncoder*, const char* vcodec, unsigned vbr);
45bool FFmpegEncoderSetContainer(struct FFmpegEncoder*, const char* container);
46bool FFmpegEncoderVerifyContainer(struct FFmpegEncoder*);
47bool FFmpegEncoderOpen(struct FFmpegEncoder*, const char* outfile);
48void FFmpegEncoderClose(struct FFmpegEncoder*);
49
50#endif