path: root/apps/playback.c
AgeCommit message (Collapse)AuthorFilesLines
2011-12-14FS#12378 : Remove various unused code, and comment out some unused code and ↵Boris Gjenero1-6/+0
data for reference or future use. git-svn-id: svn:// a1c6a512-1295-4272-9138-f99709370657
2011-11-17Simulate usb plugging on the sim better using sim_tasks.Thomas Martitz1-4/+0
Now all threads need to ack the connection like on real target, dircache is unloaded and playback stops accordingly. git-svn-id: svn:// a1c6a512-1295-4272-9138-f99709370657
2011-11-17Buflib: Make shrinking and buflib_available() smarter.Thomas Martitz1-4/+15
* shrinking now considers freespace just before the alloc-to-be-shrinked, that means less (or sometimes none at all) is taken from the audio buffer. * core_available() now searches for the best free space, instead of simply the end, i.e. it will not return 0 if the audio buffer is allocated and there's free space before it. It also runs a compaction to ensure maximum contiguous memory. audio_buffer_available() is also enhanced. It now considers the 256K reserve buffer, and returns free buflib space instead if the audio buffer is short. This all fixes the root problem of FS#12344 (Sansa Clip+: PANIC occurred when dircache is enabled), that alloced from the audio buffer, even if it was very short and buflib had many more available as free space before it. git-svn-id: svn:// a1c6a512-1295-4272-9138-f99709370657
2011-11-06Fix warning and typos.Thomas Martitz1-1/+1
git-svn-id: svn:// a1c6a512-1295-4272-9138-f99709370657
2011-11-05Fix FS#12279 - playback starts from the beginning when changing themes.Thomas Martitz1-8/+26
Very frequent start-stop cycles (as caused by frequent core_alloc() calls) of audio makes the codecs lose the resume position, and this causes playback from the beginning. To work around, use queue_post() instead of queue_send() to delay the resume so that it only resumes once per core_alloc() set. git-svn-id: svn:// a1c6a512-1295-4272-9138-f99709370657
2011-11-03In the playback buflib shrink callback, ensure a minimum buffer remains forThomas Martitz1-4/+13
audio playback. If it goes below 256K new buflib allocations fail. This prevents buffer underruns as the new buffer size wasn't actually checked at all. git-svn-id: svn:// a1c6a512-1295-4272-9138-f99709370657
2011-10-12Make a few local functions staticBertrik Sikken1-1/+1
git-svn-id: svn:// a1c6a512-1295-4272-9138-f99709370657
2011-09-19Revert r30480 "Buflib/swcodec: Improve playback stopping behavior on ↵Thomas Martitz1-25/+37
allocation." The buflib metadata gets corrupted at the new loation between core_shrink() and actually applying, the new buffer boundaries (most probably due to yield()). git-svn-id: svn:// a1c6a512-1295-4272-9138-f99709370657
2011-09-08Buflib/swcodec: Improve playback stopping behavior on allocation.Thomas Martitz1-37/+25
Reuse playback's Q_AUDIO_REMAKE_AUDIO_BUFFER capabilities to set the new playback buffer, instead of stopping/restarting manual. This strongly reduces the visibility of the short audio stop. git-svn-id: svn:// a1c6a512-1295-4272-9138-f99709370657
2011-09-01Shuffle some functions around so that interfacing with playback.c in ↵Michael Sevakis1-11/+2
particular isn't required. Though playback does finish the audio init, pcm doesn't care who does it. git-svn-id: svn:// a1c6a512-1295-4272-9138-f99709370657
2011-09-01Remove obsolete init cruft from audio system because of diminished ↵Michael Sevakis1-12/+2
dependencies. All talk/voice dependency in playback.c should be imminently removable. git-svn-id: svn:// a1c6a512-1295-4272-9138-f99709370657
2011-08-30Fix red.Andree Buschmann1-0/+1
git-svn-id: svn:// a1c6a512-1295-4272-9138-f99709370657
2011-08-30GSoC/Buflib: Enable compaction in buflib.Thomas Martitz1-9/+67
This enables the ability to allocate (and free) memory dynamically without fragmentation, through compaction. This means allocations can move and fragmentation be reduced. Most changes are preparing Rockbox for this, which many times means adding a move callback which can temporarily disable movement when the corresponding code is in a critical section. For now, the audio buffer allocation has a central role, because it's the one having allocated most. This buffer is able to shrink itself, for which it needs to stop playback for a very short moment. For this, audio_buffer_available() returns the size of the audio buffer which can possibly be used by other allocations because the audio buffer can shrink. lastfm scrobbling and timestretch can now be toggled at runtime without requiring a reboot. git-svn-id: svn:// a1c6a512-1295-4272-9138-f99709370657
2011-08-30GSoC/Buflib: Add buflib memory alocator to the core.Thomas Martitz1-19/+35
The buflib memory allocator is handle based and can free and compact, move or resize memory on demand. This allows to effeciently allocate memory dynamically without an MMU, by avoiding fragmentation through memory compaction. This patch adds the buflib library to the core, along with convinience wrappers to omit the context parameter. Compaction is not yet enabled, but will be in a later patch. Therefore, this acts as a replacement for buffer_alloc/buffer_get_buffer() with the benifit of a debug menu. See buflib.h for some API documentation. git-svn-id: svn:// a1c6a512-1295-4272-9138-f99709370657
2011-08-28Commit work started in FS#12153 to put timing/position information in PCMMichael Sevakis1-121/+90
buffer chunks. * Samples and position indication is closely associated with audio data instead of compensating by a latency constant. Alleviates problems with using the elapsed as a track indicator where it could be off by several steps. * Timing is accurate throughout track even if resampling for pitch shift, whereas before it updated during transition latency at the normal 1:1 rate. * Simpler PCM buffer with a constant chunk size, no linked lists. In converting crossfade, a minor change was made to not change the WPS until the fade-in of the incoming track, whereas before it would change upon the start of the fade-out of the outgoing track possibly having the WPS change with far too much lead time. Codec changes are to set elapsed times *before* writing next PCM frame because time and position data last set are saved in the next committed PCM chunk. git-svn-id: svn:// a1c6a512-1295-4272-9138-f99709370657
2011-08-26Remove a slightly silly null dereference. (a.k.a. I'm playing with cppcheck ↵Steve Bavin1-1/+1
too.) git-svn-id: svn:// a1c6a512-1295-4272-9138-f99709370657
2011-08-23Fix FS#12238 - WPS delay on pause introduced by r30097 which was the excuse ↵Michael Sevakis1-15/+25
I wanted anyway to do a better PCM fade on stop/pause implementation. New fade is asynchronous tick-based. Restores skin update points in the WPS that were removed when fading mechanism was changed. git-svn-id: svn:// a1c6a512-1295-4272-9138-f99709370657
2011-08-22Fix FS#12234 - Simulator crashes when playing mp3 file with cuesheet. The ↵Michael Sevakis1-0/+1
cuesheet in a lookahead mp3entry should not be taken to be valid, since it won't be the cue for the current track. Be sure id3->cuesheet is set NULL if grabbing the info from the buffer. git-svn-id: svn:// a1c6a512-1295-4272-9138-f99709370657
2011-08-14GSoC/Buflib: Replace all direct accesses to audiobuf with buffer API functions.Thomas Martitz1-18/+27
Namely, introduce buffer_get_buffer() and buffer_release_buffer(). buffer_get_buffer() aquires all available and grabs a lock, attempting to call buffer_alloc() or buffer_get_buffer() while this lock is locked will cause a panicf() (doesn't actually happen, but is for debugging purpose). buffer_release_buffer() unlocks that lock and can additionally increment the audiobuf buffer to make an allocation. Pass 0 to only unlock if buffer was used temporarily only. buffer_available() is a replacement function to query audiobuflen, i.e. what's left in the buffer. Buffer init is moved up in the init chain and handles ipodvideo64mb internally. Further changes happened to mp3data.c and talk.c as to not call the above API functions, but get the buffer from callers. The caller is the audio system which has the buffer lock while mp3data.c and talk mess with the buffer. mpeg.c now implements some buffer related functions of playback.h, especially audio_get_buffer(), allowing to reduce #ifdef hell a tiny bit. audiobuf and audiobufend are local to buffer.c now. git-svn-id: svn:// a1c6a512-1295-4272-9138-f99709370657
2011-08-01revert r30226, which is apparently broken.Frank Gevaerts1-4/+0
git-svn-id: svn:// a1c6a512-1295-4272-9138-f99709370657
2011-07-31Reload the current playlist after reboot even if it has ended. (FS#11644)Frank Gevaerts1-0/+4
This is done to make reboot more transparent. If a playlist has ended, there should be no difference between the player doing nothing for ten minutes and the player shutting down after the idle timeout and being restarted. git-svn-id: svn:// a1c6a512-1295-4272-9138-f99709370657
2011-07-09The voice PCM buffer has nothing to do with the playback PCM buffer any ↵Michael Sevakis1-2/+14
longer. Allocate it independently from the playback engine's PCM buffer and only when voice is required. Additionally, allocate actual space for the crossfade buffer only when using crossfade. Will save 18.3KB when neither is needed (10.3KB for voice and 8.0KB for crossfade). git-svn-id: svn:// a1c6a512-1295-4272-9138-f99709370657
2011-07-08Have mpegplayer use the mixer (the playback channel, since it's mutually ↵Michael Sevakis1-4/+2
exclusive to audio playback) so the clicks and skip beep can be used according to user settings. Introduce some system sound functions to make easier playing event sounds from various places and convert files calling 'beep_play' to use 'system_sound_play' and 'keyclick_click'. Event sound could be become themeable. git-svn-id: svn:// a1c6a512-1295-4272-9138-f99709370657
2011-06-29Commit FS#12150 - Fully-functional audio mixer - and finally whip old ↵Michael Sevakis1-3/+17
limitations about playback of voice and other sounds when paused. Channels are independent in state and amplitude. Fade on stop/pause is handled by the channel's volume control rather than global volume which means it now works from anywhere. Opens up the possibility of plugin sounds during music playback by merely adding an additional channel enum. If any PCM drivers were not properly modified, see one of the last comments in the task for a description of the simple change that is expected. Some params are tunable in firmware/export/pcm-mixer.h as well. git-svn-id: svn:// a1c6a512-1295-4272-9138-f99709370657
2011-05-25Workaround an occasional problem where album art or cuesheets might not be ↵Michael Sevakis1-0/+11
ready by the time the track change event is send which can result in the WPS not immediately being aware that the handles are ready. A better solution will be sought that hopefully doesn't require the additional event. git-svn-id: svn:// a1c6a512-1295-4272-9138-f99709370657
2011-05-20Fix FS#12118 - Voice UI has issues talking various issues in menus and in ↵Michael Sevakis1-1/+1
the file browswer. audio_pcmbuf_may_play should check play_status for !=PLAY_PAUSED, not ==PLAY_PLAYING so that PCM may auto-start when voicing out playback state. git-svn-id: svn:// a1c6a512-1295-4272-9138-f99709370657
2011-05-09Fix whitespace and some comment typosJeffrey Goode1-21/+21
git-svn-id: svn:// a1c6a512-1295-4272-9138-f99709370657
2011-04-27Hopefully fix red from r29785 - an #ifdef AB_REPEAT_ENABLE was left out.Michael Sevakis1-0/+2
git-svn-id: svn:// a1c6a512-1295-4272-9138-f99709370657
2011-04-27Commit FS#12069 - Playback rework - first stages. Gives as thorough as ↵Michael Sevakis1-1609/+2981
possible a treatment of codec management, track change and metadata logic as possible while maintaining fairly narrow focus and not rewriting everything all at once. Please see the rockbox-dev mail archive on 2011-04-25 (Playback engine rework) for a more thorough manifest of what was addressed. Plugins and codecs become incompatible. git-svn-id: svn:// a1c6a512-1295-4272-9138-f99709370657
2011-04-07Fix red and yellow. Move resume_index from mp3entry to playlist_info struct. ↵Andree Buschmann1-10/+1
Bump codec api. git-svn-id: svn:// a1c6a512-1295-4272-9138-f99709370657
2011-04-07Fix regressions of r29682. Update playlist index resume position when ↵Andree Buschmann1-0/+8
playlist changes (e.g. shuffling, inserting, removing, ...). git-svn-id: svn:// a1c6a512-1295-4272-9138-f99709370657
2011-04-06Fix FS#12043. Next track was resumed when pausing and shutting down the ↵Andree Buschmann1-0/+2
player in the last seconds of a track. git-svn-id: svn:// a1c6a512-1295-4272-9138-f99709370657
2011-03-14Fixed a typo. (Thanks Jeff!)Björn Stenberg1-1/+1
git-svn-id: svn:// a1c6a512-1295-4272-9138-f99709370657
2011-03-14Listen to and follow external Android volume changes. (Based on FS#11914 by ↵Björn Stenberg1-0/+2
Maurus Cuelenaere) git-svn-id: svn:// a1c6a512-1295-4272-9138-f99709370657
2011-03-06Remove malloc_buf references from playback.c since it's no longer used for ↵Michael Sevakis1-15/+8
anything and align the codec slack space buffer that is now use as the malloc buffer. git-svn-id: svn:// a1c6a512-1295-4272-9138-f99709370657
2011-02-28autoresume: Optimize playlist resume (manual, bookmark, or after power-on)Michael Hohmuth1-2/+2
The resume position coming from these sources takes precedence over autoresume. If we have such a resume offset, we don't have to wait for the database to produce a resume offset before we can start the codec. git-svn-id: svn:// a1c6a512-1295-4272-9138-f99709370657
2011-02-23Give playback engine better control over the codec. Codec simply follows ↵Michael Sevakis1-107/+248
commands and doesn't concern itself with audio state. Get track change notification in on the actual last buffer insert of the track because now audio simply waits for a track change notify from PCM on the last track and it must be sent reliably. This is still at an intermediate stage but works. Codecs and plugins become incompatible. git-svn-id: svn:// a1c6a512-1295-4272-9138-f99709370657
2011-02-16FS#11933: Check for external album art if embedded album art fails to load.Magnus Holmgren1-49/+56
git-svn-id: svn:// a1c6a512-1295-4272-9138-f99709370657
2011-02-10Always do proper mp3entry copying instead of using bufread directly. Add ↵Michael Sevakis1-18/+20
bufreadid3() helper. git-svn-id: svn:// a1c6a512-1295-4272-9138-f99709370657
2011-02-10audio_peek_track should copy the struct mp3entry instead of pointing ↵Michael Sevakis1-4/+9
directly into the buffer. Despite the dire warning, caller does in fact yield/sleep and its usage is too nonlocalized to control that reliably. git-svn-id: svn:// a1c6a512-1295-4272-9138-f99709370657
2011-02-09Disable buffering codecs (and code generally) on RaaA.Thomas Martitz1-4/+11
It's not useful to do it since you need to write back the code to disk to be able to load it from memory, it also requires writing to an executable directory. Keep it for the simulator for the sake of simulating. git-svn-id: svn:// a1c6a512-1295-4272-9138-f99709370657
2011-02-09Embedded album art support in MP3/ID3v2 tags.Thomas Martitz1-8/+27
- Support is limited to non-desync jpeg in id3v2 tags. Other formats (hopefully) follow in the future. - Embedded album art takes precedence over files in album art files. - No additional buffers are used, the jpeg is read directly from the audio file. Flyspray: FS#11216 Author: Yoshihisa Uchida and I git-svn-id: svn:// a1c6a512-1295-4272-9138-f99709370657
2011-02-08Add option to resume next track on automatic track changeMichael Hohmuth1-2/+7
Move autoresume setting into its own menu. Add option to customize which tracks should be resumed on automatic track change. Tracks can be selected based on their their file location or genre tag (comma-separated list of filename / genre substrings). git-svn-id: svn:// a1c6a512-1295-4272-9138-f99709370657
2011-02-08Do not update resume information and do not log statistics when aMichael Hohmuth1-0/+9
track is interrupted within the first 15 seconds. Regard a rewind to 0:00 as a track restart (updating resume position / playback statistics before the rewind and starting the 15 s delay). This allows skipping forward across an unplayed track without changing its resume offset. Also, it is possible to skip backward to the previous track after rewinding to the current track to 0:00 (pressing Left twice) without losing the current track's resume position. Initially contributed by Dave Slusher Caveats: * Works only for SWCODEC * Skipping forward without altering the resume position does not work when skip to outro has been turned on. * The 15-second window in which the resume offset will not be updated should start at the initial resume position, not at 0:00. This would allow skipping over partially played tracks without altering the resume position. git-svn-id: svn:// a1c6a512-1295-4272-9138-f99709370657
2011-01-02Commit part of FS#11748 by Michael Hohmuth. Adds support for automatically ↵Michael Giacomelli1-5/+35
resuming any song that is not played to completion at any point later in time, regardless of how many intermediate tracks are played. This is accomplished by expanding the database to record incompletely played tracks. Currently, the feature is simply on or off, in which case all tracks automatically resume, or they do not. The remainder of patches in the task expand this feature by allowing only certain file to automatically resume, only resuming in certain circumstances, etc but are not included until we reach agreement on what should be included. Additionally, the manual will need to be updated once we agree on the available settings. git-svn-id: svn:// a1c6a512-1295-4272-9138-f99709370657
2010-11-23Accept FS#11721 by Michael HohmuthJonathan Gordon1-0/+6
Fix Runtime statistics data not gathered when playback stops git-svn-id: svn:// a1c6a512-1295-4272-9138-f99709370657
2010-08-30don't cast to int when not neededRafaël Carré1-1/+1
git-svn-id: svn:// a1c6a512-1295-4272-9138-f99709370657
2010-08-30panicf() is declared in panic.hRafaël Carré1-0/+1
git-svn-id: svn:// a1c6a512-1295-4272-9138-f99709370657
2010-08-30audio_reset_buffer: check audiobuffer size not only in DEBUG buildsRafaël Carré1-5/+1
(DEBUG builds do not work/build anyway) Also use a shorter message git-svn-id: svn:// a1c6a512-1295-4272-9138-f99709370657
2010-08-11Fix FS#11175. playlist_peek() wasn't thread safe (due to a static filename ↵Magnus Holmgren1-1/+3
buffer), so frequent calls from the main thread would cause the audio thread to buffer the wrong track. git-svn-id: svn:// a1c6a512-1295-4272-9138-f99709370657