16#ifndef OPENSHOT_FFMPEG_WRITER_H
17#define OPENSHOT_FFMPEG_WRITER_H
121 int64_t video_timestamp;
122 int64_t audio_timestamp;
124 bool prepare_streams;
129 AVStream *audio_st, *video_st;
130 AVCodecContext *video_codec_ctx;
131 AVCodecContext *audio_codec_ctx;
132 SwsContext *img_convert_ctx;
134 uint8_t *audio_outbuf;
135 uint8_t *audio_encoder_buffer;
137 AVFrame *persistent_src_frame =
nullptr;
138 AVFrame *persistent_dst_frame =
nullptr;
139 uint8_t *persistent_dst_buffer =
nullptr;
140 int persistent_dst_size = 0;
142 int audio_outbuf_size;
143 int audio_input_frame_size;
144 int initial_audio_input_frame_size;
145 int audio_input_position;
146 int audio_encoder_buffer_size;
151 int original_sample_rate;
152 int original_channels;
154 std::shared_ptr<openshot::Frame> last_frame;
155 std::map<std::shared_ptr<openshot::Frame>, AVFrame *> av_frames;
158 void add_avframe(std::shared_ptr<openshot::Frame> frame, AVFrame *av_frame);
161 AVStream *add_audio_stream();
164 AVStream *add_video_stream();
167 AVFrame *allocate_avframe(
PixelFormat pix_fmt,
int width,
int height,
int *buffer_size, uint8_t *new_buffer);
170 void auto_detect_format();
173 void close_audio(AVFormatContext *oc, AVStream *st);
176 void close_video(AVFormatContext *oc, AVStream *st);
179 void flush_encoders();
182 void initialize_streams();
185 void open_audio(AVFormatContext *oc, AVStream *st);
188 void open_video(AVFormatContext *oc, AVStream *st);
191 void process_video_packet(std::shared_ptr<openshot::Frame> frame);
194 void write_audio_packets(
bool is_final, std::shared_ptr<openshot::Frame> frame);
197 bool write_video_packet(std::shared_ptr<openshot::Frame> frame, AVFrame *frame_final);
200 void write_frame(std::shared_ptr<Frame> frame);
300 void WriteFrame(std::shared_ptr<openshot::Frame> frame);
319 void AddSphericalMetadata(
const std::string& projection=
"equirectangular",
float yaw_deg=0.0f,
float pitch_deg=0.0f,
float roll_deg=0.0f);
Header file for FFmpegUtilities.
Header file for ReaderBase class.
Header file for WriterBase class.
void Close()
Close the writer.
void SetAudioOptions(bool has_audio, std::string codec, int sample_rate, int channels, openshot::ChannelLayout channel_layout, int bit_rate)
Set audio export options.
void SetOption(openshot::StreamType stream, std::string name, std::string value)
Set custom options (some codecs accept additional params). This must be called after the PrepareStrea...
void PrepareStreams()
Prepare & initialize streams and open codecs. This method is called automatically by the Open() metho...
void SetVideoOptions(bool has_video, std::string codec, openshot::Fraction fps, int width, int height, openshot::Fraction pixel_ratio, bool interlaced, bool top_field_first, int bit_rate)
Set video export options.
bool IsOpen()
Determine if writer is open or closed.
void ResampleAudio(int sample_rate, int channels)
Set audio resample options.
void AddSphericalMetadata(const std::string &projection="equirectangular", float yaw_deg=0.0f, float pitch_deg=0.0f, float roll_deg=0.0f)
Add spherical (360°) video metadata to the video stream.
void WriteHeader()
Write the file header (after the options are set). This method is called automatically by the Open() ...
FFmpegWriter(const std::string &path)
Constructor for FFmpegWriter. Throws an exception on failure to open path.
static bool IsValidCodec(std::string codec_name)
Determine if codec name is valid.
void OutputStreamInfo()
Output the ffmpeg info about this format, streams, and codecs (i.e. dump format).
void WriteFrame(std::shared_ptr< openshot::Frame > frame)
Add a frame to the stack waiting to be encoded.
void WriteTrailer()
Write the file trailer (after all frames are written). This is called automatically by the Close() me...
This class represents a fraction.
This abstract class is the base class, used by all readers in libopenshot.
WriterBase()
Constructor for WriterBase class, many things are initialized here.
This namespace is the default namespace for all code in the openshot library.
ChannelLayout
This enumeration determines the audio channel layout (such as stereo, mono, 5 point surround,...
StreamType
This enumeration designates the type of stream when encoding (video or audio).
@ AUDIO_STREAM
An audio stream (used to determine which type of stream).
@ VIDEO_STREAM
A video stream (used to determine which type of stream).