Compare commits

...

1 Commits

Author SHA1 Message Date
lizzie c5d12e5bc6 2026-09-12 19:50:46
Signed-off-by: lizzie <lizzie@eden-emu.dev>
2026-09-12 19:50:46 +00:00
@@ -88,7 +88,6 @@ public:
avc->extradata_size = OPUS_HEAD_SIZE + 2 * channel_count;
}
// FFmpeg hardcodes sample rate
avc->sample_rate = sample_rate;
avc->request_sample_fmt = AV_SAMPLE_FMT_S16;
@@ -97,18 +96,17 @@ public:
avpkt = av_packet_alloc();
frame = av_frame_alloc();
return ResultSuccess;
} else {
avcodec_free_context(&avc);
}
avcodec_free_context(&avc);
}
}
return Service::Audio::ResultLibOpusInternalError;
}
Result Shutdown() {
avcodec_free_context(&avc);
av_frame_free(&frame);
av_packet_free(&avpkt);
avcodec_free_context(&avc);
return ResultSuccess;
}
@@ -128,14 +126,14 @@ public:
int r = avcodec_receive_frame(avc, frame);
if (r == AVERROR(EAGAIN)) {
av_packet_unref(avpkt);
av_new_packet(avpkt, int(input_data_size));
av_new_packet(avpkt, int(input_data_size) + AV_INPUT_BUFFER_PADDING_SIZE);
std::memcpy(avpkt->data, reinterpret_cast<const u8*>(input_data), input_data_size);
r = avcodec_send_packet(avc, avpkt);
ASSERT(r >= 0);
} else if (r == AVERROR_EOF) {
break;
} else if (r >= 0) {
auto const bsize = av_samples_get_buffer_size(nullptr, frame->ch_layout.nb_channels, frame->nb_samples, AV_SAMPLE_FMT_S16, 1);
auto const bsize = av_samples_get_buffer_size(frame->linesize, frame->ch_layout.nb_channels, frame->nb_samples, AV_SAMPLE_FMT_S16, 1);
if (frame->format == AV_SAMPLE_FMT_S16) {
std::memcpy(reinterpret_cast<s16*>(output_data) + (int(output_data_size) - rem_output_bytes), frame->data[0], size_t(bsize));
} else {