Commit graph

198 commits

Author SHA1 Message Date
Thomas Martitz
dac40fdd60 talk: Add debug menu entry to view statistics about talk engine.
This engine includes voicefile, memory usage and cache
hits/misses for TALK_PARTIAL_LOAD.

Change-Id: I331981ddda39ea30c57b4b74504accb3c556c3b9
2014-02-02 19:40:39 +01:00
Thomas Martitz
57000b513b talk: Make talk_voice_required() local to talk.c
Change-Id: I3a04760d550efab7f011a917597ef29c039b05bd
2014-02-02 19:40:39 +01:00
Thomas Martitz
60dea95cad talk/hwcodec: Do always free the clip buffer in shrink_callback().
This is necessary because when voice is active audio is disabled. But only
audio was able to shrink it's buffer to let other memory allocs succeed.
talk needs to be able to do this too when it owns the audio buffer exclusively.

Change-Id: Idea8ab90da7169f977c0c766cccb42c4fe6d6e81
2014-02-02 19:40:39 +01:00
Thomas Martitz
efc20ec164 talk: When no voice file is loaded don't even attempt to load the clip, it's hopeless.
Change-Id: I420155d7f01ca0ea301c0678ac7245d251d365b0
2014-01-27 10:05:48 +01:00
Thomas Martitz
543027564c hwcodec/talk.c: Give the thumbnail buffer regardless of the talk buffer policy.
When the policy is not set, it'll by default not give the clip buffer away.
Callers of core_alloc_maximum() suffer from this. However, the thumbnail
buffer can be easily freed when needed because nothing needs to be
reloaded from disk when it is reallocated (thumbnail clips are loaded on
demand, when in the file browser). Do this to give core_alloc_maximum() callers
a better chance to succeed with the default talk buffer policy.

Change-Id: I8c0da29c520612ca903f6c930bd7c74ae97eca3b
2014-01-26 19:14:47 +01:00
Thomas Martitz
5827e41904 hwcodec: core_alloc_maximum() returned 0 bytes if talk.c controls the audio buffer.
On hwcodec talk.c has the entire audio buffer (not just parts of it), therefore
it must give up everything and cannot count on core_alloc_maximum() to return
the remaining space. This is equivalent to it was handled before 22e802e.

You could probaby do smarter and shrink for example the .talk clip buffer
but is it really worth it?

Change-Id: Idc3431c59fb41b05338559c615093358c5d8ed9b
2013-12-24 01:16:10 +01:00
Thomas Martitz
a4d1849e24 Fix yellow.
Change-Id: Ib46e4d0896de4227a508abf5806c00ec3d59db51
2013-12-23 12:54:36 +01:00
Thomas Martitz
22e802e800 playback,talk: Share audiobuffer via core_alloc_maximum().
This fixes the radioart crash that was the result of buffering.c working
on a freed buffer at the same time as buflib (radioart uses buffering.c for the
images). With this change the buffer is owned by buflib exclusively so this
cannot happen.

As a result, audio_get_buffer() doesn't exist anymore. Callers should call
core_alloc_maximum() directly. This buffer needs to be protected as usual
against movement if necessary (previously it was not protected at all which
cased the radioart crash), To get most of it they can adjust the willingness of
the talk engine to give its buffer away (at the expense of disabling voice
interface) with the new talk_buffer_set_policy() function.

Change-Id: I52123012208d04967876a304451d634e2bef3a33
2013-12-23 12:17:38 +01:00
Dominik Riebeling
de6f96229b Add comment to clarify calculation.
Change-Id: Ie0eaa2bb1c672c974246b3e97b5d5f3b9e1f9925
2012-06-05 22:53:21 +02:00
Michael Sevakis
652b39b9e1 More snafu fix. Need a couple more patchups for now.
Must restore talk buffer explicitly when not taking it and promote
the buffer state.

Change-Id: Ia0341ede05837e6e94885a9ad62460c415ec6f00
2012-05-24 20:59:05 -04:00
Michael Sevakis
4b97437c23 Correct snafu in talk.c
When allocating the voice buffer, it's supposed to start at the beginning
of the audio buffer, not at the end of the voice buffer. ;-D

Might clear up a thing or two.

Change-Id: I94796ff21090bcc56813cdc569957a1a9178abcd
2012-05-24 20:47:40 -04:00
Michael Sevakis
da6cebb6b0 Use buflib for the allocation of voice PCM resources.
Buffers are not allocated and thread is not created until the first
call where voice is required.

Adds a different callback (sync_callback) to buflib so that other
sorts of synchonization are possible, such as briefly locking-out the
PCM callback for a buffer move. It's sort of a messy addition but it
is needed so voice decoding won't have to be stopped when its buffer
is moved.

Change-Id: I4d4d8c35eed5dd15fb7ee7df9323af3d036e92b3
2012-05-02 17:22:28 -04:00
Michael Sevakis
d18a5cad7f Tweak paramters of mp3_play_data and callback.
Use generic void * and size_t and make mp3_play_data and its callback
agree on types. Use mp3_play_callback_t instead of prototyping
right in the function call (so it's not so messy to look at). Change
doesn't appear to require plugin API version increment.

Change-Id: Idcab2740ee316a2beb6e0a87b8f4934d9d6b3dd8
2012-03-04 14:50:47 -05:00
Boris Gjenero
bda8a963ad Add conditionals for functions only needed on SWCODEC targets.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@31296 a1c6a512-1295-4272-9138-f99709370657
2011-12-15 20:58:14 +00:00
Jens Arnold
ae601954aa Make usage of TALK_PARTIAL_LOAD actually Ondio specific. MMC is not always slow.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@30917 a1c6a512-1295-4272-9138-f99709370657
2011-11-06 14:25:33 +00:00
Jens Arnold
544fb6a5a4 Voice related fixes and cleaup
* Fix .talk clips on hwcodec. Voice does have the entire audio buffer available there.
* Get rid of the separate TALK_PROGRESSIVE_LOAD in favour of the more advanced
  TALK_PARTIAL_LOAD i.e. use the latter on the Ondios as well. This gets rid of quite
  some ifdefing, and has the advantage that the voice file can be larger than the buffer
  (at a slight binsize cost).


git-svn-id: svn://svn.rockbox.org/rockbox/trunk@30916 a1c6a512-1295-4272-9138-f99709370657
2011-11-06 13:58:17 +00:00
Thomas Martitz
79ffd047ff Fix warning and typos.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@30912 a1c6a512-1295-4272-9138-f99709370657
2011-11-06 12:07:33 +00:00
Thomas Martitz
7baa450738 Fix broken voice when .talk files are used and voice buffer calculation.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@30909 a1c6a512-1295-4272-9138-f99709370657
2011-11-06 12:01:38 +00:00
Thomas Martitz
59dc87db7d Properly initialize variable to get voice going again. GCC didn't catch this one introduced r30840.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@30894 a1c6a512-1295-4272-9138-f99709370657
2011-11-03 21:54:26 +00:00
Thomas Martitz
5d5177931e Fix FS#12241. Voice stopped working after audio_get_buffer() calls.
Since r30308 the talk buffer was set to NULL if e.g. a plugin called
audio_get_buffer() to steal the talk buffer. Since there's no audio_release_buffer() kind of function
the talk buffer was never set back again.
When trying to talk try to get the audio buffer with audio_get_buffer() as well,
which works until the audio buffer gets properly reinitialized.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@30840 a1c6a512-1295-4272-9138-f99709370657
2011-10-26 18:31:19 +00:00
Bertrik Sikken
57304d1e0c Make a few local functions static
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@30744 a1c6a512-1295-4272-9138-f99709370657
2011-10-12 20:47:41 +00:00
Thomas Martitz
d0b72e2590 GSoC/Buflib: Add buflib memory alocator to the core.
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://svn.rockbox.org/rockbox/trunk@30380 a1c6a512-1295-4272-9138-f99709370657
2011-08-30 14:01:33 +00:00
Thomas Martitz
fbde6baab5 Move stuff a bit down to fix red on TALK_PARTIAL_LOAD.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@30339 a1c6a512-1295-4272-9138-f99709370657
2011-08-22 10:23:11 +00:00
Thomas Martitz
b66d07a9e3 Fix red on hwcodec.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@30338 a1c6a512-1295-4272-9138-f99709370657
2011-08-22 09:56:58 +00:00
Thomas Martitz
29abe81889 Talk: Unify hwcodec and swcodec handling.
Do it the hwcodec way which doesn't need a buffer_alloc(). The buffer for the
.talk files is now allocated together with the voicefile buffer.

Should also fix a panic when the .talk file buffer was allocated late at runtime.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@30335 a1c6a512-1295-4272-9138-f99709370657
2011-08-21 15:05:57 +00:00
Thomas Martitz
89c8cbebf2 Add change that got lost somehow in r30308.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@30312 a1c6a512-1295-4272-9138-f99709370657
2011-08-14 15:51:08 +00:00
Thomas Martitz
b8fabfef84 Fix remaining problems.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@30311 a1c6a512-1295-4272-9138-f99709370657
2011-08-14 15:43:43 +00:00
Thomas Martitz
8a701e5488 Fix errors and warnings.
The buffer_offset paramter of audio_init_recording() is removed as it
was unused in both implementations.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@30310 a1c6a512-1295-4272-9138-f99709370657
2011-08-14 15:37:05 +00:00
Thomas Martitz
d1322b7159 GSoC/Buflib: Replace all direct accesses to audiobuf with buffer API functions.
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://svn.rockbox.org/rockbox/trunk@30308 a1c6a512-1295-4272-9138-f99709370657
2011-08-14 15:13:00 +00:00
Andree Buschmann
460d54977a FS#11939: Simplify talk_time_unit().
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@29347 a1c6a512-1295-4272-9138-f99709370657
2011-02-20 15:23:18 +00:00
Andree Buschmann
e3abdb1a52 Undo unwanted commit r29310.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@29311 a1c6a512-1295-4272-9138-f99709370657
2011-02-15 20:10:50 +00:00
Andree Buschmann
237ca504e1 All AAC-HE files will double the frame sample count, not only AAC-HE files with SBR upsampling. This change fixes issues with some m4a files reported in the forums.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@29310 a1c6a512-1295-4272-9138-f99709370657
2011-02-15 20:00:28 +00:00
Andree Buschmann
c0b0cd5905 Do not fiddle with audiobuf in talk_init() when no voice file is present. Avoids stopping of audio playback when changing languages without using voice files. Closes FS#10479.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@29300 a1c6a512-1295-4272-9138-f99709370657
2011-02-13 21:30:13 +00:00
Andree Buschmann
5d849a963e Clean up multiple definitions of RAM size. Remove -DMEM (make) and MEM (code), use the already defined MEMORYSIZE instead.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@29189 a1c6a512-1295-4272-9138-f99709370657
2011-02-02 17:43:32 +00:00
Rafaël Carré
ca91d0fd7a FS#11587 : voice for SWCODEC and low memory
On these targets the full voice file can't be loaded so only load 64
clips at a time (the size of the queue)
Voice now works on clipv1

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@27962 a1c6a512-1295-4272-9138-f99709370657
2010-09-01 00:08:50 +00:00
Jeffrey Goode
9e28863669 lang.h voice comments were off by 1, fixed
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@26296 a1c6a512-1295-4272-9138-f99709370657
2010-05-26 03:51:13 +00:00
Jeffrey Goode
7c52a17b9f Oops, didnt mean to enable logf in talk.c
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@26295 a1c6a512-1295-4272-9138-f99709370657
2010-05-26 03:14:30 +00:00
Jeffrey Goode
fe0f5baa73 Fix crash in talk.c logf line when outputting voice only clips, more comments in lang.h
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@26294 a1c6a512-1295-4272-9138-f99709370657
2010-05-26 03:11:00 +00:00
Rafaël Carré
338e4d76aa fix inverted logic in r26047: voice works again
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@26049 a1c6a512-1295-4272-9138-f99709370657
2010-05-15 11:19:25 +00:00
Rafaël Carré
77ec4b301b talk_init() : don't try to load the voice file if it won't fit in memory
now playback still works if voicing is enabled on the clipv1

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@26047 a1c6a512-1295-4272-9138-f99709370657
2010-05-15 10:05:47 +00:00
Thomas Martitz
50a6ca39ad Move c/h files implementing/defining standard library stuff into a new libc directory, also standard'ify some parts of the code base (almost entirely #include fixes).
This is to a) to cleanup firmware/common and firmware/include a bit, but also b) for Rockbox as an application which should use the host system's c library and headers, separating makes it easy to exclude our files from the build.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@25850 a1c6a512-1295-4272-9138-f99709370657
2010-05-06 21:04:40 +00:00
Jeffrey Goode
433cad6446 Add logf line to talk.c
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@25808 a1c6a512-1295-4272-9138-f99709370657
2010-05-04 14:30:47 +00:00
Bertrik Sikken
2ac91dcd98 Kill some global variables
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@24888 a1c6a512-1295-4272-9138-f99709370657
2010-02-24 19:40:45 +00:00
Jeffrey Goode
9a4420bf96 FS#10739: playback.c code split
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@23444 a1c6a512-1295-4272-9138-f99709370657
2009-10-31 19:17:36 +00:00
Nils Wallménius
3d4701a6e4 FS#10080
* Move strncpy() from core to the pluginlib
* Introduce strlcpy() and use that instead in most places (use memcpy in a few) in core and some plugins
* Drop strncpy() from the codec api as no codec used it
* Bump codec and plugin api versions


git-svn-id: svn://svn.rockbox.org/rockbox/trunk@21863 a1c6a512-1295-4272-9138-f99709370657
2009-07-14 13:57:45 +00:00
Bertrik Sikken
0023943439 Fix duplicate #includes
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@20977 a1c6a512-1295-4272-9138-f99709370657
2009-05-17 14:50:19 +00:00
Frank Gevaerts
19d1cacb1a cleanup storage defines
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@18950 a1c6a512-1295-4272-9138-f99709370657
2008-10-31 21:25:04 +00:00
Björn Stenberg
51b45d5602 Split id3.c/h into metadata.c/h and metadata/mp3.c. Updated all references. Moved mp3data.c/h from firmware to apps.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@18814 a1c6a512-1295-4272-9138-f99709370657
2008-10-15 06:38:51 +00:00
Nils Wallménius
b82fd56e0f Delete unused function, const police, minor style police
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@18664 a1c6a512-1295-4272-9138-f99709370657
2008-09-29 16:29:51 +00:00
Stéphane Doyon
3eb76d053d talk.c helper functions to voice a filename, in a more generic way
than from tree.c
Voice a file or dir's thumbnail from path components,
or spell last path component. Ability to prefix the thumbnail or
spelling with some talk ids.

This is the talk_file patch from FS#6323, just refactored a bit.


git-svn-id: svn://svn.rockbox.org/rockbox/trunk@18048 a1c6a512-1295-4272-9138-f99709370657
2008-07-15 14:55:31 +00:00