From d1b87e1642ad5e485244f3594d331ce648b3353a Mon Sep 17 00:00:00 2001 From: Norihiro Kamae Date: Thu, 23 Dec 2021 21:03:11 +0900 Subject: [PATCH] libobs: Add API to get encoder frame size When muxing to some format, duration of the packet is used. We need an API for encoder to return the frame size. --- docs/sphinx/reference-encoders.rst | 6 ++++++ libobs/obs-encoder.c | 15 +++++++++++++++ libobs/obs.h | 3 +++ 3 files changed, 24 insertions(+) diff --git a/docs/sphinx/reference-encoders.rst b/docs/sphinx/reference-encoders.rst index 953323bc3..46018f66b 100644 --- a/docs/sphinx/reference-encoders.rst +++ b/docs/sphinx/reference-encoders.rst @@ -400,6 +400,12 @@ General Encoder Functions --------------------- +.. function:: uint32_t obs_encoder_get_frame_size(const obs_encoder_t *encoder) + + :return: The frame size of the audio packet + +--------------------- + .. function:: void obs_encoder_set_preferred_video_format(obs_encoder_t *encoder, enum video_format format) enum video_format obs_encoder_get_preferred_video_format(const obs_encoder_t *encoder) diff --git a/libobs/obs-encoder.c b/libobs/obs-encoder.c index b586d6436..b2c1f8e57 100644 --- a/libobs/obs-encoder.c +++ b/libobs/obs-encoder.c @@ -760,6 +760,21 @@ uint32_t obs_encoder_get_sample_rate(const obs_encoder_t *encoder) : audio_output_get_sample_rate(encoder->media); } +uint32_t obs_encoder_get_frame_size(const obs_encoder_t *encoder) +{ + if (!obs_encoder_valid(encoder, "obs_encoder_get_frame_size")) + return 0; + if (encoder->info.type != OBS_ENCODER_AUDIO) { + blog(LOG_WARNING, + "obs_encoder_get_frame_size: " + "encoder '%s' is not an audio encoder", + obs_encoder_get_name(encoder)); + return 0; + } + + return encoder->framesize != 0 ? encoder->framesize : 0; +} + void obs_encoder_set_video(obs_encoder_t *encoder, video_t *video) { const struct video_output_info *voi; diff --git a/libobs/obs.h b/libobs/obs.h index 98bf62782..538b2f171 100644 --- a/libobs/obs.h +++ b/libobs/obs.h @@ -2209,6 +2209,9 @@ EXPORT uint32_t obs_encoder_get_height(const obs_encoder_t *encoder); /** For audio encoders, returns the sample rate of the audio */ EXPORT uint32_t obs_encoder_get_sample_rate(const obs_encoder_t *encoder); +/** For audio encoders, returns the frame size of the audio packet */ +EXPORT uint32_t obs_encoder_get_frame_size(const obs_encoder_t *encoder); + /** * Sets the preferred video format for a video encoder. If the encoder can use * the format specified, it will force a conversion to that format if the