Commit Graph

914 Commits

Author SHA1 Message Date
Casey Langen
32fced8274 Fixed PulseOut and also bumped all output plugin versions. 2016-12-25 00:03:13 -08:00
casey langen
f25fb85c16 Added IOutput::Drain() and implementations for all the output devices.
Call this method at the very end of the Player threadProc, just before
destroying the instance.
2016-12-24 23:56:53 -08:00
casey langen
39086c6145 Fixed bugs in auto-stop when arriving at the end of the playlist. 2016-12-24 22:10:49 -08:00
casey langen
01c9b6cb3b Some more low-level surgery:
1. Player now manages a list of listeners so more than one client can be
notified of events.
2. Crossfader no longer awkwardly receives Player events via the
Transport, it attaches and detaches to the player as appropriate.
3. Renamed Player::PlayerEventListener => Player::EventListener, and added
stubbed implementations for all the listener methods.
2016-12-24 20:53:52 -08:00
Casey Langen
698227cff1 Fixed Player::Detach() logic for CrossfadeTransport. Also simplified a bit of Player instance reset checks in GaplessTransport. 2016-12-24 18:13:56 -08:00
casey langen
ad390fb6f1 Ensure GaplessTransport always detaches from before destroying players. 2016-12-24 17:31:32 -08:00
casey langen
27270e1cf7 Oops, fixed equality check in Player::Detach() 2016-12-24 17:20:32 -08:00
casey langen
ddfe18cbda Added safe listener detach logic to Player and added it to
GaplessTransport.
2016-12-24 17:17:45 -08:00
casey langen
4356397f40 Fixed the CrossfadeTransport to work properly with muted streams -- or
streams that become muted during the fading process.
2016-12-24 14:09:16 -08:00
casey langen
e2ef4dda3f Added MessageQueue::Contains() and modified MessageQueue::Remove() to
return the number of elements removed.
2016-12-24 14:09:16 -08:00
Casey Langen
8ea81ae9a8 More state management fixes in CoreAudioOut.cpp -- it no longer glitches when pausing/resuming/stopping using the CrossfadeTransport. 2016-12-24 13:03:11 -08:00
casey langen
0184f1c8e8 Tweaked CoreAudioOut state flags to be more similar to most of the other
outputs.
2016-12-24 12:49:05 -08:00
casey langen
cfee726c02 * Fixed a memory leak in WasapiOut
* Added a new OnPlayerPrepared() callback method to the Player's listener
interface.

* More work on the crossfader. It kind of works now in some cases. Still a
ways to go...
2016-12-24 01:01:08 -08:00
casey langen
5b5399322f Ensure the Player's listener is zero'd out as part of Player::Destroy().
Also cleaned up a couple small warnings.
2016-12-23 21:38:16 -08:00
Casey Langen
483dfa65cd Fixed Linux compile. 2016-12-23 20:25:49 -08:00
Casey Langen
40e9fc90c3 Fixed macos compile. 2016-12-23 18:58:18 -08:00
casey langen
1f0b306987 More incremental work to support a crossfading transport. 2016-12-23 18:37:07 -08:00
casey langen
06a83344b7 - Fixed DirectSoundOut to fallback to software mixing if necessary
- Fixed WasapiOut to do local stream volume control, instead of session
  (i.e. app-wide) volume control.
2016-12-23 18:36:19 -08:00
casey langen
5f7f2ac0e0 Fixed bug in Player::Destroy() that could try to detach an already
detached thread, leading to a crash.
2016-12-23 16:09:48 -08:00
casey langen
167d7aeb1c Added missing CrossfadeTransport and Crossfader source files. 2016-12-23 12:57:24 -08:00
casey langen
25e752892c - Fixed a bug in Player mixpoint dispatch
- Fixed MessageQueue::WaitAndDispatch() time arithmetic
2016-12-23 12:56:24 -08:00
casey langen
5cd3a8de10 Properly implemented play/pause semantics in output plugins (only WaveOut
was doing it properly!)
2016-12-23 12:53:57 -08:00
casey langen
a6372b3c92 A bunch of changes, some of which are still untested:
1. Added IDecoder::GetDuration() methods. Implemented it for all decoders.
2. Modified NomadDecoder to properly resolve duration for mp3 files that
do not have valid Xing headers (borrowed TagLib code)
3. Added IStream::GetDuration(), IPlayer::GetDuration(), and
ITransport::GetDuration()
4. Stubbed out a CrossfaderTransport (untested, unimplemented)
5. Added the concept of "MixPoints" to Player, so clients can be notified
when playback reaches certain points. (untested)
6. Started fleshing out a Crossfader implementation that uses a background
thread and a MessageQueue (untested)
7. Modified TransportWindow to pull the decoder's duration, then fallback
to the library duration if unavailable.
8. Added IDataStream::Seekable(), implemented in LocalFileStream.
2016-12-23 01:36:49 -08:00
Casey Langen
4b53439d68 Fixed macos compile. 2016-12-21 16:48:27 -08:00
casey langen
25fa580bde - Moved MessageQueue and friends into the core so it can be reused for
other things like timers and processing threads
- Cleaned up Player's listener interface a bit, and removed some more
  complexity from GaplessTransport
2016-12-21 16:41:44 -08:00
casey langen
1a00c83c7b Added MessageQueue::WaitAndDispatch(), which should be usable for
timer-like functionality.
2016-12-21 00:02:20 -08:00
casey langen
3aa4871e62 MessageQueue itself is no longer a singleton. However, Window has a static
instance.
2016-12-20 22:54:13 -08:00
casey langen
b832b96688 Simplified GaplessTransport -- we no longer need to keep around the weird
list of active players -- only the one that's actually active and the next
one.
2016-12-20 22:27:13 -08:00
casey langen
95fc9c725b Ensure the state flag in DirectSoundOut.h is an atomic. 2016-12-19 22:57:50 -08:00
casey langen
00bcb09a94 Version bump. 2016-12-19 22:52:37 -08:00
casey langen
35335632e8 Added a very simple shell script used to archive builds for distribution. 2016-12-19 22:50:37 -08:00
casey langen
928a74e4d5 OK, hopefully really fixed the volume -> attenuation conversion. Used VLC
as a reference implementation.
2016-12-19 16:24:20 -08:00
casey langen
cd15ece9f0 Fixed volume -> attenuation conversion in DirectSoundOut. 2016-12-18 19:40:11 -08:00
casey langen
d27b911ede - Added DirectSoundOut plugin for Windows
- Updated WasapiOut to pre-calculate the stream latency
2016-12-18 17:15:00 -08:00
casey langen
60f8d5ab50 Fixed broken CMakeLists install script. 2016-12-14 22:06:56 -08:00
Casey Langen
487f47a88c Version bump. 2016-12-14 07:47:09 -08:00
casey langen
33c61c27bd Removed mpg123 references from README.md -- if all goes well with this
branch we'll default to (no)mad.
2016-12-13 22:28:56 -08:00
casey langen
dff09255a7 Fixed Linux compile. 2016-12-13 21:26:32 -08:00
casey langen
e299c2a98e Basic math is hard. Fixed scaling PCM_16 -> FLOAT_32 2016-12-13 21:10:47 -08:00
Casey Langen
4f0d98b850 Fixed OSX compile. 2016-12-13 20:40:48 -08:00
casey langen
5bae38bf65 Added a decoder for the (no)mad mpeg library. Gapless playback for a wider
variety of mp3 files!
2016-12-13 19:55:30 -08:00
casey langen
99f87237da Upgraded mpg123 to 1.23.8 for Win32 build. Now built from source and
doesn't require libgcc_s_sjlj-1 or the external libmpg123-0.dll.
2016-12-12 23:15:04 -08:00
casey langen
bdd8679865 Introduced an ID cache in the IndexerTrack to reduce DB churn when
indexing large amounts of files. This should improve indexing speed
at the expense of temporarily increased memory usage.
2016-12-11 21:48:35 -08:00
casey langen
2b7ad11c40 Version bump. 2016-12-10 00:07:36 -08:00
casey langen
b428b2d7d1 Fixed the GdiVis project to not put intermediates into the output
directory.
2016-12-10 00:07:19 -08:00
casey langen
ddacf4dc69 Make sure when we change main layouts we bring them to the top so all
views appear properly.
2016-12-10 00:06:47 -08:00
casey langen
be9284e4ef Fixed a really old bug in ListWindow where you could scroll past the last
item if items in the viewport were of heterogenous size.
2016-12-08 20:25:17 -08:00
casey langen
b3b423f931 Not feeling the new list title style. Reverted. 2016-12-08 00:08:25 -08:00
casey langen
3cceef8d93 Dangerous low-level change #3
Dramatically reduce unnecessary redraws by introducing a dirty bit to the
Window instances. Also changed the order in which some windowing
operations are performed.
2016-12-07 22:11:06 -08:00
casey langen
0a76f0f4f9 Tweaked the look and feel of the new header in BrowseLayout. 2016-12-07 16:38:40 -08:00