Commit graph

163 commits

Author SHA1 Message Date
James Rowe
a6ee1bf913
HLE Audio: Increase frame position by input buffer sample rate (#5049)
* HLE Audio: Increase frame position by input buffer sample rate

Currently the frame position moves ahead by the number of samples
output, but thats a fixed number based on the 3ds native sample rate.
Instead, based on a homebrew by cyuubi and looking at the lle audio,
this sample position should be moved forward by the number of samples
from the input buffer that was read, based on the buffer's sample rate.
2020-03-28 10:39:50 -05:00
Hamish Milne
025960bcdd Attempt to fix flatpak CI 2020-03-28 15:10:35 +00:00
Hamish Milne
7049af744f Merge remote-tracking branch 'upstream/master' into feature/savestates-2 2020-03-28 12:33:21 +00:00
Hamish Milne
232b52a27d Minor cleanup 2020-03-28 09:59:45 +00:00
Hamish Milne
3d1180ee21 DSP now works... committing this!! 2020-03-27 22:19:29 +00:00
BreadFish64
37384174d9 fix formatting for media-ndk 2020-03-17 21:15:33 -05:00
zhang wei
3410b96400
mediandk for android (#4921) 2020-03-16 21:07:22 -05:00
Hamish Milne
da3ab3d56e Merge branch 'master' into feature/savestates-2 2020-03-07 21:23:08 +00:00
zhupengfei
3c6765e87c
core: Properly std::move things around 2020-02-27 16:55:09 +08:00
liushuyu
cff00f38c5
Implements fdk_aac decoder (#4764)
* audio_core: dsp_hle: implements fdk_aac decoder

* audio_core: dsp_hle: clean up and add comments

* audio_core: dsp_hle: move fdk include to cpp file

* audio_core: dsp_hle: detects broken fdk_aac...

... and refuses to initialize if that's the case

* audio_core: dsp_hle: fdk_aac: address comments...

... and rebase commits

* fdk_decoder: move fdk header to cpp file
2020-02-23 11:01:21 +01:00
Hamish Milne
c983528862 Reworked DSP serialization 2020-02-13 17:42:12 +08:00
James Rowe
5fd1ff08d7
Merge pull request #5024 from jroweboy/temp-hle-audio-fix
Prevent out of memory errors when the game passes in an improper length value
2020-01-21 15:30:20 -07:00
James Rowe
e53a2ac411 Reenable AAC FFMPEG decoding
Simple cut/paste issue where initialized is only set to true when the
emulation attempts to init the Binary Pipe, but we used it to test if
the FFMPEG decoder was valid and disabled it if it wasn't. Just return
the value of have_ffmpeg_dl instead so when dynamic loading is added
it'll still work.
2019-12-16 19:23:43 -07:00
James Rowe
87facaa2e2 Prevent out of memory errors when the game passes in an improper length value
HACK

In Luigi's Mansion Dark Moon in HLE audio, the game mysteriously passes
in an extremely large value for length, which without any checks, causes
HLE audio to allocate an extremely large buffer.

This value seemingly is caused by some other HLE audio feature is missing,
and Luigi's Mansion subtracts two values to get a length, without
checking for overflow first. This appears to be caused by an incorrect
HLE audio emulation, as its fixed entirely by only changing to LLE. As
such, further investigation is required, but in the meantime, completely
eating up our users RAM is unacceptable.
2019-12-14 18:18:59 -07:00
James Rowe
337ac73915 Improve aac decoder selection 2019-12-08 16:18:39 -07:00
James Rowe
b395efe804 Dynamically load Media Foundation 2019-12-08 13:54:27 -07:00
liushuyu
8021361bb4
audio_core: dsp_hle: use better f32 to s16...
... conversion by clamping and clipping sample to [-1,1] and use
different masks for negative and positive samples
2019-05-01 15:58:26 -06:00
Weiyi Wang
8f2bd97277
Merge pull request #4655 from tgsm/gcc-version
Remove GCC version checks
2019-02-22 16:21:21 -05:00
tgsm
433ab35e7e Remove GCC version checks
Citra can't be compiled using GCC <7 because of required C++17 support, so these version checks don't need to exist anymore.
2019-02-19 16:39:34 -05:00
tgsm
a400e49338 audio_core: use nested namespaces 2019-02-17 23:41:48 -05:00
liushuyu
a4ba35fe3a audio_core: hle: mf: lint 2019-02-13 15:15:11 -07:00
liushuyu
671ac441e9 audio_core: hle: mf: move transform initializer to ctor 2019-02-13 14:32:14 -07:00
liushuyu
6178cc08b7 audio_core: hle: mf: conform to RAII as possible 2019-02-13 14:08:34 -07:00
liushuyu
f0e041e27a audio_core: hle: mf: correctly handle stream change 2019-02-09 16:49:48 -07:00
liushuyu
01e0902fa4 audio_core: hle: mf: fix a memory accessing issue 2019-02-09 13:55:54 -07:00
liushuyu
6281660844 audio_core: hle: mf: address yet another batch of reviews 2019-02-09 13:55:42 -07:00
liushuyu
ab1f47ed15 audio_core: hle: mf: make DetectMediaType return a struct 2019-02-09 11:57:36 +01:00
liushuyu
168f2ee79a audio_core: mf: make initialize function return smart pointer 2019-02-09 11:57:36 +01:00
liushuyu
c91f5029ff audio_core: hle: mf: fix a regression...
... where the sample copying logic is incorrect due to the wrong usage
of `std::array`
2019-02-09 11:57:36 +01:00
liushuyu
6332e57069 audio_core: hle: mf: return values as std::optional 2019-02-09 11:57:36 +01:00
liushuyu
25fa10327b audio_core: hle: mf: use object proxy 2019-02-09 11:57:36 +01:00
liushuyu
26b3b41788 audio_core: hle: mf: wrap enum in class 2019-02-09 11:57:36 +01:00
liushuyu
633f02b9b2 audio_core: hle: mf: avoid name conflicts 2019-02-09 11:57:36 +01:00
liushuyu
452ac7b874 audio_core: hle: mf: use more enum 2019-02-09 11:57:36 +01:00
liushuyu
be764e4f88 audio_core: hle: mf: multiple fixes...
... more smart pointers and re-arrange code
2019-02-09 11:57:36 +01:00
liushuyu
4bc6bfd51f audio_core: hle: mf: re-arrange comments 2019-02-09 11:57:36 +01:00
liushuyu
972b527374 audio_core: hle: mf: cleanup headers 2019-02-09 11:57:36 +01:00
liushuyu
2c40ef2a90 audio_core: hle: mf: rename functions 2019-02-09 11:57:36 +01:00
liushuyu
ea8a1f8754 Media Foundation Memory Fix
* audio_core: hle: mf: more smart pointers

* audio_core: hle: mf: fix memory leaks

* audio_core: hle: mf: even more smart pointers
2019-02-09 11:57:36 +01:00
liushuyu
10f876653d audio_core: hle: mf: transition to use smart pointers 2019-02-09 11:56:51 +01:00
liushuyu
bee5ba3e33 audio_core: hle: mf: fix a regression...
... an introduction in 8f591d3b85
2019-02-09 11:56:51 +01:00
liushuyu
06316be8a7 audio_core: hle: mf: minor fix 2019-02-09 11:56:51 +01:00
liushuyu
c03861c2d9 audio_core: hle: mf: address another batch of reviews from @B3N30 2019-02-09 11:56:51 +01:00
liushuyu
7f5b54fda4 audio_core: hle: mf: address reviews from @B3N30 2019-02-09 11:56:51 +01:00
liushuyu
11e277149c audio_core: hle: fix compile 2019-02-09 11:56:51 +01:00
B3N30
80b4dd21d2 audio_core: dsp_hle: add Media Foundation decoder...
* appveyor: switch to Media Foundation API
* Travis CI MinGW build needs an update with the container image
2019-02-09 11:56:51 +01:00
B3N30
1581dea6de more reviews addressed 2019-02-09 11:55:12 +01:00
liushuyu
8fe3e37df5 audio_core: fix msvc include issue 2019-02-09 11:55:12 +01:00
B3N30
bd9984b5f8 Addressed reviews 2019-02-09 11:55:12 +01:00
B3N30
847003cc1c FFmpegDL: Added external_dlls folder to user folder
AACDecoder: addressed reviews
2019-02-09 11:52:31 +01:00
B3N30
45b5de7a18 Fixup: Merge conflict with dsp lle 2019-02-09 11:52:31 +01:00
B3N30
c521f3b7d6 CoreAudio::HLE: Add FFmpeg aac decoder 2019-02-09 11:52:31 +01:00
Weiyi Wang
104829ae58 remove all occurance of specifying endianness inside BitField
This commit it automatically generated by command in zsh:
sed -i -- 's/BitField<\(.*\)_le>/BitField<\1>/g' **/*(D.)

BitField is now aware to endianness and default to little endian. It expects a value representation type without storage specification for its template parameter.
2019-01-28 22:09:43 -05:00
Weiyi Wang
6f6ffceec4 audio_core/hle,lle: implement UnloadComponent 2018-12-21 20:49:21 -05:00
Weiyi Wang
4add509b20 audio_core/hle: move implementation of LoadComponent 2018-12-21 20:49:21 -05:00
Weiyi Wang
c9736b3300 audio_core/hle,lle: implement SetSemaphore 2018-12-21 20:49:20 -05:00
Weiyi Wang
14eb3561de audio_core/hle: move implementation of RecvDataIsReady 2018-12-21 20:49:19 -05:00
Weiyi Wang
7f568a3c19 DSP/HLE: move implementation of RecvData to audio_core, behind common interface 2018-12-21 20:49:19 -05:00
Weiyi Wang
296c458e0e Memory: move GetPhysicalPointer and IsValidPhysicalAddress into class 2018-12-05 20:21:14 -05:00
Weiyi Wang
ec01975549 audio_core: pass in memory reference
Because HLE::Source is initialized as an array in the member initializer, it is hard to let it accept the reference on ctor, so it has a second init stage performed by DspHle::Impl::Impl
2018-12-05 20:16:42 -05:00
RoadrunnerWMC
008ef1fd71 DSP: Add a comment about physical address masking
See @wwylele's comment on PR 4483 for more details on what causes this behavior.
2018-12-03 12:22:11 -07:00
RoadrunnerWMC
3aff585f32 DSP: Add address mask for physical pointers to audio data buffers
Hardware testing indicated that FFFFFFFC is the correct mask for all audio formats (mono and stereo PCM8, mono and stereo PCM16, and ADPCM). This fixes broken audio in Luigi's Mansion: Dark Moon and a few other games.
2018-12-03 01:07:55 -07:00
Weiyi Wang
9458e4d8ec CoreTiming: wrap into class 2018-11-04 10:26:38 -05:00
Weiyi Wang
7d8f115185 Prefix all size_t with std::
done automatically by executing regex replace `([^:0-9a-zA-Z_])size_t([^0-9a-zA-Z_])` -> `$1std::size_t$2`
2018-09-06 16:03:28 -04:00
fearlessTobi
488694d01f Replace ToBool() with static_cast() 2018-09-01 15:50:57 +02:00
James Rowe
c35a251d86
Merge pull request #3985 from BreadFish64/fix-warnings
core: clean up warnings
2018-08-02 11:14:57 -06:00
James Rowe
14b0435df2
Merge pull request #3994 from FearlessTobi/replace-clamp-functions
Remove MathUtil::Clamp and replace it with its std:: counterpart
2018-08-02 11:08:07 -06:00
BreadFish64
74cd98ecad core: clean up warnings 2018-08-01 14:10:23 -05:00
NarcolepticK
8f70e9a318 service/dsp: Addressed comments about function name and pointer type 2018-07-29 15:18:30 -04:00
fearlessTobi
71e1d6e25d Fix compile errors 2018-07-26 13:23:25 +02:00
NarcolepticK
b840c63386 service/dsp: Clean up global state 2018-07-24 16:15:37 -04:00
fearlessTobi
7a3e126a4f Replace MathUtil::Clamp with its std counterpart 2018-07-24 19:08:17 +02:00
NarcolepticK
c39daa3c01 service/dsp: Migrate to ServiceFramework (#3915)
* service/dsp: Migrate to ServiceFramework

* service/dsp: Removed redundant buffer copy

* service/dsp: Addressed comment about pushing u32 instead of bool

* service/dsp: Fix clang format

* service/dsp: Addressed comment about minimizing global state

* service/dsp: Addressed comments and fixed log call issue

* service/dsp: Fix missed clang format
2018-07-12 17:54:26 +03:00
wwylele
0eab948728 reformat all files with clang-format 2018-06-29 16:56:12 +03:00
wwylele
7c5a76e58b log: replace all NGLOG with LOG 2018-06-29 14:18:07 +03:00
Daniel Lim Wee Soong
38e2b6c8d8 Undo changes to unrelated files and fix formatting 2018-03-25 00:54:40 +08:00
Daniel Lim Wee Soong
df816b5eaf Address review comments
* Convert %x to {:x}
* Convert {0:#010x} to {:#010x}
* Remove `? true : false` statement
* Remove `.c_str()` for strings
2018-03-24 22:25:50 +08:00
Daniel Lim Wee Soong
693b190274 audio_core: Migrate logging macros
Follow-up of #3533

Replace prefix of all logging macros from LOG to NGLOG
2018-03-24 21:45:58 +08:00
James Rowe
f61141e86a Update the entire application to use the new clang format style 2018-03-09 10:54:43 -07:00
MerryMage
adf9a19095 fixup! audio_core: Remove global state 2018-02-04 22:23:51 +00:00
MerryMage
ab3d53131a audio_core: Remove global state 2018-02-03 15:15:17 +00:00
MerryMage
8a5cc14ba4 Audio/HLE/Source: Fix looped state not updating
Bugfix for ff280800.
2017-11-25 11:10:10 +00:00
Huw Pascoe
a13ab958cb Fixed type conversion ambiguity 2017-09-30 09:34:35 +01:00
Subv
d7459354f5 Audio: Use std::deque instead of std::vector for the audio buffer type (StereoBuffer16).
The current code inserts and deletes elements from the beginning of the audio buffer, which is very inefficient in an std::vector.

Profiling was done using VisualStudio2017's Performance Analyzer in Super Mario 3D Land.

Before this change: AudioInterp::Linear had 14.14% of the runtime (inclusive) and most of that time was spent in std::vector's insert implementation.
After this change: AudioInterp::Linear has 0.36% of the runtime (inclusive)
2017-09-25 18:31:37 -05:00
MerryMage
933508e2a2 interpolate: Interpolate on a frame-by-frame basis 2017-08-28 10:54:41 +01:00
Yuri Kunde Schlesner
b4a93cfdde DSP: Create backing memory for entire DSP RAM
Also move address space mapping out of video_core.
2017-05-09 21:44:00 -07:00
Mat M
0cb52ee74a Doxygen: Amend minor issues (#2593)
Corrects a few issues with regards to Doxygen documentation, for example:

- Incorrect parameter referencing.
- Missing @param tags.
- Typos in @param tags.

and a few minor other issues.
2017-02-26 17:58:51 -08:00
Jake Merdich
ff28080091 Support looping HLE audio (#2422)
* Support looping HLE audio
* DSP: Fix dirty bit clears, handle nonmonotonically incrementing IDs
* DSP: Add start offset support
2017-01-29 23:52:25 -08:00
Lioncash
963aedd8cc Add all services to the Service namespace
Previously there was a split where some of the services were in the
Service namespace and others were not.
2016-12-11 00:07:27 +00:00
Ricardo de Almeida Gonzaga
13d46f6820 Fix typos 2016-10-20 12:26:59 -02:00
Yuri Kunde Schlesner
84fbbe2629 Use negative priorities to avoid special-casing the self-include 2016-09-21 00:15:56 -07:00
Emmanuel Gil Peyrot
ebdae19fd2 Remove empty newlines in #include blocks.
This makes clang-format useful on those.

Also add a bunch of forgotten transitive includes, which otherwise
prevented compilation.
2016-09-21 11:15:47 +09:00
Yuri Kunde Schlesner
396a8d91a4 Manually tweak source formatting and then re-run clang-format 2016-09-18 21:14:25 -07:00
Emmanuel Gil Peyrot
dc8479928c Sources: Run clang-format on everything. 2016-09-18 09:38:01 +09:00
MerryMage
991cdda3fc audio_core: Tweak audio latency 2016-09-07 15:27:32 +01:00
MerryMage
904a319694 audio_core: Add EnableStretching to interface so that one can toggle stretching on and off 2016-08-31 16:56:30 +01:00
MerryMage
0ef4185644 sink: Change EnqueueSamples to take a pointer to a buffer instead of a std::vector 2016-08-31 16:55:10 +01:00
MerryMage
f4d364a60e DSP/HLE: Audio output 2016-05-19 07:25:26 +01:00
MerryMage
6542c60602 DSP/HLE: Implement mixer processing 2016-05-19 07:24:39 +01:00
Maribel
6f6af6928f AudioCore: Implement time stretcher (#1737)
* AudioCore: Implement time stretcher

* fixup! AudioCore: Implement time stretcher

* fixup! fixup! AudioCore: Implement time stretcher

* fixup! fixup! fixup! AudioCore: Implement time stretcher

* fixup! fixup! fixup! fixup! AudioCore: Implement time stretcher

* fixup! fixup! fixup! fixup! fixup! AudioCore: Implement time stretcher
2016-05-14 22:04:03 -04:00