Proper check for atempo filter existance.
This commit is contained in:
parent
b0c8b77ba5
commit
da7cd6291e
4 changed files with 6 additions and 149 deletions
|
@ -946,8 +946,6 @@ PRIVATE
|
||||||
media/audio/media_audio_track.h
|
media/audio/media_audio_track.h
|
||||||
media/audio/media_child_ffmpeg_loader.cpp
|
media/audio/media_child_ffmpeg_loader.cpp
|
||||||
media/audio/media_child_ffmpeg_loader.h
|
media/audio/media_child_ffmpeg_loader.h
|
||||||
media/audio/media_openal_functions.cpp
|
|
||||||
media/audio/media_openal_functions.h
|
|
||||||
media/player/media_player_button.cpp
|
media/player/media_player_button.cpp
|
||||||
media/player/media_player_button.h
|
media/player/media_player_button.h
|
||||||
media/player/media_player_float.cpp
|
media/player/media_player_float.cpp
|
||||||
|
|
|
@ -272,7 +272,12 @@ void StopDetachIfNotUsedSafe() {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SupportsSpeedControl() {
|
bool SupportsSpeedControl() {
|
||||||
return true;
|
static const auto result = [] {
|
||||||
|
return avfilter_get_by_name("abuffer")
|
||||||
|
&& avfilter_get_by_name("abuffersink")
|
||||||
|
&& avfilter_get_by_name("atempo");
|
||||||
|
}();
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace Audio
|
} // namespace Audio
|
||||||
|
|
|
@ -1,90 +0,0 @@
|
||||||
/*
|
|
||||||
This file is part of Telegram Desktop,
|
|
||||||
the official desktop application for the Telegram messaging service.
|
|
||||||
|
|
||||||
For license and copyright information please follow this link:
|
|
||||||
https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
|
||||||
*/
|
|
||||||
#include "media/audio/media_openal_functions.h"
|
|
||||||
|
|
||||||
#include <al.h>
|
|
||||||
|
|
||||||
namespace OpenAL {
|
|
||||||
|
|
||||||
void LoadEFXExtension() {
|
|
||||||
#define LOAD_PROC(x) ((x) = reinterpret_cast<decltype(x)>(alGetProcAddress(#x)))
|
|
||||||
LOAD_PROC(alGenEffects);
|
|
||||||
LOAD_PROC(alDeleteEffects);
|
|
||||||
LOAD_PROC(alIsEffect);
|
|
||||||
LOAD_PROC(alEffecti);
|
|
||||||
LOAD_PROC(alEffectiv);
|
|
||||||
LOAD_PROC(alEffectf);
|
|
||||||
LOAD_PROC(alEffectfv);
|
|
||||||
LOAD_PROC(alGetEffecti);
|
|
||||||
LOAD_PROC(alGetEffectiv);
|
|
||||||
LOAD_PROC(alGetEffectf);
|
|
||||||
LOAD_PROC(alGetEffectfv);
|
|
||||||
|
|
||||||
LOAD_PROC(alGenFilters);
|
|
||||||
LOAD_PROC(alDeleteFilters);
|
|
||||||
LOAD_PROC(alIsFilter);
|
|
||||||
LOAD_PROC(alFilteri);
|
|
||||||
LOAD_PROC(alFilteriv);
|
|
||||||
LOAD_PROC(alFilterf);
|
|
||||||
LOAD_PROC(alFilterfv);
|
|
||||||
LOAD_PROC(alGetFilteri);
|
|
||||||
LOAD_PROC(alGetFilteriv);
|
|
||||||
LOAD_PROC(alGetFilterf);
|
|
||||||
LOAD_PROC(alGetFilterfv);
|
|
||||||
|
|
||||||
LOAD_PROC(alGenAuxiliaryEffectSlots);
|
|
||||||
LOAD_PROC(alDeleteAuxiliaryEffectSlots);
|
|
||||||
LOAD_PROC(alIsAuxiliaryEffectSlot);
|
|
||||||
LOAD_PROC(alAuxiliaryEffectSloti);
|
|
||||||
LOAD_PROC(alAuxiliaryEffectSlotiv);
|
|
||||||
LOAD_PROC(alAuxiliaryEffectSlotf);
|
|
||||||
LOAD_PROC(alAuxiliaryEffectSlotfv);
|
|
||||||
LOAD_PROC(alGetAuxiliaryEffectSloti);
|
|
||||||
LOAD_PROC(alGetAuxiliaryEffectSlotiv);
|
|
||||||
LOAD_PROC(alGetAuxiliaryEffectSlotf);
|
|
||||||
LOAD_PROC(alGetAuxiliaryEffectSlotfv);
|
|
||||||
#undef LOAD_PROC
|
|
||||||
}
|
|
||||||
|
|
||||||
bool HasEFXExtension() {
|
|
||||||
return (alGenEffects != nullptr)
|
|
||||||
&& (alDeleteEffects != nullptr)
|
|
||||||
&& (alIsEffect != nullptr)
|
|
||||||
&& (alEffecti != nullptr)
|
|
||||||
&& (alEffectiv != nullptr)
|
|
||||||
&& (alEffectf != nullptr)
|
|
||||||
&& (alEffectfv != nullptr)
|
|
||||||
&& (alGetEffecti != nullptr)
|
|
||||||
&& (alGetEffectiv != nullptr)
|
|
||||||
&& (alGetEffectf != nullptr)
|
|
||||||
&& (alGetEffectfv != nullptr)
|
|
||||||
&& (alGenFilters != nullptr)
|
|
||||||
&& (alDeleteFilters != nullptr)
|
|
||||||
&& (alIsFilter != nullptr)
|
|
||||||
&& (alFilteri != nullptr)
|
|
||||||
&& (alFilteriv != nullptr)
|
|
||||||
&& (alFilterf != nullptr)
|
|
||||||
&& (alFilterfv != nullptr)
|
|
||||||
&& (alGetFilteri != nullptr)
|
|
||||||
&& (alGetFilteriv != nullptr)
|
|
||||||
&& (alGetFilterf != nullptr)
|
|
||||||
&& (alGetFilterfv != nullptr)
|
|
||||||
&& (alGenAuxiliaryEffectSlots != nullptr)
|
|
||||||
&& (alDeleteAuxiliaryEffectSlots != nullptr)
|
|
||||||
&& (alIsAuxiliaryEffectSlot != nullptr)
|
|
||||||
&& (alAuxiliaryEffectSloti != nullptr)
|
|
||||||
&& (alAuxiliaryEffectSlotiv != nullptr)
|
|
||||||
&& (alAuxiliaryEffectSlotf != nullptr)
|
|
||||||
&& (alAuxiliaryEffectSlotfv != nullptr)
|
|
||||||
&& (alGetAuxiliaryEffectSloti != nullptr)
|
|
||||||
&& (alGetAuxiliaryEffectSlotiv != nullptr)
|
|
||||||
&& (alGetAuxiliaryEffectSlotf != nullptr)
|
|
||||||
&& (alGetAuxiliaryEffectSlotfv != nullptr);
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace OpenAL
|
|
|
@ -1,56 +0,0 @@
|
||||||
/*
|
|
||||||
This file is part of Telegram Desktop,
|
|
||||||
the official desktop application for the Telegram messaging service.
|
|
||||||
|
|
||||||
For license and copyright information please follow this link:
|
|
||||||
https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
|
||||||
*/
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include <al.h>
|
|
||||||
|
|
||||||
namespace OpenAL {
|
|
||||||
|
|
||||||
/* Effect object functions */
|
|
||||||
inline void (AL_APIENTRY *alGenEffects)(ALsizei, ALuint*);
|
|
||||||
inline void (AL_APIENTRY *alDeleteEffects)(ALsizei, const ALuint*);
|
|
||||||
inline ALboolean (AL_APIENTRY *alIsEffect)(ALuint);
|
|
||||||
inline void (AL_APIENTRY *alEffecti)(ALuint, ALenum, ALint);
|
|
||||||
inline void (AL_APIENTRY *alEffectiv)(ALuint, ALenum, const ALint*);
|
|
||||||
inline void (AL_APIENTRY *alEffectf)(ALuint, ALenum, ALfloat);
|
|
||||||
inline void (AL_APIENTRY *alEffectfv)(ALuint, ALenum, const ALfloat*);
|
|
||||||
inline void (AL_APIENTRY *alGetEffecti)(ALuint, ALenum, ALint*);
|
|
||||||
inline void (AL_APIENTRY *alGetEffectiv)(ALuint, ALenum, ALint*);
|
|
||||||
inline void (AL_APIENTRY *alGetEffectf)(ALuint, ALenum, ALfloat*);
|
|
||||||
inline void (AL_APIENTRY *alGetEffectfv)(ALuint, ALenum, ALfloat*);
|
|
||||||
|
|
||||||
/* Filter object functions */
|
|
||||||
inline void (AL_APIENTRY *alGenFilters)(ALsizei, ALuint*);
|
|
||||||
inline void (AL_APIENTRY *alDeleteFilters)(ALsizei, const ALuint*);
|
|
||||||
inline ALboolean (AL_APIENTRY *alIsFilter)(ALuint);
|
|
||||||
inline void (AL_APIENTRY *alFilteri)(ALuint, ALenum, ALint);
|
|
||||||
inline void (AL_APIENTRY *alFilteriv)(ALuint, ALenum, const ALint*);
|
|
||||||
inline void (AL_APIENTRY *alFilterf)(ALuint, ALenum, ALfloat);
|
|
||||||
inline void (AL_APIENTRY *alFilterfv)(ALuint, ALenum, const ALfloat*);
|
|
||||||
inline void (AL_APIENTRY *alGetFilteri)(ALuint, ALenum, ALint*);
|
|
||||||
inline void (AL_APIENTRY *alGetFilteriv)(ALuint, ALenum, ALint*);
|
|
||||||
inline void (AL_APIENTRY *alGetFilterf)(ALuint, ALenum, ALfloat*);
|
|
||||||
inline void (AL_APIENTRY *alGetFilterfv)(ALuint, ALenum, ALfloat*);
|
|
||||||
|
|
||||||
/* Auxiliary Effect Slot object functions */
|
|
||||||
inline void (AL_APIENTRY *alGenAuxiliaryEffectSlots)(ALsizei, ALuint*);
|
|
||||||
inline void (AL_APIENTRY *alDeleteAuxiliaryEffectSlots)(ALsizei, const ALuint*);
|
|
||||||
inline ALboolean (AL_APIENTRY *alIsAuxiliaryEffectSlot)(ALuint);
|
|
||||||
inline void (AL_APIENTRY *alAuxiliaryEffectSloti)(ALuint, ALenum, ALint);
|
|
||||||
inline void (AL_APIENTRY *alAuxiliaryEffectSlotiv)(ALuint, ALenum, const ALint*);
|
|
||||||
inline void (AL_APIENTRY *alAuxiliaryEffectSlotf)(ALuint, ALenum, ALfloat);
|
|
||||||
inline void (AL_APIENTRY *alAuxiliaryEffectSlotfv)(ALuint, ALenum, const ALfloat*);
|
|
||||||
inline void (AL_APIENTRY *alGetAuxiliaryEffectSloti)(ALuint, ALenum, ALint*);
|
|
||||||
inline void (AL_APIENTRY *alGetAuxiliaryEffectSlotiv)(ALuint, ALenum, ALint*);
|
|
||||||
inline void (AL_APIENTRY *alGetAuxiliaryEffectSlotf)(ALuint, ALenum, ALfloat*);
|
|
||||||
inline void (AL_APIENTRY *alGetAuxiliaryEffectSlotfv)(ALuint, ALenum, ALfloat*);
|
|
||||||
|
|
||||||
void LoadEFXExtension();
|
|
||||||
bool HasEFXExtension();
|
|
||||||
|
|
||||||
} // namespace OpenAL
|
|
Loading…
Reference in a new issue