mirror of
https://git.eden-emu.dev/eden-emu/eden.git
synced 2026-09-23 02:11:07 +00:00
@@ -88,7 +88,6 @@ public:
|
|||||||
avc->extradata_size = OPUS_HEAD_SIZE + 2 * channel_count;
|
avc->extradata_size = OPUS_HEAD_SIZE + 2 * channel_count;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// FFmpeg hardcodes sample rate
|
// FFmpeg hardcodes sample rate
|
||||||
avc->sample_rate = sample_rate;
|
avc->sample_rate = sample_rate;
|
||||||
avc->request_sample_fmt = AV_SAMPLE_FMT_S16;
|
avc->request_sample_fmt = AV_SAMPLE_FMT_S16;
|
||||||
@@ -97,18 +96,17 @@ public:
|
|||||||
avpkt = av_packet_alloc();
|
avpkt = av_packet_alloc();
|
||||||
frame = av_frame_alloc();
|
frame = av_frame_alloc();
|
||||||
return ResultSuccess;
|
return ResultSuccess;
|
||||||
} else {
|
|
||||||
avcodec_free_context(&avc);
|
|
||||||
}
|
}
|
||||||
|
avcodec_free_context(&avc);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return Service::Audio::ResultLibOpusInternalError;
|
return Service::Audio::ResultLibOpusInternalError;
|
||||||
}
|
}
|
||||||
|
|
||||||
Result Shutdown() {
|
Result Shutdown() {
|
||||||
avcodec_free_context(&avc);
|
|
||||||
av_frame_free(&frame);
|
av_frame_free(&frame);
|
||||||
av_packet_free(&avpkt);
|
av_packet_free(&avpkt);
|
||||||
|
avcodec_free_context(&avc);
|
||||||
return ResultSuccess;
|
return ResultSuccess;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -128,14 +126,14 @@ public:
|
|||||||
int r = avcodec_receive_frame(avc, frame);
|
int r = avcodec_receive_frame(avc, frame);
|
||||||
if (r == AVERROR(EAGAIN)) {
|
if (r == AVERROR(EAGAIN)) {
|
||||||
av_packet_unref(avpkt);
|
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);
|
std::memcpy(avpkt->data, reinterpret_cast<const u8*>(input_data), input_data_size);
|
||||||
r = avcodec_send_packet(avc, avpkt);
|
r = avcodec_send_packet(avc, avpkt);
|
||||||
ASSERT(r >= 0);
|
ASSERT(r >= 0);
|
||||||
} else if (r == AVERROR_EOF) {
|
} else if (r == AVERROR_EOF) {
|
||||||
break;
|
break;
|
||||||
} else if (r >= 0) {
|
} 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) {
|
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));
|
std::memcpy(reinterpret_cast<s16*>(output_data) + (int(output_data_size) - rem_output_bytes), frame->data[0], size_t(bsize));
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
Reference in New Issue
Block a user