17# if defined(_MSC_VER) && !defined(_USE_MATH_DEFINES)
18# define _USE_MATH_DEFINES
23# include <libavcodec/codec_id.h>
24# include <libavformat/avformat.h>
25# include <libavutil/buffer.h>
26# include <libavutil/channel_layout.h>
27# include <libavutil/imgutils.h>
28# include <libavutil/opt.h>
29# include <libavutil/rational.h>
30# include <libavutil/samplefmt.h>
36# include <AUD_Types.h>
45 AVCodecID ffmpeg_codec = {};
46 AVCodecID ffmpeg_audio_codec = {};
47 int ffmpeg_video_bitrate = 0;
48 int ffmpeg_audio_bitrate = 0;
49 int ffmpeg_gop_size = 0;
50 int ffmpeg_max_b_frames = 0;
51 int ffmpeg_autosplit_count = 0;
52 bool ffmpeg_autosplit =
false;
53 bool ffmpeg_preview =
false;
56 int ffmpeg_preset = 0;
57 int ffmpeg_profile = 0;
59 AVFormatContext *outfile =
nullptr;
60 AVCodecContext *video_codec =
nullptr;
61 AVCodecContext *audio_codec =
nullptr;
62 AVStream *video_stream =
nullptr;
63 AVStream *audio_stream =
nullptr;
64 AVFrame *current_frame =
nullptr;
68 AVFrame *img_convert_frame =
nullptr;
69 SwsContext *img_convert_ctx =
nullptr;
71 uint8_t *audio_input_buffer =
nullptr;
72 uint8_t *audio_deinterleave_buffer =
nullptr;
73 int audio_input_samples = 0;
74 double audio_time = 0.0;
75 double audio_time_total = 0.0;
76 bool audio_deinterleave =
false;
77 int audio_sample_size = 0;
79 StampData *stamp_data =
nullptr;
82 AUD_Device *audio_mixdown_device =
nullptr;
86bool movie_audio_open(MovieWriter *context,
92void movie_audio_close(MovieWriter *context,
bool is_autosplit);
94AVStream *alloc_audio_stream(MovieWriter *context,
101void write_audio_frames(MovieWriter *context,
double to_pts);
static void error(const char *str)