Fixed linux build

This commit is contained in:
Vladislav Mikhalin 2024-11-02 09:55:41 +03:00
parent d7f78e6720
commit af2df7d889
3 changed files with 17 additions and 9 deletions

View File

@ -454,8 +454,8 @@ int PS4_SYSV_ABI sceAjmBatchStartBuffer(u32 context, u8* p_batch, u32 batch_size
case Identifier::AjmIdentInputRunBuf: { case Identifier::AjmIdentInputRunBuf: {
auto& buffer = AjmBufferExtract<AjmChunkBuffer>(p_current); auto& buffer = AjmBufferExtract<AjmChunkBuffer>(p_current);
u8* p_begin = reinterpret_cast<u8*>(buffer.p_address); u8* p_begin = reinterpret_cast<u8*>(buffer.p_address);
job.input.buffer.append_range( job.input.buffer.insert(job.input.buffer.end(), p_begin,
std::vector<u8>(p_begin, p_begin + buffer.header.size)); p_begin + buffer.header.size);
break; break;
} }
case Identifier::AjmIdentInputControlBuf: { case Identifier::AjmIdentInputControlBuf: {

View File

@ -76,7 +76,7 @@ void AjmAt9Decoder::Decode(const AjmJobInput* input, AjmJobOutput* output) {
if (in_buf.empty() || out_buf.empty()) { if (in_buf.empty() || out_buf.empty()) {
return false; return false;
} }
if (gapless.total_samples != 0 && gapless.total_samples < gapless_decoded_samples) { if (gapless.total_samples && gapless.total_samples < gapless_decoded_samples) {
return false; return false;
} }
return true; return true;
@ -120,13 +120,17 @@ void AjmAt9Decoder::Decode(const AjmJobInput* input, AjmJobOutput* output) {
written = write_output({pcm_buffer.data() + start, nsamples}); written = write_output({pcm_buffer.data() + start, nsamples});
gapless.skipped_samples = gapless.skip_samples; gapless.skipped_samples = gapless.skip_samples;
total_decoded_samples += nsamples; total_decoded_samples += nsamples;
gapless_decoded_samples += nsamples; if (gapless.total_samples != 0) {
gapless_decoded_samples += nsamples;
}
} }
} else { } else {
written = written =
write_output({pcm_buffer.data(), std::min(pcm_buffer.size(), samples_remain)}); write_output({pcm_buffer.data(), std::min(pcm_buffer.size(), samples_remain)});
total_decoded_samples += codec_info.frameSamples; total_decoded_samples += codec_info.frameSamples;
gapless_decoded_samples += codec_info.frameSamples; if (gapless.total_samples != 0) {
gapless_decoded_samples += codec_info.frameSamples;
}
} }
num_frames += 1; num_frames += 1;
@ -152,7 +156,7 @@ void AjmAt9Decoder::Decode(const AjmJobInput* input, AjmJobOutput* output) {
} }
} }
if (gapless_decoded_samples >= gapless.total_samples) { if (gapless.total_samples != 0 && gapless_decoded_samples >= gapless.total_samples) {
if (flags.gapless_loop) { if (flags.gapless_loop) {
ResetCodec(); ResetCodec();
} }

View File

@ -148,12 +148,16 @@ void AjmMp3Decoder::Decode(const AjmJobInput* input, AjmJobOutput* output) {
write_output({reinterpret_cast<s16*>(frame->data[0]), nsamples}); write_output({reinterpret_cast<s16*>(frame->data[0]), nsamples});
gapless.skipped_samples = gapless.skip_samples; gapless.skipped_samples = gapless.skip_samples;
total_decoded_samples += nsamples; total_decoded_samples += nsamples;
gapless_decoded_samples += nsamples; if (gapless.total_samples != 0) {
gapless_decoded_samples += nsamples;
}
} }
} else { } else {
write_output({reinterpret_cast<s16*>(frame->data[0]), size >> 1}); write_output({reinterpret_cast<s16*>(frame->data[0]), size >> 1});
total_decoded_samples += frame_samples; total_decoded_samples += frame_samples;
gapless_decoded_samples += frame_samples; if (gapless.total_samples != 0) {
gapless_decoded_samples += frame_samples;
}
} }
av_frame_free(&frame); av_frame_free(&frame);
if (output->p_stream) { if (output->p_stream) {
@ -166,7 +170,7 @@ void AjmMp3Decoder::Decode(const AjmJobInput* input, AjmJobOutput* output) {
} }
} }
av_packet_free(&pkt); av_packet_free(&pkt);
if (gapless_decoded_samples >= gapless.total_samples) { if (gapless.total_samples != 0 && gapless_decoded_samples >= gapless.total_samples) {
if (flags.gapless_loop) { if (flags.gapless_loop) {
gapless.skipped_samples = 0; gapless.skipped_samples = 0;
gapless_decoded_samples = 0; gapless_decoded_samples = 0;