mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-30 21:30:04 +00:00 
			
		
		
		
	audio_core: mf: make initialize function return smart pointer
This commit is contained in:
		
							parent
							
								
									c91f5029ff
								
							
						
					
					
						commit
						168f2ee79a
					
				
					 3 changed files with 14 additions and 10 deletions
				
			
		|  | @ -72,8 +72,9 @@ std::optional<BinaryResponse> WMFDecoder::Impl::Initalize(const BinaryRequest& r | |||
|     BinaryResponse response; | ||||
|     std::memcpy(&response, &request, sizeof(response)); | ||||
|     response.unknown1 = 0x0; | ||||
|     transform = MFDecoderInit(); | ||||
| 
 | ||||
|     if (!MFDecoderInit(Amp(transform))) { | ||||
|     if (transform == nullptr) { | ||||
|         LOG_CRITICAL(Audio_DSP, "Can't init decoder"); | ||||
|         return response; | ||||
|     } | ||||
|  | @ -116,7 +117,7 @@ MFOutputState WMFDecoder::Impl::DecodingLoop(ADTSData adts_header, | |||
| 
 | ||||
|             // the following was taken from ffmpeg version of the decoder
 | ||||
|             f32 val_f32; | ||||
|             for (size_t i = 0; i < output_buffer->size(); ) { | ||||
|             for (size_t i = 0; i < output_buffer->size();) { | ||||
|                 for (std::size_t channel = 0; channel < adts_header.channels; channel++) { | ||||
|                     val_f32 = output_buffer->at(i); | ||||
|                     s16 val = static_cast<s16>(0x7FFF * val_f32); | ||||
|  |  | |||
|  | @ -45,11 +45,12 @@ bool MFCoInit() { | |||
|     return true; | ||||
| } | ||||
| 
 | ||||
| bool MFDecoderInit(IMFTransform** transform, GUID audio_format) { | ||||
| unique_mfptr<IMFTransform> MFDecoderInit(GUID audio_format) { | ||||
|     HRESULT hr = S_OK; | ||||
|     MFT_REGISTER_TYPE_INFO reg = {0}; | ||||
|     GUID category = MFT_CATEGORY_AUDIO_DECODER; | ||||
|     IMFActivate** activate; | ||||
|     unique_mfptr<IMFTransform> transform; | ||||
|     UINT32 num_activate; | ||||
| 
 | ||||
|     reg.guidMajorType = MFMediaType_Audio; | ||||
|  | @ -61,22 +62,24 @@ bool MFDecoderInit(IMFTransform** transform, GUID audio_format) { | |||
|     if (FAILED(hr) || num_activate < 1) { | ||||
|         ReportError("Failed to enumerate decoders", hr); | ||||
|         CoTaskMemFree(activate); | ||||
|         return false; | ||||
|         return nullptr; | ||||
|     } | ||||
|     LOG_INFO(Audio_DSP, "Windows(R) Media Foundation found {} suitable decoder(s)", num_activate); | ||||
|     for (unsigned int n = 0; n < num_activate; n++) { | ||||
|         hr = activate[n]->ActivateObject(IID_IMFTransform, (void**)transform); | ||||
|         hr = activate[n]->ActivateObject( | ||||
|             IID_IMFTransform, | ||||
|             reinterpret_cast<void**>(static_cast<IMFTransform**>(Amp(transform)))); | ||||
|         if (FAILED(hr)) | ||||
|             *transform = nullptr; | ||||
|             transform = nullptr; | ||||
|         activate[n]->Release(); | ||||
|     } | ||||
|     if (*transform == nullptr) { | ||||
|     if (transform == nullptr) { | ||||
|         ReportError("Failed to initialize MFT", hr); | ||||
|         CoTaskMemFree(activate); | ||||
|         return false; | ||||
|         return nullptr; | ||||
|     } | ||||
|     CoTaskMemFree(activate); | ||||
|     return true; | ||||
|     return std::move(transform); | ||||
| } | ||||
| 
 | ||||
| void MFDeInit(IMFTransform* transform) { | ||||
|  |  | |||
|  | @ -60,7 +60,7 @@ void ReportError(std::string msg, HRESULT hr); | |||
| 
 | ||||
| // exported functions
 | ||||
| bool MFCoInit(); | ||||
| bool MFDecoderInit(IMFTransform** transform, GUID audio_format = MFAudioFormat_AAC); | ||||
| unique_mfptr<IMFTransform> MFDecoderInit(GUID audio_format = MFAudioFormat_AAC); | ||||
| void MFDeInit(IMFTransform* transform); | ||||
| unique_mfptr<IMFSample> CreateSample(void* data, DWORD len, DWORD alignment = 1, | ||||
|                                      LONGLONG duration = 0); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue