obs-ffmpeg: Expose ffmpeg_data_init and ffmpeg_data_free methods
This commit is contained in:
parent
2a917531fd
commit
e13dae8299
@ -22,73 +22,10 @@
|
||||
#include <util/darray.h>
|
||||
#include <util/platform.h>
|
||||
|
||||
#include <libavutil/opt.h>
|
||||
#include <libavutil/pixdesc.h>
|
||||
#include <libavformat/avformat.h>
|
||||
#include <libswscale/swscale.h>
|
||||
|
||||
#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;
|
||||
|
||||
|
68
plugins/obs-ffmpeg/obs-ffmpeg-output.h
Normal file
68
plugins/obs-ffmpeg/obs-ffmpeg-output.h
Normal file
@ -0,0 +1,68 @@
|
||||
#pragma once
|
||||
|
||||
#include <libavutil/opt.h>
|
||||
#include <libavutil/pixdesc.h>
|
||||
#include <libavformat/avformat.h>
|
||||
#include <libswscale/swscale.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;
|
||||
};
|
||||
|
||||
bool ffmpeg_data_init(struct ffmpeg_data *data, struct ffmpeg_cfg *config);
|
||||
void ffmpeg_data_free(struct ffmpeg_data *data);
|
Loading…
x
Reference in New Issue
Block a user