Commit graph

614 commits

Author SHA1 Message Date
Michael Sevakis
31b7122867 Implement time-based resume and playback start.
This complements offset-based resume and playback start funcionality.
The implementation is global on both HWCODEC and SWCODEC.

Basically, if either the specified elapsed or offset are non-zero,
it indicates a mid-track resume.

To resume by time only, set elapsed to nonzero and offset to zero.
To resume by offset only, set offset to nonzero and elapsed to zero.

Which one the codec uses and which has priority is up to the codec;
however, using an elapsed time covers more cases:

* Codecs not able to use an offset such as VGM or other atomic
formats

* Starting playback at a nonzero elapsed time from a source that
contains no offset, such as a cuesheet

The change re-versions pretty much everything from tagcache to nvram.

Change-Id: Ic7aebb24e99a03ae99585c5e236eba960d163f38
Reviewed-on: http://gerrit.rockbox.org/516
Reviewed-by: Michael Sevakis <jethead71@rockbox.org>
Tested: Michael Sevakis <jethead71@rockbox.org>
2014-03-10 04:12:30 +01:00
Thomas Martitz
8142c68bd2 Fix red on monochrome.
Change-Id: Ice40c81d0d07f7ec2014697e4de446dcb956afe8
2014-01-22 17:31:24 +01:00
Thomas Martitz
6cb11764e0 skin_engine/backdrops: Have to reload default backdrops from setting when it changed.
When skins use the default backdrop (via %X(-) or no %X at all) and the setting
changes it needs to be reloaded, otherwise when changing themes the new theme
could show the backdrop from the previous theme. The same needs to be
done when re-selecting the same theme after USB because the backdrop file was
potentially overwritten.

Fixes FS#12892 and FS#12942.

Change-Id: Ic2d20740cc385fa99667ce8a71507dbda2efceaf
2014-01-22 16:58:58 +01:00
Thomas Martitz
4e1c690ea7 skin_engine: Stricter checking for x, y, width, height for bar tags.
Every theme that doesn't parse anymore now has broken values. I hope it's not
too many of them.

Change-Id: I6f52e55dc9197d0919f854240723a88f99c0b7da
2014-01-12 23:13:45 +01:00
Thomas Martitz
3ae73433ab skin_engine: New param "noborder" for the bar tags.
By specifying this param the bar will not have a border/box. Instead
the inner part that fills up is maximized on the bar area.

Note that this only affects bars using foreground and background colors,
not those constructed with images.

Change-Id: Ib8dd49ecbaf9e16b96de840f5f365871b73d4fa4
2014-01-12 15:22:29 +01:00
Thomas Martitz
c0a02c98c1 touchscreen/skin_engine: The touchregion handler didn't handle that vertical bars are bottom-up by default
Change-Id: I4e7fc451c7ba318acb110c587bff4306c393e09f
2014-01-12 11:02:02 +01:00
Thomas Martitz
d4d3f3c494 skin engine: Fix FS#12884.
The %Vf and %Vb tags change the colors for the rest of the viewport. This
requires the rest of the vp to be redrawn when they change due to a conditional.
The previous code did this redraw in all cases (conditional or not) which
led to visible blinking.

Change-Id: Ie59dfc6fe8ed76485a2a2bd7caf1315f1944c227
2014-01-10 21:54:06 +01:00
Thomas Martitz
99f3f77ee8 skin_engine: Pass string to put_line() via $t because they can be very large.
Change-Id: I02d6bf492bb42e173a7b436427e3cc3560d80183
2014-01-09 23:28:33 +01:00
Thomas Martitz
10a2e6738d Oops, pasted to the wrong place.
Change-Id: Icb07ddd04171699e997eca171bf8756b5fd9f024
2014-01-07 22:46:45 +01:00
Thomas Martitz
0e6d86e4fe Fix a few reds and yellows.
Change-Id: I9ad2aca494f2ea3ca5453082ec5491ec031f9ae5
2014-01-07 22:41:00 +01:00
Thomas Martitz
e1c7b3b8f7 lcd-16bit: Remove {lss,lse,lst}_pattern fields from struct viewport.
These where used for line styling during scrolling, which is now done in apps/,
The  viewport struct doesn't need to record these anymore.

Change-Id: I810d9dcb2644b00a798c6e75acab69c74a78e77f
2014-01-07 14:13:48 +01:00
Thomas Martitz
91ef65306b skin_engine: Adapt put_line().
This allows for code unification and removal of a workaround (STYLE_XY_PIXELS).

Change-Id: Ie92d377414cad943cdb06976af10b4f315f32710
2014-01-07 14:13:40 +01:00
Jonathan Gordon
124c969f49 Fix build error
Change-Id: I32e06cc41c70e225622c87539feaca5f92131065
2013-12-30 23:35:23 +11:00
Jonathan Gordon
00b3fd2a66 skin_engine: unload skin backdrops when the skins are reset
Hopefully this will fix various skin related bugs which happen
on usb plug/unplug!

Change-Id: Ie1d8378fca38dae02e42ed02a68bdb3663651b4d
2013-12-29 18:00:38 +11:00
Thomas Martitz
ec6258f936 fix some reds.
Change-Id: Iecb1305dbd1519434e0f476d2199e728b96091f9
2013-12-23 12:35:52 +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
Thomas Martitz
50eb528bc1 scroll_engine: Major rework to support pixel-based scrolling and scroll callbacks.
Much of the scrolling work is moved from lcd-bitmap-common to lcd-scroll.c,
a small scroll callback routine remains. This callback can potentially be
overridden by more extensive scrollers.

The callback also gets fed with pixel-based scrolling information, which
finally removes the strict line-based nature of the scroll engine. Along with
this is the change from scroll_stop_viewport_line() to scroll_stop_viewport_rect()
which works on a pixel-based rectangle instead of lines.

The ultimate goal is to move most of the scroll work to apps, which can
much better decide which line decorations to apply etc. This work is laying
the ground work.

Change-Id: I3b2885cf7d8696ddd9253d5a9a73318d3d42831a
2013-12-14 23:11:31 +01:00
Thomas Martitz
1c5d0b41ee scroll_engine: Rename scroll_stop* functions to be more consistent with the lcd api.
Change-Id: I8ada10b96bfb628cca0331689e8b936ae47c7e1c
2013-12-14 23:11:30 +01:00
Thomas Martitz
be5fadff94 skin_engine: Fix crash on skin_reset (e.g. on language change).
Change-Id: Ie2da1a1ba9d2dad76e2f1c45abd907c3ede4f56c
2013-06-23 20:55:46 +02:00
Thomas Martitz
4263f67e4b Fix warning (move variable into #ifdef section).
Change-Id: Ic6ba4b786eef00eab7f20abd5fbf2bcb8977993a
2013-06-09 21:08:49 +02:00
Thomas Martitz
770fadddd6 Fix reds (this code needs #ifdef HAVE_ALBUMART)
Change-Id: Ia50cd846d5451b0cb5cf3a6f8097ea9fe3b3c60a
2013-06-09 21:01:47 +02:00
Thomas Martitz
58b4e71d32 skin_engine: Fix albumart logic on skin reloading.
This logic checks whether the skin's albumart dimensions differ from the
previous skin to force rebuffering if necessary. This was broken since
a while as the necessary information was reset.

Change-Id: I3b9f3a819c6af202af8ad66c13742f704ce45ab1
Reviewed-on: http://gerrit.rockbox.org/476
Tested-by: Thomas Martitz <kugel@rockbox.org>
Reviewed-by: Thomas Martitz <kugel@rockbox.org>
2013-06-09 17:39:08 +02:00
Jonathan Gordon
3a13150a81 Revert "skin tags: fix the id3 track/disc numbers in conditionals"
This reverts commit a395a34671.
And fixes FS#12836 - need to rethink how to do this later.
2013-02-28 16:53:41 +11:00
Jonathan Gordon
d76dca165b checkwps: show a helpful error if the parser callback errors out
Change-Id: Ie3e35292ba8d74f0ff3d1bb3483a5e83aae0e6b6
2013-02-26 21:18:16 +11:00
Jonathan Gordon
657b91acfa skin engine: Relax the AA load width/height checks
d6c6c07 changed the AA load tag to make sure the image width/heights
fit in the viewport, Revert this because it doesn't actually make
sense to check it here.

Change-Id: I3fe4b074ef8fe88560f2f894ec651027ea3642f4
2013-02-26 20:47:46 +11:00
Jonathan Gordon
a395a34671 skin tags: fix the id3 track/disc numbers in conditionals
Fix the %in tag so %xd(a, %in) works as expected

Change-Id: I33dd3ae092a66b1363c9cf3afa08075e4534af7c
2013-02-21 21:14:58 +11:00
Alex Mayer
ee758c5a97 Theme Engine: Fix progress bar slider (FS#12823)
Fix the need to resize progress bar when using a slider.
Slider stays in bounds. Progress bar is not resized.
Works well with square sliders that should not overlap
edge of progress bar. also works with rounded sliders.

You can also make progress bar the full width of screen
while using a slider. Before if you would make the
progress bar the full width of the screen and add a slider
the progress bar would look like it was padded on both ends.

This fixes FS#12823

Change-Id: I60345efc5cd0f46286f2591ed032f0d9320d1c3e
Reviewed-on: http://gerrit.rockbox.org/402
Reviewed-by: Hayden Pearce <saint.lascivious@gmail.com>
Tested-by: Hayden Pearce <saint.lascivious@gmail.com>
Reviewed-by: Jonathan Gordon <rockbox@jdgordon.info>
2013-02-19 07:27:54 +01:00
Jonathan Gordon
aaf30651df skin_engine: Add a debug screen to display skin ram usage
Change-Id: Ida9c33211d9360ac88e30a2cf8df9f191bee8b45
2013-02-12 21:01:13 +11:00
Jonathan Gordon
e41aed633f Fix (c) notice which was apparently copy/pasted from a completly unrelated file
Change-Id: I465bd6a70e911c7a56213af82b4db64c25c294f7
2013-02-12 21:01:13 +11:00
Jonathan Gordon
948dbed0af remove unused members
Change-Id: Ic0a0d300c9b7701c9173121d9d36a4dd4a28d8bd
2013-02-11 00:11:25 +11:00
Jonathan Gordon
d6c6c0767c album art display: Fix RTL handling for the album art skin tag
AA was broken when an RTL language is used, causing it to not
be displayed.

Also fix th out of bounds handling when width/height > viewport

Change-Id: I4899cd32ec58107c987e3cc0e8df582963bdcf62
2013-01-15 23:10:37 +11:00
Jonathan Gordon
c500f4efe5 radio screen: Disable displaying radio art, FS#12797
With radioart enabled there appears to be buffer corruption when
the image is loaded causing the player to data abort in skin_render_line()

So, disable the code untill someone can fix it.

Change-Id: I6acf3f76ce38aa2784b1b24ed6da29a9c5bee479
2013-01-03 23:09:01 +11:00
Jonathan Gordon
685cf59008 9 segment bitmap drawing:
Use %x9(id) to draw an image in the whole current viewport using the
9 segment drawer (which draws the corners as normal and *tiles*
the middle segments to the needed width/height).

Future work is to make it scale instead of tile

Change-Id: Ic3ed1cad93f96091694801eb442e0da5a2401203
2012-12-09 17:11:19 +11:00
Jonathan Gordon
7c31ff2fb0 Fix skin engine error message
Change-Id: I2250be6d4e82cd5d91ed1a2c080e263dd7543129
2012-08-06 10:35:22 +10:00
Jonathan Gordon
9dd2eb49be skin_engine: Support percentages for viewport positioning
%V(0,50%,75%,50%,-) - make a viewport at x=0, y=half the lcd height,
75% lcd width and the remaining height (the other half) of the lcd.

Change-Id: If26ccb65e8dc52c9225f3fd6d7b222d770add0f0
Reviewed-on: http://gerrit.rockbox.org/184
Reviewed-by: Thomas Martitz <kugel@rockbox.org>
Tested-by: Thomas Martitz <kugel@rockbox.org>
Reviewed-by: Jonathan Gordon <rockbox@jdgordon.info>
2012-07-29 04:24:38 +02:00
Jonathan Gordon
68ee7aac6e skin_engine: Make pressing the setting bar touch region work
might need some tweaking, but works.

Change-Id: I0784cd4fe9996531da6cc275491ff3b4e83cdbcf
2012-07-06 14:28:34 +10:00
Jonathan Gordon
65f9df3083 skin_engine: Allow the %St() (setting) skin tag be used as a bar
%St(<setting name>) or %St(<bar tags>, setting, <setting name>)

Change-Id: I71396d683634d4d1ad2357018c4029ecb4229677
2012-07-05 23:30:06 +10:00
Jonathan Gordon
c413591e7e fix build warnings
Change-Id: Id5f0e84834f1cb74a317bb5653fdb6f665233345
2012-07-05 11:24:08 +10:00
Jonathan Gordon
d336eb30f8 skin_engine: Automatically create touch regions for skin bars
skin bars now automatically create the touch region the same size
as the bar on touchscreen targets. This means touches will
magically "just work" for reveresed bars (rtl or otherwise).

~5% padding is added on all 4 sides of the region rectangle but
this may need to be tweaked.

Please consider the 'progressbar' and 'volume' touchregion actions
to be deprecated.

Kudos to my new wife for figuring out the bleedingly obvious way to
do this!

Change-Id: I997a7bcaa70fce9885808aae27953c7676e9c2ff
2012-07-05 11:15:16 +10:00
Frank Gevaerts
21ddcbec66 CHARCELL doesn't have sbs support, so disable it properly.
This actually fixes a nullpointer dereference.

Change-Id: Ie3e153d72bcacdce46bfe5a514ff77aebdfd7225
2012-06-19 21:53:29 +02:00
Bertrik Sikken
d023bf0f5d Fix checks on buflib allocated handles (0 is not a valid handle value)
Change-Id: I8fdc5a59a5062f40a431cd49971390e21631b8ec
2012-06-10 17:15:47 +02:00
Jonathan Gordon
7a009276bc Fix FS#12674 - %ax() doesnt mirror viewport correctly
Change-Id: I10c933542037eeedc9c4be74b3d43a1430ec05b2
2012-05-30 21:17:40 +10:00
Jonathan Gordon
7909bf039f (hopefully) Fix FS#12639 and other skin related buflib corruption issues.
Kudos to funman for figuring out the problem - skin_find_item() rather
stupidly uses the global skin_buffer variable in skin_parser.c which is
fine in the parser EXCEPT it gets changed in skin_render when the sbs
is being redrawn while another skin is loading, so fix this by makeing
skin_find_item() use a local data pointer so a skin_render() during
parsing won't break anything.

Change-Id: I80e1c0efe569c18225e5772159c18ebb21e07332
2012-05-16 22:33:40 +10:00
Nils Wallménius
d29a11b7a8 Rename HAVE_PITCHSCREEN to HAVE_PITCHCONTROL
Also move the definition to config.h

Change-Id: I36bb5020c5e06b2344292bc05e8c13ccc7a6a1ff
Reviewed-on: http://gerrit.rockbox.org/234
Reviewed-by: Nils Wallménius <nils@rockbox.org>
2012-05-09 14:32:38 +02:00
Rafaël Carré
aaf9a1be49 get_image_filename() return value is never used 2012-05-06 23:00:52 -04:00
Rafaël Carré
675f171cf1 skin_parser: simplify skin_buffer_alloc
- no need to cast void * return value (it is not C++)
- use sizeof(*var) instead of sizeof(struct foobar), it is shorter and will
  stay correct if the type is changed but forgotten in the sizeof()
2012-05-06 22:43:21 -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
57a20d2d63 Make DSP's replaygain independent of global_settings.
Moves replaygain definitions to lib/rbcodec/dsp/dsp_misc.h.
Intermediate functions in misc.c handle any adjustment and calling
the rbcodec APIs.

Change-Id: I9f03561bca9aedd13760cf19c4e19aa3c68e7024
Reviewed-on: http://gerrit.rockbox.org/140
Reviewed-by: Michael Sevakis <jethead71@rockbox.org>
2012-04-30 22:47:37 +02:00
Michael Sevakis
56f17c4164 Make rbcodec/dsp includes more specific.
Change-Id: Idb6af40df26f5b8499a40e8b98602261ef227044
2012-04-29 17:31:30 -04:00
Jonathan Gordon
b2202a3d7c skin_engine: Allow negative numbers for the start offset in %ss
i.e %ss(-1, -, %ia) will get the last letter in the %ia tag

Change-Id: I6b2764d30c072b549e7424fc6e847ec48850b46a
2012-03-27 23:42:00 +11:00