From 12cdaec1a7db7f3e9a937271afa9f1e93625d49b Mon Sep 17 00:00:00 2001 From: jp9000 Date: Tue, 15 Mar 2016 20:26:50 -0700 Subject: [PATCH] libobs: Move frame-related functions to obs-internal.h Allows access in other source files (particularly the deinterlacer) --- libobs/obs-internal.h | 29 +++++++++++++++++++++++++++++ libobs/obs-source.c | 33 +++------------------------------ 2 files changed, 32 insertions(+), 30 deletions(-) diff --git a/libobs/obs-internal.h b/libobs/obs-internal.h index 2be6809d2..f898034cf 100644 --- a/libobs/obs-internal.h +++ b/libobs/obs-internal.h @@ -675,6 +675,28 @@ static inline void obs_source_dosignal(struct obs_source *source, &data); } +/* maximum timestamp variance in nanoseconds */ +#define MAX_TS_VAR 2000000000ULL + +static inline bool frame_out_of_bounds(const obs_source_t *source, uint64_t ts) +{ + if (ts < source->last_frame_ts) + return ((source->last_frame_ts - ts) > MAX_TS_VAR); + else + return ((ts - source->last_frame_ts) > MAX_TS_VAR); +} + +static inline enum gs_color_format convert_video_format( + enum video_format format) +{ + if (format == VIDEO_FORMAT_RGBA) + return GS_RGBA; + else if (format == VIDEO_FORMAT_BGRA) + return GS_BGRA; + + return GS_BGRX; +} + extern void obs_source_activate(obs_source_t *source, enum view_type type); extern void obs_source_deactivate(obs_source_t *source, enum view_type type); extern void obs_source_video_tick(obs_source_t *source, float seconds); @@ -686,6 +708,13 @@ extern void obs_source_audio_render(obs_source_t *source, uint32_t mixers, extern void add_alignment(struct vec2 *v, uint32_t align, int cx, int cy); +extern struct obs_source_frame *filter_async_video(obs_source_t *source, + struct obs_source_frame *in); +extern bool set_async_texture_size(struct obs_source *source, + const struct obs_source_frame *frame); +extern void remove_async_frame(obs_source_t *source, + struct obs_source_frame *frame); + /* ------------------------------------------------------------------------- */ /* outputs */ diff --git a/libobs/obs-source.c b/libobs/obs-source.c index 1845cc328..e27dd69c6 100644 --- a/libobs/obs-source.c +++ b/libobs/obs-source.c @@ -888,8 +888,6 @@ void obs_source_deactivate(obs_source_t *source, enum view_type type) static inline struct obs_source_frame *get_closest_frame(obs_source_t *source, uint64_t sys_time); -static void remove_async_frame(obs_source_t *source, - struct obs_source_frame *frame); void obs_source_video_tick(obs_source_t *source, float seconds) { @@ -965,8 +963,6 @@ static inline size_t conv_time_to_frames(const size_t sample_rate, return (size_t)(duration * (uint64_t)sample_rate / 1000000000ULL); } -/* maximum timestamp variance in nanoseconds */ -#define MAX_TS_VAR 2000000000ULL /* maximum buffer size */ #define MAX_BUF_SIZE (1000 * AUDIO_OUTPUT_FRAMES * sizeof(float)) @@ -1280,18 +1276,7 @@ static inline bool init_gpu_conversion(struct obs_source *source, return false; } -static inline enum gs_color_format convert_video_format( - enum video_format format) -{ - if (format == VIDEO_FORMAT_RGBA) - return GS_RGBA; - else if (format == VIDEO_FORMAT_BGRA) - return GS_BGRA; - - return GS_BGRX; -} - -static inline bool set_async_texture_size(struct obs_source *source, +bool set_async_texture_size(struct obs_source *source, const struct obs_source_frame *frame) { enum convert_type cur = get_convert_type(frame->format); @@ -1566,9 +1551,6 @@ static void obs_source_draw_async_texture(struct obs_source *source) } } -static inline struct obs_source_frame *filter_async_video(obs_source_t *source, - struct obs_source_frame *in); - static void obs_source_update_async_video(obs_source_t *source) { if (!source->async_rendered) { @@ -1986,7 +1968,7 @@ obs_data_t *obs_source_get_settings(const obs_source_t *source) return source->context.settings; } -static inline struct obs_source_frame *filter_async_video(obs_source_t *source, +struct obs_source_frame *filter_async_video(obs_source_t *source, struct obs_source_frame *in) { size_t i; @@ -2373,16 +2355,7 @@ void obs_source_output_audio(obs_source_t *source, pthread_mutex_unlock(&source->filter_mutex); } -static inline bool frame_out_of_bounds(const obs_source_t *source, uint64_t ts) -{ - if (ts < source->last_frame_ts) - return ((source->last_frame_ts - ts) > MAX_TS_VAR); - else - return ((ts - source->last_frame_ts) > MAX_TS_VAR); -} - -static void remove_async_frame(obs_source_t *source, - struct obs_source_frame *frame) +void remove_async_frame(obs_source_t *source, struct obs_source_frame *frame) { for (size_t i = 0; i < source->async_cache.num; i++) { struct async_frame *f = &source->async_cache.array[i];