コード例 #1
0
ファイル: obs-source.c プロジェクト: BraginWoW/obs-studio
static inline void reset_resampler(obs_source_t source,
                                   const struct source_audio *audio)
{
    const struct audio_info *obs_info;
    struct resample_info output_info;

    obs_info = audio_output_getinfo(obs->audio.audio);

    output_info.format           = obs_info->format;
    output_info.samples_per_sec  = obs_info->samples_per_sec;
    output_info.speakers         = obs_info->speakers;

    source->sample_info.format          = audio->format;
    source->sample_info.samples_per_sec = audio->samples_per_sec;
    source->sample_info.speakers        = audio->speakers;

    if (source->sample_info.samples_per_sec == obs_info->samples_per_sec &&
            source->sample_info.format          == obs_info->format          &&
            source->sample_info.speakers        == obs_info->speakers) {
        source->audio_failed = false;
        return;
    }

    audio_resampler_destroy(source->resampler);
    source->resampler = audio_resampler_create(&output_info,
                        &source->sample_info);

    source->audio_failed = source->resampler == NULL;
    if (source->resampler == NULL)
        blog(LOG_ERROR, "creation of resampler failed");
}
コード例 #2
0
ファイル: obs-source.c プロジェクト: Christicles/obs-studio
/* unless the value is 3+ hours worth of frames, this won't overflow */
static inline uint64_t conv_frames_to_time(size_t frames)
{
	const struct audio_output_info *info;
	info = audio_output_getinfo(obs->audio.audio);

	return (uint64_t)frames * 1000000000ULL /
		(uint64_t)info->samples_per_sec;
}
コード例 #3
0
ファイル: obs-source.c プロジェクト: asgeirom/obs-studio
static inline uint64_t conv_frames_to_time(obs_source_t source, size_t frames)
{
	const struct audio_output_info *info;
	double sps_to_ns;

	info = audio_output_getinfo(obs->audio.audio);
	sps_to_ns = 1000000000.0 / (double)info->samples_per_sec;
	return (uint64_t)((double)frames * sps_to_ns);
}
コード例 #4
0
ファイル: obs-ffmpeg-aac.c プロジェクト: Posnet/obs-studio
static void init_sizes(struct aac_encoder *enc, audio_t audio)
{
	const struct audio_output_info *aoi;
	enum audio_format format;

	aoi    = audio_output_getinfo(audio);
	format = convert_ffmpeg_sample_format(enc->context->sample_fmt);

	enc->audio_planes = get_audio_planes(format, aoi->speakers);
	enc->audio_size   = get_audio_size(format, aoi->speakers, 1);
}
コード例 #5
0
ファイル: obs.c プロジェクト: kmdtukl/obs-studio
bool obs_get_audio_info(struct audio_output_info *aoi)
{
	struct obs_core_audio *audio = &obs->audio;
	const struct audio_output_info *info;

	if (!obs || !audio->audio)
		return false;

	info = audio_output_getinfo(audio->audio);
	memcpy(aoi, info, sizeof(struct audio_output_info));

	return true;
}
コード例 #6
0
ファイル: obs-encoder.c プロジェクト: Arkkis/obs-studio
static inline struct audio_convert_info *get_audio_info(
		struct obs_encoder *encoder, struct audio_convert_info *info)
{
	const struct audio_output_info *aoi;
	aoi = audio_output_getinfo(encoder->media);
	memset(info, 0, sizeof(struct audio_convert_info));

	if (encoder->info.audio_info)
		encoder->info.audio_info(encoder->context.data, info);

	if (info->format == AUDIO_FORMAT_UNKNOWN)
		info->format = aoi->format;
	if (!info->samples_per_sec)
		info->samples_per_sec = aoi->samples_per_sec;
	if (info->speakers == SPEAKERS_UNKNOWN)
		info->speakers = aoi->speakers;

	return info;
}