From e13dae8299dfd932c3d06246f305b2451e09b4be Mon Sep 17 00:00:00 2001 From: Aaron Boxer Date: Mon, 1 Jul 2019 08:26:43 -0400 Subject: [PATCH] obs-ffmpeg: Expose ffmpeg_data_init and ffmpeg_data_free methods --- plugins/obs-ffmpeg/obs-ffmpeg-output.c | 70 ++------------------------ plugins/obs-ffmpeg/obs-ffmpeg-output.h | 68 +++++++++++++++++++++++++ 2 files changed, 71 insertions(+), 67 deletions(-) create mode 100644 plugins/obs-ffmpeg/obs-ffmpeg-output.h diff --git a/plugins/obs-ffmpeg/obs-ffmpeg-output.c b/plugins/obs-ffmpeg/obs-ffmpeg-output.c index 8c4895867..d4c80ed76 100644 --- a/plugins/obs-ffmpeg/obs-ffmpeg-output.c +++ b/plugins/obs-ffmpeg/obs-ffmpeg-output.c @@ -22,73 +22,10 @@ #include #include -#include -#include -#include -#include - +#include "obs-ffmpeg-output.h" #include "obs-ffmpeg-formats.h" #include "obs-ffmpeg-compat.h" -struct ffmpeg_cfg { - const char *url; - const char *format_name; - const char *format_mime_type; - const char *muxer_settings; - int gop_size; - int video_bitrate; - int audio_bitrate; - const char *video_encoder; - int video_encoder_id; - const char *audio_encoder; - int audio_encoder_id; - const char *video_settings; - const char *audio_settings; - int audio_mix_count; - int audio_tracks; - enum AVPixelFormat format; - enum AVColorRange color_range; - enum AVColorSpace color_space; - int scale_width; - int scale_height; - int width; - int height; -}; - -struct ffmpeg_data { - AVStream *video; - AVStream **audio_streams; - AVCodec *acodec; - AVCodec *vcodec; - AVFormatContext *output; - struct SwsContext *swscale; - - int64_t total_frames; - AVFrame *vframe; - int frame_size; - - uint64_t start_timestamp; - - int64_t total_samples[MAX_AUDIO_MIXES]; - uint32_t audio_samplerate; - enum audio_format audio_format; - size_t audio_planes; - size_t audio_size; - int num_audio_streams; - - /* audio_tracks is a bitmask storing the indices of the mixes */ - int audio_tracks; - struct circlebuf excess_frames[MAX_AUDIO_MIXES][MAX_AV_PLANES]; - uint8_t *samples[MAX_AUDIO_MIXES][MAX_AV_PLANES]; - AVFrame *aframe[MAX_AUDIO_MIXES]; - - struct ffmpeg_cfg config; - - bool initialized; - - char *last_error; -}; - struct ffmpeg_output { obs_output_t *output; volatile bool active; @@ -522,7 +459,7 @@ static void close_audio(struct ffmpeg_data *data) } } -static void ffmpeg_data_free(struct ffmpeg_data *data) +void ffmpeg_data_free(struct ffmpeg_data *data) { if (data->initialized) av_write_trailer(data->output); @@ -582,8 +519,7 @@ static void set_encoder_ids(struct ffmpeg_data *data) data->config.audio_encoder, data->config.audio_encoder_id); } -static bool ffmpeg_data_init(struct ffmpeg_data *data, - struct ffmpeg_cfg *config) +bool ffmpeg_data_init(struct ffmpeg_data *data, struct ffmpeg_cfg *config) { bool is_rtmp = false; diff --git a/plugins/obs-ffmpeg/obs-ffmpeg-output.h b/plugins/obs-ffmpeg/obs-ffmpeg-output.h new file mode 100644 index 000000000..adb4494f6 --- /dev/null +++ b/plugins/obs-ffmpeg/obs-ffmpeg-output.h @@ -0,0 +1,68 @@ +#pragma once + +#include +#include +#include +#include + +struct ffmpeg_cfg { + const char *url; + const char *format_name; + const char *format_mime_type; + const char *muxer_settings; + int gop_size; + int video_bitrate; + int audio_bitrate; + const char *video_encoder; + int video_encoder_id; + const char *audio_encoder; + int audio_encoder_id; + const char *video_settings; + const char *audio_settings; + int audio_mix_count; + int audio_tracks; + enum AVPixelFormat format; + enum AVColorRange color_range; + enum AVColorSpace color_space; + int scale_width; + int scale_height; + int width; + int height; +}; + +struct ffmpeg_data { + AVStream *video; + AVStream **audio_streams; + AVCodec *acodec; + AVCodec *vcodec; + AVFormatContext *output; + struct SwsContext *swscale; + + int64_t total_frames; + AVFrame *vframe; + int frame_size; + + uint64_t start_timestamp; + + int64_t total_samples[MAX_AUDIO_MIXES]; + uint32_t audio_samplerate; + enum audio_format audio_format; + size_t audio_planes; + size_t audio_size; + int num_audio_streams; + + /* audio_tracks is a bitmask storing the indices of the mixes */ + int audio_tracks; + struct circlebuf excess_frames[MAX_AUDIO_MIXES][MAX_AV_PLANES]; + uint8_t *samples[MAX_AUDIO_MIXES][MAX_AV_PLANES]; + AVFrame *aframe[MAX_AUDIO_MIXES]; + + struct ffmpeg_cfg config; + + bool initialized; + + char *last_error; +}; + +bool ffmpeg_data_init(struct ffmpeg_data *data, struct ffmpeg_cfg *config); +void ffmpeg_data_free(struct ffmpeg_data *data); -- GitLab