Open Broadcaster Software
Free, open source software for live streaming and recording
obs-output.h
Go to the documentation of this file.
1 /******************************************************************************
2  Copyright (C) 2013-2014 by Hugh Bailey <obs.jim@gmail.com>
3 
4  This program is free software: you can redistribute it and/or modify
5  it under the terms of the GNU General Public License as published by
6  the Free Software Foundation, either version 2 of the License, or
7  (at your option) any later version.
8 
9  This program is distributed in the hope that it will be useful,
10  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  GNU General Public License for more details.
13 
14  You should have received a copy of the GNU General Public License
15  along with this program. If not, see <http://www.gnu.org/licenses/>.
16 ******************************************************************************/
17 
18 #pragma once
19 
20 #ifdef __cplusplus
21 extern "C" {
22 #endif
23 
24 #define OBS_OUTPUT_VIDEO (1 << 0)
25 #define OBS_OUTPUT_AUDIO (1 << 1)
26 #define OBS_OUTPUT_AV (OBS_OUTPUT_VIDEO | OBS_OUTPUT_AUDIO)
27 #define OBS_OUTPUT_ENCODED (1 << 2)
28 #define OBS_OUTPUT_SERVICE (1 << 3)
29 #define OBS_OUTPUT_MULTI_TRACK (1 << 4)
30 #define OBS_OUTPUT_CAN_PAUSE (1 << 5)
31 
32 struct encoder_packet;
33 
35  /* required */
36  const char *id;
37 
38  uint32_t flags;
39 
40  const char *(*get_name)(void *type_data);
41 
42  void *(*create)(obs_data_t *settings, obs_output_t *output);
43  void (*destroy)(void *data);
44 
45  bool (*start)(void *data);
46  void (*stop)(void *data, uint64_t ts);
47 
48  void (*raw_video)(void *data, struct video_data *frame);
49  void (*raw_audio)(void *data, struct audio_data *frames);
50 
51  void (*encoded_packet)(void *data, struct encoder_packet *packet);
52 
53  /* optional */
54  void (*update)(void *data, obs_data_t *settings);
55 
56  void (*get_defaults)(obs_data_t *settings);
57 
58  obs_properties_t *(*get_properties)(void *data);
59 
60  void (*unused1)(void *data);
61 
62  uint64_t (*get_total_bytes)(void *data);
63 
64  int (*get_dropped_frames)(void *data);
65 
66  void *type_data;
67  void (*free_type_data)(void *type_data);
68 
69  float (*get_congestion)(void *data);
70  int (*get_connect_time_ms)(void *data);
71 
72  /* only used with encoded outputs, separated with semicolon */
73  const char *encoded_video_codecs;
74  const char *encoded_audio_codecs;
75 
76  /* raw audio callback for multi track outputs */
77  void (*raw_audio2)(void *data, size_t idx, struct audio_data *frames);
78 };
79 
80 EXPORT void obs_register_output_s(const struct obs_output_info *info,
81  size_t size);
82 
83 #define obs_register_output(info) \
84  obs_register_output_s(info, sizeof(struct obs_output_info))
85 
86 #ifdef __cplusplus
87 }
88 #endif
obs_output_info::get_connect_time_ms
int(* get_connect_time_ms)(void *data)
Definition: obs-output.h:70
obs_output_info::type_data
void * type_data
Definition: obs-output.h:66
video_data::data
uint8_t * data[MAX_AV_PLANES]
Definition: video-io.h:87
audio_data::frames
uint32_t frames
Definition: audio-io.h:80
obs_output_info::encoded_audio_codecs
const char * encoded_audio_codecs
Definition: obs-output.h:74
encoder_packet::data
uint8_t * data
Definition: obs-encoder.h:45
obs_output_info::get_congestion
float(* get_congestion)(void *data)
Definition: obs-output.h:69
obs_output_info
Definition: obs-output.h:34
obs_data_t
struct obs_data obs_data_t
Definition: obs-data.h:42
EXPORT
#define EXPORT
Definition: c99defs.h:37
audio_data::data
uint8_t * data[MAX_AV_PLANES]
Definition: audio-io.h:79
obs_output_info::unused1
void(* unused1)(void *data)
Definition: obs-output.h:60
obs_output_info::raw_audio
void(* raw_audio)(void *data, struct audio_data *frames)
Definition: obs-output.h:49
obs_output_info::id
const char * id
Definition: obs-output.h:36
obs_output_info::update
void(* update)(void *data, obs_data_t *settings)
Definition: obs-output.h:54
obs_output_info::stop
void(* stop)(void *data, uint64_t ts)
Definition: obs-output.h:46
audio_data
Definition: audio-io.h:78
obs_output_info::get_dropped_frames
int(* get_dropped_frames)(void *data)
Definition: obs-output.h:64
obs_output_info::free_type_data
void(* free_type_data)(void *type_data)
Definition: obs-output.h:67
obs_output_info::encoded_video_codecs
const char * encoded_video_codecs
Definition: obs-output.h:73
obs_output_info::flags
uint32_t flags
Definition: obs-output.h:38
obs_properties_t
struct obs_properties obs_properties_t
Definition: obs-properties.h:110
obs_output_info::destroy
void(* destroy)(void *data)
Definition: obs-output.h:43
obs_output_info::get_defaults
void(* get_defaults)(obs_data_t *settings)
Definition: obs-output.h:56
obs_output_info::get_total_bytes
uint64_t(* get_total_bytes)(void *data)
Definition: obs-output.h:62
encoder_packet
Definition: obs-encoder.h:44
obs_output
Definition: obs-internal.h:889
video_data
Definition: video-io.h:86
obs_output_info::raw_audio2
void(* raw_audio2)(void *data, size_t idx, struct audio_data *frames)
Definition: obs-output.h:77
obs_output_info::raw_video
void(* raw_video)(void *data, struct video_data *frame)
Definition: obs-output.h:48
obs_output_info::start
bool(* start)(void *data)
Definition: obs-output.h:45
obs_register_output_s
EXPORT void obs_register_output_s(const struct obs_output_info *info, size_t size)
obs_output_info::encoded_packet
void(* encoded_packet)(void *data, struct encoder_packet *packet)
Definition: obs-output.h:51