all repos — mgba @ 2000c8e2dfc050a817a96449cadd5f5f09b3e58a

mGBA Game Boy Advance Emulator

src/feature/ffmpeg/ffmpeg-encoder.h (view raw)

 1/* Copyright (c) 2013-2015 Jeffrey Pfau
 2 *
 3 * This Source Code Form is subject to the terms of the Mozilla Public
 4 * License, v. 2.0. If a copy of the MPL was not distributed with this
 5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 6#ifndef FFMPEG_ENCODER
 7#define FFMPEG_ENCODER
 8
 9#include "gba/gba.h"
10
11#include <libavformat/avformat.h>
12
13struct FFmpegEncoder {
14	struct mAVStream d;
15	struct AVFormatContext* context;
16
17	unsigned audioBitrate;
18	const char* audioCodec;
19
20	unsigned videoBitrate;
21	const char* videoCodec;
22
23	const char* containerFormat;
24
25	struct AVCodecContext* audio;
26	enum AVSampleFormat sampleFormat;
27	int sampleRate;
28	uint16_t* audioBuffer;
29	size_t audioBufferSize;
30	uint16_t* postaudioBuffer;
31	size_t postaudioBufferSize;
32	AVFrame* audioFrame;
33	size_t currentAudioSample;
34	int64_t currentAudioFrame;
35	int64_t nextAudioPts;
36	struct AVAudioResampleContext* resampleContext;
37#if LIBAVCODEC_VERSION_MAJOR >= 57
38	struct AVBSFContext* absf; // Needed for AAC in MP4
39#else
40	struct AVBitStreamFilterContext* absf; // Needed for AAC in MP4
41#endif
42	struct AVStream* audioStream;
43
44	struct AVCodecContext* video;
45	enum AVPixelFormat pixFormat;
46	struct AVFrame* videoFrame;
47	int width;
48	int height;
49	int iwidth;
50	int iheight;
51	int64_t currentVideoFrame;
52	struct SwsContext* scaleContext;
53	struct AVStream* videoStream;
54};
55
56void FFmpegEncoderInit(struct FFmpegEncoder*);
57bool FFmpegEncoderSetAudio(struct FFmpegEncoder*, const char* acodec, unsigned abr);
58bool FFmpegEncoderSetVideo(struct FFmpegEncoder*, const char* vcodec, unsigned vbr);
59bool FFmpegEncoderSetContainer(struct FFmpegEncoder*, const char* container);
60void FFmpegEncoderSetDimensions(struct FFmpegEncoder*, int width, int height);
61bool FFmpegEncoderVerifyContainer(struct FFmpegEncoder*);
62bool FFmpegEncoderOpen(struct FFmpegEncoder*, const char* outfile);
63void FFmpegEncoderClose(struct FFmpegEncoder*);
64bool FFmpegEncoderIsOpen(struct FFmpegEncoder*);
65
66#endif