From 452ac7b874cb7fb0c23bbf4fec96b1776ced3c88 Mon Sep 17 00:00:00 2001 From: liushuyu Date: Mon, 28 Jan 2019 22:53:55 -0700 Subject: [PATCH] audio_core: hle: mf: use more enum --- src/audio_core/hle/wmf_decoder.cpp | 6 +++--- src/audio_core/hle/wmf_decoder_utils.cpp | 12 ++++++------ src/audio_core/hle/wmf_decoder_utils.h | 8 +++++--- 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/src/audio_core/hle/wmf_decoder.cpp b/src/audio_core/hle/wmf_decoder.cpp index 8aa586b8b..eb04ee34b 100644 --- a/src/audio_core/hle/wmf_decoder.cpp +++ b/src/audio_core/hle/wmf_decoder.cpp @@ -104,7 +104,7 @@ void WMFDecoder::Impl::Clear() { } MFOutputState WMFDecoder::Impl::DecodingLoop(ADTSData adts_header, - std::array, 2>& out_streams) { + std::array, 2>& out_streams) { MFOutputState output_status = OK; char* output_buffer = nullptr; DWORD output_len = 0; @@ -184,7 +184,7 @@ std::optional WMFDecoder::Impl::Decode(const BinaryRequest& requ unique_mfptr sample; ADTSData adts_header; char* aac_tag = (char*)calloc(1, 14); - int input_status = 0; + MFInputState input_status = INPUT_OK; if (DetectMediaType((char*)data, request.size, &adts_header, &aac_tag) != 0) { LOG_ERROR(Audio_DSP, "Unable to deduce decoding parameters from ADTS stream"); @@ -215,7 +215,7 @@ std::optional WMFDecoder::Impl::Decode(const BinaryRequest& requ // if the decode issues are caused by MFT not accepting new samples, try again // NOTICE: you are required to check the output even if you already knew/guessed // MFT didn't accept the input sample - if (input_status == 1) { + if (input_status == TRY_AGAIN) { // try again continue; } diff --git a/src/audio_core/hle/wmf_decoder_utils.cpp b/src/audio_core/hle/wmf_decoder_utils.cpp index fc6a8a0e8..a74e1bf64 100644 --- a/src/audio_core/hle/wmf_decoder_utils.cpp +++ b/src/audio_core/hle/wmf_decoder_utils.cpp @@ -234,26 +234,26 @@ int DetectMediaType(char* buffer, size_t len, ADTSData* output, char** aac_tag) } void MFFlush(IMFTransform* transform) { - HRESULT hr = (transform)->ProcessMessage(MFT_MESSAGE_COMMAND_FLUSH, 0); + HRESULT hr = transform->ProcessMessage(MFT_MESSAGE_COMMAND_FLUSH, 0); if (FAILED(hr)) { ReportError("MFT: Flush command failed", hr); } - hr = (transform)->ProcessMessage(MFT_MESSAGE_NOTIFY_END_OF_STREAM, 0); + hr = transform->ProcessMessage(MFT_MESSAGE_NOTIFY_END_OF_STREAM, 0); if (FAILED(hr)) { ReportError("Failed to end streaming for MFT", hr); } } -int SendSample(IMFTransform* transform, DWORD in_stream_id, IMFSample* in_sample) { +MFInputState SendSample(IMFTransform* transform, DWORD in_stream_id, IMFSample* in_sample) { HRESULT hr = S_OK; if (in_sample) { hr = transform->ProcessInput(in_stream_id, in_sample, 0); if (hr == MF_E_NOTACCEPTING) { - return 1; // try again + return TRY_AGAIN; // try again } else if (FAILED(hr)) { ReportError("MFT: Failed to process input", hr); - return -1; + return INPUT_ERROR; } // FAILED(hr) } else { hr = transform->ProcessMessage(MFT_MESSAGE_COMMAND_DRAIN, 0); @@ -262,7 +262,7 @@ int SendSample(IMFTransform* transform, DWORD in_stream_id, IMFSample* in_sample } } - return 0; + return INPUT_OK; } std::tuple> ReceiveSample(IMFTransform* transform, diff --git a/src/audio_core/hle/wmf_decoder_utils.h b/src/audio_core/hle/wmf_decoder_utils.h index da39319c9..f50264113 100644 --- a/src/audio_core/hle/wmf_decoder_utils.h +++ b/src/audio_core/hle/wmf_decoder_utils.h @@ -17,7 +17,8 @@ #include "adts.h" -enum MFOutputState { FATAL_ERROR = -1, OK = 0, NEED_MORE_INPUT, NEED_RECONFIG, HAVE_MORE_DATA }; +enum MFOutputState { FATAL_ERROR, OK, NEED_MORE_INPUT, NEED_RECONFIG, HAVE_MORE_DATA }; +enum MFInputState { INPUT_ERROR, INPUT_OK, TRY_AGAIN }; // utility functions template @@ -36,7 +37,8 @@ void ReportError(std::string msg, HRESULT hr); bool MFCoInit(); bool MFDecoderInit(IMFTransform** transform, GUID audio_format = MFAudioFormat_AAC); void MFDeInit(IMFTransform* transform); -unique_mfptr CreateSample(void* data, DWORD len, DWORD alignment = 1, LONGLONG duration = 0); +unique_mfptr CreateSample(void* data, DWORD len, DWORD alignment = 1, + LONGLONG duration = 0); bool SelectInputMediaType(IMFTransform* transform, int in_stream_id, const ADTSData& adts, UINT8* user_data, UINT32 user_data_len, GUID audio_format = MFAudioFormat_AAC); @@ -44,7 +46,7 @@ int DetectMediaType(char* buffer, size_t len, ADTSData* output, char** aac_tag); bool SelectOutputMediaType(IMFTransform* transform, int out_stream_id, GUID audio_format = MFAudioFormat_PCM); void MFFlush(IMFTransform* transform); -int SendSample(IMFTransform* transform, DWORD in_stream_id, IMFSample* in_sample); +MFInputState SendSample(IMFTransform* transform, DWORD in_stream_id, IMFSample* in_sample); std::tuple> ReceiveSample(IMFTransform* transform, DWORD out_stream_id); int CopySampleToBuffer(IMFSample* sample, void** output, DWORD* len);