0
0
mirror of https://github.com/obsproject/obs-studio.git synced 2024-09-20 04:42:18 +02:00

libobs: Fix obs_output_video and obs_output_audio for encoded output

The API `obs_output_video` and `obs_output_audio` returned valid
pointers until the commit fb57eff21 and 645e31fa1.
The API `obs_output_video` is used by some plugins such as obs-websocket
and obs-midi to calculate the duration of streaming and recording.
To have a similar behavior, return the media (video and audio,
respectively) from the encoder.
This commit is contained in:
Norihiro Kamae 2023-08-30 22:44:46 +09:00 committed by Lain
parent eb89f7c3ab
commit 2036de8ec3

View File

@ -857,14 +857,30 @@ void obs_output_set_media(obs_output_t *output, video_t *video, audio_t *audio)
video_t *obs_output_video(const obs_output_t *output)
{
return obs_output_valid(output, "obs_output_video") ? output->video
: NULL;
if (!obs_output_valid(output, "obs_output_video"))
return NULL;
if (!flag_encoded(output))
return output->video;
obs_encoder_t *vencoder = obs_output_get_video_encoder(output);
return obs_encoder_video(vencoder);
}
audio_t *obs_output_audio(const obs_output_t *output)
{
return obs_output_valid(output, "obs_output_audio") ? output->audio
: NULL;
if (!obs_output_valid(output, "obs_output_audio"))
return NULL;
if (!flag_encoded(output))
return output->audio;
for (size_t i = 0; i < MAX_OUTPUT_AUDIO_ENCODERS; i++) {
if (output->audio_encoders[i])
return obs_encoder_audio(output->audio_encoders[i]);
}
return NULL;
}
static inline size_t get_first_mixer(const obs_output_t *output)