AudioDecoder destructor

This commit is contained in:
Dr. Chat 2015-05-22 22:02:11 -05:00
parent a69d1b7f04
commit 3389b9e421
2 changed files with 18 additions and 0 deletions

View File

@ -26,6 +26,21 @@ AudioDecoder::AudioDecoder() : offset_(0) {
} }
AudioDecoder::~AudioDecoder() { AudioDecoder::~AudioDecoder() {
if (context_) {
if (context_->extradata) {
delete context_->extradata;
}
if (avcodec_is_open(context_)) {
avcodec_close(context_);
}
av_free(context_);
}
if (decoded_frame_) {
avcodec_free_frame(&decoded_frame_);
}
if (current_frame_) {
delete current_frame_;
}
} }
int AudioDecoder::Initialize(int bits) { int AudioDecoder::Initialize(int bits) {

View File

@ -95,11 +95,14 @@ X_STATUS AudioSystem::Setup() {
// Create a new decoder per context // Create a new decoder per context
// Needed because some data needs to be persisted across calls // Needed because some data needs to be persisted across calls
// TODO: Need to destroy this on class destruction
xma_context_array_[i].decoder = new AudioDecoder(); xma_context_array_[i].decoder = new AudioDecoder();
xma_context_array_[i].decoder->Initialize(16); xma_context_array_[i].decoder->Initialize(16);
} }
registers_.next_context = 1; registers_.next_context = 1;
// Threads
worker_running_ = true; worker_running_ = true;
worker_thread_ = new kernel::XHostThread(emulator()->kernel_state(), worker_thread_ = new kernel::XHostThread(emulator()->kernel_state(),
128 * 1024, 0, [this]() { 128 * 1024, 0, [this]() {