path: root/apps/playback.c
AgeCommit message (Collapse)AuthorFilesLines
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
2010-06-23playback.c: don't assume cacheline size is 16 bytesRafaël Carré1-6/+6
ideally all targets should define CACHEALIGN_BITS, for now we default it to 16 bytes if it's not specified Since the buffer is already aligned in playback.c no need to align it again in buffering.c git-svn-id: svn:// a1c6a512-1295-4272-9138-f99709370657
2010-06-21Rockbox as an application: Replace many occurences of #ifdef SIMULATOR with ↵Thomas Martitz1-3/+3
#if (CONFIG_PLATFORM & PLATFORM_HOSTED) (or equivalently). The simulator defines PLATFORM_HOSTED, as RaaA will do (RaaA will not define SIMULATOR). The new define is to (de-)select code to compile on hosted platforms generally. Should be no functional change to targets or the simulator. git-svn-id: svn:// a1c6a512-1295-4272-9138-f99709370657
2010-06-06Change cuesheet handling so the id3 info is not spoofed anymore. If ↵Jonathan Gordon1-2/+0
something wants the subtracks info it is easy to get to. This makes next track display in the skins show the next subtrack if we are in a cuesheet git-svn-id: svn:// a1c6a512-1295-4272-9138-f99709370657
2010-05-16FS#11263 - Radio Art support! %C and %Cl tags work in the radio screen and ↵Jonathan Gordon1-0/+1
Base Skin when the radio is running. put your station images in .rockbox/fmpresets/<preset name>.bmp or .jpg. Must be in preset mode and the preset name must match the filename git-svn-id: svn:// a1c6a512-1295-4272-9138-f99709370657
2010-05-12FS#10853 - Skin support in the radio screen! Check CustomWPS for the new tagsJonathan Gordon1-1/+1
git-svn-id: svn:// a1c6a512-1295-4272-9138-f99709370657
2010-04-24FS#11099 - Rewind before resumeMagnus Holmgren1-0/+13
git-svn-id: svn:// a1c6a512-1295-4272-9138-f99709370657
2010-04-17drop the playlist viewer stack usage by reading straiught off the buffer ↵Jonathan Gordon1-2/+3
instead of copying it. git-svn-id: svn:// a1c6a512-1295-4272-9138-f99709370657