Commit Graph

437 Commits

Author SHA1 Message Date
sinamas
8991b17e97 - Document Qt media framework better.
git-svn-id: https://gambatte.svn.sourceforge.net/svnroot/gambatte@237 9dfb2916-2d38-0410-aef4-c5fe6c9ffc24
2010-02-03 18:00:19 +00:00
sinamas
05a3d6935a - Move resample files around to separate interface files from
implementation files.


git-svn-id: https://gambatte.svn.sourceforge.net/svnroot/gambatte@236 9dfb2916-2d38-0410-aef4-c5fe6c9ffc24
2010-02-02 23:09:04 +00:00
sinamas
08398251fa - Move Qt media framework files around to separate interface from
implementation somewhat.


git-svn-id: https://gambatte.svn.sourceforge.net/svnroot/gambatte@235 9dfb2916-2d38-0410-aef4-c5fe6c9ffc24
2010-02-02 22:47:39 +00:00
sinamas
350533a224 - Redesign Qt multimedia framework to use a worker thread for MediaSource updates. This was a ton of work, but should make underruns a lot less likely. The majority of
underruns are caused by video I/O blocking (even when not syncing to vblank). It also means that vsync blocking is a non-issue. Lots of thread-safety considerations had to 
be done. Lots of tools developed to deal with new problems. Things redesigned to be asynchronous to avoid blocking the worker thread. New interfaces developed to give 
clients access to these things without too much pain, as clients need to deal with thread-safety issues, and be able to do things asynchronously to avoid blocking and 
unnecessary synchronization. Things developed and then scrapped as I changed my mind. Lots of thinking and testing to ensure video smoothness.
- Make configuration of the multimedia framework way more flexible, by adding methods for configuring video and sound, rather than forcing the use of the SoundDialog or 
VideoDialog. Thus clients can make their own GUI for such things.
- Pass raw input events to MediaSources so that clients will not have to use the InputDialog with its Button system.
- Split BlitterWidget blitting into three methods: blit, draw, and sync, such that blitting is supposedly a fast pixel copy or buffer swap, while draw prepares for 
presentation, and sync presents the completed video frame ASAP. Blit needs to be fast to avoid blocking the worker thread to avoid underruns.
- Allow heavy MediaSource video work to be skipped when frames are skipped.
- Do some work in parallel on SMP systems.
- Adjust low audio buffer detection to make it more robust.
- Move variance calculation to the user of estimations, because the variance calculated by estimators is not well defined anyway.
- Add support for adjustable fast-forward speed.
- Fast-forward now outputs audio, by skipping entire segments of audio when skipping frames.
- Adjust blitters to conform to the new threaded model.
- Direct3DBlitter: Apparently vertices point to the center of pixels. Subtract 0.5 from vertex coordinates.
- DirectDrawBlitter: Sleep more when far from vblank.
- QGLBlitter: Get rid of makeCurrent calls, because they apparently block and can be slow and don't seem to be needed anyway. They also seem to cause instability with some 
drivers.
- XvBlitter: Double buffer to delay updates to sync time.
- X11Blitter: Double buffer when not scaling to delay updates to sync time.
- QPainterBlitter: Double buffer when not scaling to delay updates to sync time.
- SdlBlitter: Delay updates to sync time.
- AlsaEngine: Set max periods to 16 to work around stupid ALSA plugins and drivers that advertise smaller period sizes than properly supported. ALSA always picks the 
maximum number of periods allowed, which means it picks the smallest period size allowed for a given buffer size.
- QPainterBlitter: Don't disable updates when not paused, because this breaks macx.
- Support pause on focus out.
- Add MiscDialog to allow user configuration of fast-forward speed and focus policy.
- Separate sync to refresh rate logic from sync to vblank logic.
- Sync to refresh rate menu option.
- Use semi-bilinear filtering rather than bilinear filtering for soft-scaling blitters.
- MakeSincKernel: Consider rounding effects when computing absolute gain.
- MakeSincKernel: Use a function pointer rather than a template argument to reduce code bloat.
- Reorder sinc kernel phases.
- PolyPhaseConvoluter: Simplify some calculations.
- Replace Hamming and Blackman windowed sincs with Kaiser windowed sinc of appropriate betas, because they require a lower number of taps to achieve the same specs.
- Use rounding shifts in resamplers for higher precision and performance.
- libgambatte: Update returns on video frame completion rather than using a callback for notification.
- libgambatte: Move video filters and color conversion out of the library.
- libgambatte: Get rid of unnecessarily complex VideoBlitter interface.
- libgambatte: Use bit flags rather bools for input state.
- Change some parameters to constants in 2xsai and hqx video filters.
- Probably other stuff I've forgotten about.



git-svn-id: https://gambatte.svn.sourceforge.net/svnroot/gambatte@234 9dfb2916-2d38-0410-aef4-c5fe6c9ffc24
2010-02-02 21:30:46 +00:00
sinamas
ba033432ed - swscale.h: Add semiLinear scaler, which is almost as sharp and fast as nearestNeighbor for large scales, yet reduces aliasing like the linear scaler.
- swscale.h: Center nearest neighbor bias.
- swscale.h: Optimize a bit more.


git-svn-id: https://gambatte.svn.sourceforge.net/svnroot/gambatte@233 9dfb2916-2d38-0410-aef4-c5fe6c9ffc24
2009-07-18 23:04:06 +00:00
sinamas
0efb3493c0 - ossengine: Reduce number of requested fragments again slightly to 6, because OSSv4 has a default minimum fragment size of about 10 ms causing excessive minimum latency.
git-svn-id: https://gambatte.svn.sourceforge.net/svnroot/gambatte@232 9dfb2916-2d38-0410-aef4-c5fe6c9ffc24
2009-07-11 00:09:23 +00:00
sinamas
5fd9e97f2a - ossengine: Fix horribly broken rate estimation on OSS4 (and possibly other implementations) by using GETOPTR rather than GETOSPACE.
- ossengine: Increase number of fragments requested from 4 to 8 for more accurate OSPACE/OPTR information with OSS4 (and possibly other implementations).
- ossengine: Minor include corrections and namespace fixes. Use log(x)/log(2) rather than non-c++98 log2. Minor rounding fix in fragment size calculation.


git-svn-id: https://gambatte.svn.sourceforge.net/svnroot/gambatte@231 9dfb2916-2d38-0410-aef4-c5fe6c9ffc24
2009-07-10 04:13:48 +00:00
sinamas
38e7dbde27 AlsaEngine: Set start threshold to half the buffer size, to avoid (possibly infinite) repeated xruns due to ALSA's default threshold of 1 frame.
git-svn-id: https://gambatte.svn.sourceforge.net/svnroot/gambatte@230 9dfb2916-2d38-0410-aef4-c5fe6c9ffc24
2009-07-08 18:18:32 +00:00
sinamas
dfc7196728 - Use RGBA internal texture format, as it usually means less conversion.
- Get rid of pointless initialization of OpenGL state that is equal to 
the default, or otherwise meaningless. Enable GL_CULL_FACE in case it's 
slightly faster in some configurations.


git-svn-id: https://gambatte.svn.sourceforge.net/svnroot/gambatte@229 9dfb2916-2d38-0410-aef4-c5fe6c9ffc24
2009-05-07 17:16:22 +00:00
sinamas
e2e5adcdc7 - Use MinKeeper to schedule Memory::events.
- Remove old incEndtime function since it's not worth the maintenance 
overhead.


git-svn-id: https://gambatte.svn.sourceforge.net/svnroot/gambatte@228 9dfb2916-2d38-0410-aef4-c5fe6c9ffc24
2009-04-15 02:20:57 +00:00
sinamas
da5bc2b964 - Add data structure that efficiently keeps track of the minimum of a
small, fixed set of variables, using templates to autogenerate 
efficient, unrolled functions that update the binary tree for each 
variable. It also efficiently supports priorities among variables when 
their values are equal, and can give variables that change the most 
frequently a better spot in the tree if the number of variables isn't a 
power of 2. Will be used for event scheduling.


git-svn-id: https://gambatte.svn.sourceforge.net/svnroot/gambatte@227 9dfb2916-2d38-0410-aef4-c5fe6c9ffc24
2009-04-15 02:18:34 +00:00
sinamas
a9ab1bea78 - Lyc0irq on display enable.
git-svn-id: https://gambatte.svn.sourceforge.net/svnroot/gambatte@226 9dfb2916-2d38-0410-aef4-c5fe6c9ffc24
2009-03-23 21:25:14 +00:00
sinamas
acef65d04a Update changelog for 0.4.1
git-svn-id: https://gambatte.svn.sourceforge.net/svnroot/gambatte@225 9dfb2916-2d38-0410-aef4-c5fe6c9ffc24
2009-01-10 22:41:54 +00:00
sinamas
0bc8c18794 - Esc exits fullscreen on macx.
- Drop OpenAL from default macx binary.
- Add some useful but commented build flags for macx to .pro files.


git-svn-id: https://gambatte.svn.sourceforge.net/svnroot/gambatte@224 9dfb2916-2d38-0410-aef4-c5fe6c9ffc24
2009-01-10 21:52:05 +00:00
sinamas
692b98eb12 - Make sure to reset passed pointers when deleted. Fixes potential crash when loadin ROM during OAM busy.
git-svn-id: https://gambatte.svn.sourceforge.net/svnroot/gambatte@223 9dfb2916-2d38-0410-aef4-c5fe6c9ffc24
2009-01-10 19:22:59 +00:00
sinamas
f6d99b35dd - AlsaEngine: Make use of sample period limit feature of RateEst. Don't
increase estimated sample rate on underrun.
- OssEngine: Make use of sample period limit feature of RateEst. Don't
  increase estimated sample rate on underrun.


git-svn-id: https://gambatte.svn.sourceforge.net/svnroot/gambatte@222 9dfb2916-2d38-0410-aef4-c5fe6c9ffc24
2009-01-10 04:20:23 +00:00
sinamas
b08a9cc1ba - XvBlitter: Set NosystemBackground attribute rather than
OpaquePaintEvent. Reimplement paintEngine to return NULL.
- X11Blitter: Reimplement paintEngine to return NULL.


git-svn-id: https://gambatte.svn.sourceforge.net/svnroot/gambatte@221 9dfb2916-2d38-0410-aef4-c5fe6c9ffc24
2009-01-10 04:19:12 +00:00
sinamas
ec85b7856a - DirectSoundEngine: Provide the integrated read and status get write method optimization.
git-svn-id: https://gambatte.svn.sourceforge.net/svnroot/gambatte@220 9dfb2916-2d38-0410-aef4-c5fe6c9ffc24
2009-01-09 23:00:31 +00:00
sinamas
75f707a151 - WasapiEngine: Use default device if there's only one device available, since we don't show the combobox anyway.
git-svn-id: https://gambatte.svn.sourceforge.net/svnroot/gambatte@219 9dfb2916-2d38-0410-aef4-c5fe6c9ffc24
2009-01-09 21:49:18 +00:00
sinamas
d7b4708ef3 - WasapiEngine: Add device selection.
- WasapiEngine: Add static isUsable() method. Only listed if isUsable(). Default engine if isUsable().


git-svn-id: https://gambatte.svn.sourceforge.net/svnroot/gambatte@218 9dfb2916-2d38-0410-aef4-c5fe6c9ffc24
2009-01-09 08:00:18 +00:00
sinamas
7fcab361f0 - Add basic WASAPI engine with exclusive mode support. Latency and rate estimation is generally better than DirectSound, and
in exclusive mode there is less blocking as well as exclusive mode being better than shared mode in the other areas too.


git-svn-id: https://gambatte.svn.sourceforge.net/svnroot/gambatte@217 9dfb2916-2d38-0410-aef4-c5fe6c9ffc24
2009-01-09 04:02:29 +00:00
sinamas
7a91709921 - DirectSoundEngine: Make use of the sample period limit feature of RateEst, rather than duplicating the feature.
git-svn-id: https://gambatte.svn.sourceforge.net/svnroot/gambatte@216 9dfb2916-2d38-0410-aef4-c5fe6c9ffc24
2009-01-09 03:57:16 +00:00
sinamas
3a66da4df8 - RateEst: Add a convenient way of filtering measures that extend beyond a buffer time, and are as such
probably invalid.
- RateEst: Allow using a custom timestamp in feed().
- RateEst: Keep a queue of the last ~100 msec worth of samples and duration, and filter out collective
  samples that give a pre-estimate that seems way off.


git-svn-id: https://gambatte.svn.sourceforge.net/svnroot/gambatte@215 9dfb2916-2d38-0410-aef4-c5fe6c9ffc24
2009-01-09 02:07:33 +00:00
sinamas
d80c9aa8ce - Direct3DBlitter and DirectDrawBlitter: Force blocking updates when sync to vblank is enabled.
Some updates only block if there's a prior unfinished update in progress. This screws up frame time estimation
  in turn screwing up vsync. To fix this we do a double update (and extra blit) if close to a frame time
  period has passed since the last update when sync to vblank is enabled. I really should have noticed this earlier
  as it pretty much breaks vsync adaption completely.
- Direct3DBlitter: Use the D3DCREATE_FPU_PRESERVE flag when creating device. Omitting this flag can screw up floating point
  calculations in other parts of the code. For instance WASAPI cursor timestamps get utterly screwed up here.
- Direct3DBlitter: It appears that managed textures are updated before they are unlocked, which screws up redraws, making
  things appear choppy in some situations. Use a default memory texture and a system memory texture and the UpdateTexure
  method instead.



git-svn-id: https://gambatte.svn.sourceforge.net/svnroot/gambatte@214 9dfb2916-2d38-0410-aef4-c5fe6c9ffc24
2009-01-09 01:59:53 +00:00
sinamas
6a5be0cc9f Replace "Game Boy / Game Boy Color emulator" with "Game Boy Color emulator" for now to avoid misleading anyone on the current status.
git-svn-id: https://gambatte.svn.sourceforge.net/svnroot/gambatte@213 9dfb2916-2d38-0410-aef4-c5fe6c9ffc24
2009-01-06 04:23:55 +00:00
sinamas
d90462a823 Rewrite most of DirectSoundEngine, supporting primary buffer option, making it more robust, correct and hopefully cleaner.
Only use part of the primary buffer if the desired buffer size is lower than the primary buffer size.


git-svn-id: https://gambatte.svn.sourceforge.net/svnroot/gambatte@212 9dfb2916-2d38-0410-aef4-c5fe6c9ffc24
2009-01-06 03:07:20 +00:00
sinamas
ec10d41982 Use wildcards for platform detection to avoid being unnecessarily compiler/architecture specific. Fixes bug 2377772.
git-svn-id: https://gambatte.svn.sourceforge.net/svnroot/gambatte@211 9dfb2916-2d38-0410-aef4-c5fe6c9ffc24
2009-01-04 17:01:34 +00:00
sinamas
7531fcb6bb Pause audio on win32 titlebar clicks/drags to avoid looping audio due to underruns from blocked timerEvents.
git-svn-id: https://gambatte.svn.sourceforge.net/svnroot/gambatte@210 9dfb2916-2d38-0410-aef4-c5fe6c9ffc24
2009-01-01 15:19:03 +00:00
sinamas
305ec25dbf - DirectDrawBlitter: Add triple buffering option.
- Direct3DBlitter: Use D3DSWAPEFFECT_DISCARD in non-exclusive mode.
- Direct3DBlitter: Allow triple buffering and vblank-only updates in non-excusive mode.
- Rename "Page flipping" in Direct3D and DirectDraw blitters to "Exclusive full screen".


git-svn-id: https://gambatte.svn.sourceforge.net/svnroot/gambatte@209 9dfb2916-2d38-0410-aef4-c5fe6c9ffc24
2009-01-01 04:21:03 +00:00
sinamas
4454c3ce0f - Adaptively skip BlitterWidget syncs if audio buffer is low, in a manner that should minimize wasted skips in sync to vblank situation, and tries to be non-disturbing. This replaces frame time halving, and blitter specific rescueing.
- Clear display buffers in DirectDrawBlitter and Direct3DBlitter in exclusive mode, since blits don't necessarily cover the entire buffers.
- DirectDrawBlitter: Make sure that a minimum amount of time has passed between calls to WaitForVerticalBlank, since it can return in the same vblank period twice on a fast system.
- DirectDrawBlitter: Support vsync for refresh rate ~= 2x frame rate
- DirectDrawBlitter: Refactor somewhat and get rid of a couple minor potential bugs.
- DirectDrawBlitter: Some tweaks to get updates closer to sync time in certain situations.
- DirectDrawBlitter: Some tweaks to better support DO_NOT_WAIT.
- DirectDrawBlitter: Make only updating during vblank while page flipping optional.
- Direct3DBlitter: Some tweaks to get updates closer to sync time in certain situations.
- Filter out very short frame times in frame time estimation.
- Don't adjust frame time during turbo, but rather skip BlitterWidget syncs to speed up, which avoids vsync limits without disabling vsync.



git-svn-id: https://gambatte.svn.sourceforge.net/svnroot/gambatte@208 9dfb2916-2d38-0410-aef4-c5fe6c9ffc24
2008-12-31 06:10:38 +00:00
sinamas
a36ad03625 Up default audio buffer latency to 100 ms (some common system audio servers require a lot of buffering to work well).
git-svn-id: https://gambatte.svn.sourceforge.net/svnroot/gambatte@207 9dfb2916-2d38-0410-aef4-c5fe6c9ffc24
2008-12-26 17:56:19 +00:00
sinamas
6308d19123 QGLBlitter: Do a cheap front blit rather than a vsynced flip if audio buffers are low.
Allow BlitterWidgets to opt in to get paintEvents while unpaused. Do so for QGLBlitter since it may need to clear buffers afterwards.
QGLBlitter: Try to blit right after sync in the case of single buffering.


git-svn-id: https://gambatte.svn.sourceforge.net/svnroot/gambatte@206 9dfb2916-2d38-0410-aef4-c5fe6c9ffc24
2008-12-26 17:50:13 +00:00
sinamas
7dcadcff88 Disable BlitterWidget updates (paintEvents) while not paused.
git-svn-id: https://gambatte.svn.sourceforge.net/svnroot/gambatte@205 9dfb2916-2d38-0410-aef4-c5fe6c9ffc24
2008-12-26 02:32:43 +00:00
sinamas
c69e48ac80 Substantially improved rate estimation averaging.
git-svn-id: https://gambatte.svn.sourceforge.net/svnroot/gambatte@204 9dfb2916-2d38-0410-aef4-c5fe6c9ffc24
2008-12-25 23:45:53 +00:00
sinamas
cbf173e0a8 Fix mbc2 not getting a rambank
git-svn-id: https://gambatte.svn.sourceforge.net/svnroot/gambatte@203 9dfb2916-2d38-0410-aef4-c5fe6c9ffc24
2008-11-03 20:42:50 +00:00
sinamas
7a939e1522 Fix HqXx pitch.
git-svn-id: https://gambatte.svn.sourceforge.net/svnroot/gambatte@202 9dfb2916-2d38-0410-aef4-c5fe6c9ffc24
2008-11-01 07:38:24 +00:00
sinamas
edd2434ca2 silly ifdef typo
git-svn-id: https://gambatte.svn.sourceforge.net/svnroot/gambatte@201 9dfb2916-2d38-0410-aef4-c5fe6c9ffc24
2008-10-27 23:41:57 +00:00
sinamas
58ec25aff0 update changelog, README
git-svn-id: https://gambatte.svn.sourceforge.net/svnroot/gambatte@200 9dfb2916-2d38-0410-aef4-c5fe6c9ffc24
2008-10-27 22:23:35 +00:00
sinamas
cd799e3cd8 work around annoying random non-updating OpenGL on Mac OS X after full screen.
git-svn-id: https://gambatte.svn.sourceforge.net/svnroot/gambatte@199 9dfb2916-2d38-0410-aef4-c5fe6c9ffc24
2008-10-27 19:53:21 +00:00
sinamas
5eb81ff36a Allow more rate estimation deviation.
git-svn-id: https://gambatte.svn.sourceforge.net/svnroot/gambatte@198 9dfb2916-2d38-0410-aef4-c5fe6c9ffc24
2008-10-27 12:36:08 +00:00
sinamas
03ca427b8d Lower opacity OSD text.
git-svn-id: https://gambatte.svn.sourceforge.net/svnroot/gambatte@197 9dfb2916-2d38-0410-aef4-c5fe6c9ffc24
2008-10-26 15:11:07 +00:00
sinamas
7fb056af35 Actually add the hq3x code mentioned in previous commit.
git-svn-id: https://gambatte.svn.sourceforge.net/svnroot/gambatte@196 9dfb2916-2d38-0410-aef4-c5fe6c9ffc24
2008-10-26 13:35:29 +00:00
sinamas
7d6b0db817 Add adapted and optimized hq3x.
Revert to big f'ing switch hq2x code, as there's less duplication now. Also optimized interpolation functions further. No idea how I missed that initially.


git-svn-id: https://gambatte.svn.sourceforge.net/svnroot/gambatte@195 9dfb2916-2d38-0410-aef4-c5fe6c9ffc24
2008-10-26 13:34:13 +00:00
sinamas
bda7eaf108 saner ly write behaviour
git-svn-id: https://gambatte.svn.sourceforge.net/svnroot/gambatte@194 9dfb2916-2d38-0410-aef4-c5fe6c9ffc24
2008-10-26 13:21:06 +00:00
sinamas
12d33eca65 Append "_dmg" to save base name when forcing DMG mode, to avoid corrupting CGB save files and vice versa.
git-svn-id: https://gambatte.svn.sourceforge.net/svnroot/gambatte@193 9dfb2916-2d38-0410-aef4-c5fe6c9ffc24
2008-10-26 06:23:42 +00:00
sinamas
1f6c8dc2d4 Tile loading and tile rendering can seemingly get out of sync when modifying scx at a critical time. Another pessimation with little gain in the name of accuracy.
Use a look-up table to do tile byte merging.


git-svn-id: https://gambatte.svn.sourceforge.net/svnroot/gambatte@192 9dfb2916-2d38-0410-aef4-c5fe6c9ffc24
2008-10-26 05:44:56 +00:00
sinamas
ec9199c334 no sprites or sprite mapping busy cycles on first line after display enable. slight cleanup. small oam accessibility correction.
git-svn-id: https://gambatte.svn.sourceforge.net/svnroot/gambatte@191 9dfb2916-2d38-0410-aef4-c5fe6c9ffc24
2008-10-25 10:41:53 +00:00
sinamas
5fc35493a6 revert DMG window display while bg disabled change
git-svn-id: https://gambatte.svn.sourceforge.net/svnroot/gambatte@190 9dfb2916-2d38-0410-aef4-c5fe6c9ffc24
2008-10-24 08:43:19 +00:00
sinamas
bdba031382 No rambanks for ROMs that don't request any.
Route invalid rombank addresses in non-power-of-2 number of rombanks cases to disabled area assuming ceiled power of 2 address bus.
DMG window display disregards bg enable bit.


git-svn-id: https://gambatte.svn.sourceforge.net/svnroot/gambatte@189 9dfb2916-2d38-0410-aef4-c5fe6c9ffc24
2008-10-24 08:19:15 +00:00
sinamas
b061b5db6c Add "force DMG mode" option.
git-svn-id: https://gambatte.svn.sourceforge.net/svnroot/gambatte@188 9dfb2916-2d38-0410-aef4-c5fe6c9ffc24
2008-10-24 05:09:37 +00:00