fix: PVS-Studio V688
Signed-off-by: Vyacheslav Ivanov <islavaivanov76@gmail.com>
This commit is contained in:
parent
5369507938
commit
faa1635014
@ -74,27 +74,27 @@ bool ALStream::preloadBuffer(uint buffer, bool loop) {
|
||||
|
||||
std::unique_ptr<Speaker> ALStream::createSpeaker(bool loop, int channel) {
|
||||
this->loop = loop;
|
||||
uint source = al->getFreeSource();
|
||||
if (source == 0) {
|
||||
uint free_source = al->getFreeSource();
|
||||
if (free_source == 0) {
|
||||
return nullptr;
|
||||
}
|
||||
for (uint i = 0; i < ALStream::STREAM_BUFFERS; i++) {
|
||||
uint buffer = al->getFreeBuffer();
|
||||
if (!preloadBuffer(buffer, loop)) {
|
||||
uint free_buffer = al->getFreeBuffer();
|
||||
if (!preloadBuffer(free_buffer, loop)) {
|
||||
break;
|
||||
}
|
||||
AL_CHECK(alSourceQueueBuffers(source, 1, &buffer));
|
||||
AL_CHECK(alSourceQueueBuffers(free_source, 1, &free_buffer));
|
||||
}
|
||||
return std::make_unique<ALSpeaker>(al, source, PRIORITY_HIGH, channel);
|
||||
return std::make_unique<ALSpeaker>(al, free_source, PRIORITY_HIGH, channel);
|
||||
}
|
||||
|
||||
void ALStream::bindSpeaker(speakerid_t speaker) {
|
||||
void ALStream::bindSpeaker(speakerid_t speakerid) {
|
||||
auto sp = audio::get_speaker(this->speaker);
|
||||
if (sp) {
|
||||
sp->stop();
|
||||
}
|
||||
this->speaker = speaker;
|
||||
sp = audio::get_speaker(speaker);
|
||||
this->speaker = speakerid;
|
||||
sp = audio::get_speaker(speakerid);
|
||||
if (sp) {
|
||||
auto alspeaker = dynamic_cast<ALSpeaker*>(sp); //FIXME: Potentional null pointer
|
||||
alspeaker->stream = this; //-V522
|
||||
@ -110,15 +110,15 @@ void ALStream::unqueueBuffers(uint alsource) {
|
||||
uint processed = AL::getSourcei(alsource, AL_BUFFERS_PROCESSED);
|
||||
|
||||
while (processed--) {
|
||||
uint buffer;
|
||||
AL_CHECK(alSourceUnqueueBuffers(alsource, 1, &buffer));
|
||||
unusedBuffers.push(buffer);
|
||||
uint bufferqueue;
|
||||
AL_CHECK(alSourceUnqueueBuffers(alsource, 1, &bufferqueue));
|
||||
unusedBuffers.push(bufferqueue);
|
||||
|
||||
uint bps = source->getBitsPerSample() / 8;
|
||||
uint bps = source->getBitsPerSample()/ 8;
|
||||
uint channels = source->getChannels();
|
||||
|
||||
ALint bufferSize;
|
||||
alGetBufferi(buffer, AL_SIZE, &bufferSize);
|
||||
alGetBufferi(bufferqueue, AL_SIZE, &bufferSize);
|
||||
totalPlayedSamples += bufferSize / bps / channels;
|
||||
if (source->isSeekable()) {
|
||||
totalPlayedSamples %= source->getTotalSamples();
|
||||
@ -129,11 +129,11 @@ void ALStream::unqueueBuffers(uint alsource) {
|
||||
uint ALStream::enqueueBuffers(uint alsource) {
|
||||
uint preloaded = 0;
|
||||
if (!unusedBuffers.empty()) {
|
||||
uint buffer = unusedBuffers.front();
|
||||
if (preloadBuffer(buffer, loop)) {
|
||||
uint first_buffer = unusedBuffers.front();
|
||||
if (preloadBuffer(first_buffer, loop)) {
|
||||
preloaded++;
|
||||
unusedBuffers.pop();
|
||||
AL_CHECK(alSourceQueueBuffers(alsource, 1, &buffer));
|
||||
AL_CHECK(alSourceQueueBuffers(alsource, 1, &first_buffer));
|
||||
}
|
||||
}
|
||||
return preloaded;
|
||||
@ -143,14 +143,14 @@ void ALStream::update(double delta) {
|
||||
if (this->speaker == 0) {
|
||||
return;
|
||||
}
|
||||
auto speaker = audio::get_speaker(this->speaker);
|
||||
if (speaker == nullptr) {
|
||||
speaker = 0; //FIXME: Not used
|
||||
auto p_speaker = audio::get_speaker(this->speaker);
|
||||
if (p_speaker == nullptr) {
|
||||
p_speaker = 0; //FIXME: Not used
|
||||
return;
|
||||
}
|
||||
ALSpeaker* alspeaker = dynamic_cast<ALSpeaker*>(speaker); //FIXME: Potentional null pointer
|
||||
ALSpeaker* alspeaker = dynamic_cast<ALSpeaker*>(p_speaker); //FIXME: Potentional null pointer
|
||||
if (alspeaker->stopped) { //-V522
|
||||
speaker = 0; //FIXME: Not used
|
||||
p_speaker = 0; //FIXME: Not used
|
||||
return;
|
||||
}
|
||||
|
||||
@ -159,11 +159,11 @@ void ALStream::update(double delta) {
|
||||
unqueueBuffers(alsource);
|
||||
uint preloaded = enqueueBuffers(alsource);
|
||||
|
||||
if (speaker->isStopped() && !alspeaker->stopped) { //FIXME: !alspeaker->stopped always true //-V560
|
||||
if (p_speaker->isStopped() && !alspeaker->stopped) { //FIXME: !alspeaker->stopped always true //-V560
|
||||
if (preloaded) {
|
||||
speaker->play();
|
||||
p_speaker->play();
|
||||
} else {
|
||||
speaker->stop();
|
||||
p_speaker->stop();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -271,11 +271,11 @@ void ALSpeaker::setLoop(bool loop) {
|
||||
void ALSpeaker::play() {
|
||||
paused = false;
|
||||
stopped = false;
|
||||
auto channel = get_channel(this->channel);
|
||||
auto p_channel = get_channel(this->channel);
|
||||
AL_CHECK(alSourcef(
|
||||
source,
|
||||
AL_GAIN,
|
||||
volume * channel->getVolume() * get_channel(0)->getVolume()
|
||||
volume * p_channel->getVolume() * get_channel(0)->getVolume()
|
||||
));
|
||||
AL_CHECK(alSourcePlay(source));
|
||||
}
|
||||
|
||||
@ -72,7 +72,7 @@ namespace audio {
|
||||
~ALStream();
|
||||
|
||||
std::shared_ptr<PCMStream> getSource() const override;
|
||||
void bindSpeaker(speakerid_t speaker) override;
|
||||
void bindSpeaker(speakerid_t speakerid) override;
|
||||
std::unique_ptr<Speaker> createSpeaker(bool loop, int channel) override;
|
||||
speakerid_t getSpeaker() const override;
|
||||
void update(double delta) override;
|
||||
|
||||
@ -31,27 +31,27 @@ void Camera::rotate(float x, float y, float z) {
|
||||
|
||||
glm::mat4 Camera::getProjection() {
|
||||
constexpr float epsilon = 1e-6f; // 0.000001
|
||||
float aspect = this->aspect;
|
||||
if (std::fabs(aspect) < epsilon) {
|
||||
aspect = (float)Window::width / (float)Window::height;
|
||||
float aspect_ratio = this->aspect;
|
||||
if (std::fabs(aspect_ratio) < epsilon) {
|
||||
aspect_ratio = (float)Window::width / (float)Window::height;
|
||||
}
|
||||
if (perspective)
|
||||
return glm::perspective(fov * zoom, aspect, 0.05f, 1500.0f);
|
||||
return glm::perspective(fov * zoom, aspect_ratio, 0.05f, 1500.0f);
|
||||
else if (flipped)
|
||||
return glm::ortho(0.0f, fov * aspect, fov, 0.0f);
|
||||
return glm::ortho(0.0f, fov * aspect_ratio, fov, 0.0f);
|
||||
else
|
||||
return glm::ortho(0.0f, fov * aspect, 0.0f, fov);
|
||||
return glm::ortho(0.0f, fov * aspect_ratio, 0.0f, fov);
|
||||
}
|
||||
|
||||
glm::mat4 Camera::getView(bool pos) {
|
||||
glm::vec3 position = this->position;
|
||||
glm::vec3 camera_pos = this->position;
|
||||
if (!pos) {
|
||||
position = glm::vec3(0.0f);
|
||||
camera_pos = glm::vec3(0.0f);
|
||||
}
|
||||
if (perspective) {
|
||||
return glm::lookAt(position, position + front, up);
|
||||
return glm::lookAt(camera_pos, camera_pos + front, up);
|
||||
} else {
|
||||
return glm::translate(glm::mat4(1.0f), position);
|
||||
return glm::translate(glm::mat4(1.0f), camera_pos);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user