Antonio Ospite [Thu, 14 Mar 2013 18:48:14 +0000 (19:48 +0100)]
am7xxx-play: switch to avcodec_encode_video2()
The code can now compile with -Werror=deprecated-declarations
Antonio Ospite [Thu, 14 Mar 2013 18:30:07 +0000 (19:30 +0100)]
am7xxx-play: remove an unreachable break
Antonio Ospite [Thu, 14 Mar 2013 11:28:32 +0000 (12:28 +0100)]
am7xxx-play: rename 'packet' to 'in_packet'
This is in preparation to use an 'out_packet' for the conversion to
avcodec_encode_video2().
Antonio Ospite [Thu, 14 Mar 2013 10:22:05 +0000 (11:22 +0100)]
am7xxx: fix coding style
Keep logical operators on the current line when continuing to another line.
Antonio Ospite [Thu, 14 Mar 2013 10:13:16 +0000 (11:13 +0100)]
contrib: add the am7xxx-play-window.sh script
Antonio Ospite [Mon, 17 Dec 2012 22:54:51 +0000 (23:54 +0100)]
Merge branch 'fix-devinfo-for-PicoPix'
Antonio Ospite [Fri, 7 Dec 2012 10:59:32 +0000 (11:59 +0100)]
am7xxx: make libam7xxx work with Philips/Sagemcom PPX projectors
Philips/Sagemcom PicoPix projectors require that the DEVINFO packet is
the first one to be sent to the device in order for it to successfully
return the correct device information.
Call am7xxx_get_device_info() from am7xxx_open_device() to fulfill the
requirement from above. The device info will be cached by
am7xxx_get_device_info() and further calls to the latter will return the
correct data too.
Antonio Ospite [Fri, 7 Dec 2012 10:51:16 +0000 (11:51 +0100)]
am7xxx: cache device info in am7xxx_get_device_info()
Request the actual device info from the device only when there is not
a cached version of it already.
This serves two purposes:
1. Cover the case when some firmwares provide useful device info
only under some conditions and spit out bogus data instead when
these conditions are not met.
2. Speed up am7xxx_get_device_info() as the USB communication is
performed only once. AFAWN the device info does not change
throughout the life of an am7xxx_device.
Antonio Ospite [Fri, 7 Dec 2012 11:22:45 +0000 (12:22 +0100)]
am7xxx: detect unexpected responses to AM7XXX_PACKET_TYPE_DEVINFO requests
Under some conditions, some devices like Philips/Sagemcom PPX projectors
return a strangely small packet (e.g. an AM7XXX_PACKET_TYPE_POWER with
header_data_len == 2) in reply to an AM7XXX_PACKET_TYPE_DEVINFO, hence
NOT providing useful device info.
Antonio Ospite [Tue, 4 Dec 2012 10:46:12 +0000 (11:46 +0100)]
Fix an error when compiling with both -O0 and -Wp,-D_FORTIFY_SOURCE=2
Fix the following error happening with the gcc shipped on some Ubuntu
versions:
In file included from /usr/include/stdio.h:27:0,
from /home/pedro/lib/libam7xxx/src/am7xxx.c:19:
/usr/include/features.h:330:4: error: #warning _FORTIFY_SOURCE
requires compiling with optimization (-O) [-Werror=cpp]
cc1: all warnings being treated as errors
make[2]: *** [src/CMakeFiles/am7xxx.dir/am7xxx.c.o] Error 1
make[1]: *** [src/CMakeFiles/am7xxx.dir/all] Error 2
make: *** [all] Error 2
Reported-by: Petr Certik <petr@certik.cz>
Antonio Ospite [Wed, 14 Nov 2012 11:31:01 +0000 (12:31 +0100)]
am7xxx: don't mention AM7XXX_DIRECTION_OUT in read_header()
The validity check in read_header() looks for:
h->direction == AM7XXX_DIRECTION_IN
When this is false (direction is _not_equal_ to AM7XXX_DIRECTION_IN) it
cannot be said for sure that the direction field value is going to
really be AM7XXX_DIRECTION_OUT, technically the device may have put
anything there.
So, just report what happens don't try to overguess.
Antonio Ospite [Wed, 14 Nov 2012 11:08:07 +0000 (12:08 +0100)]
am7xxx: add a note on the symmetry of read_header() and send_header()
In read_header we do:
1. read data
2. unserialize header
3. validity check
4. dump header
In send_header:
1. dump header
2. validity check (we skip it, actually)
3. serialize header
4. send data
Antonio Ospite [Wed, 14 Nov 2012 11:01:34 +0000 (12:01 +0100)]
am7xxx: assign device_list next to its first use
This makes the code a little more readable.
Antonio Ospite [Wed, 14 Nov 2012 10:00:58 +0000 (11:00 +0100)]
am7xxx: print text description of the 'direction' field
Print "IN" or "OUT" (or "UNKNOWN") when dumping the direction field of
the header, this makes it easier to follow the communication in the
debug output.
Antonio Ospite [Sun, 14 Oct 2012 16:23:04 +0000 (18:23 +0200)]
picoproj: clarify that when AM7XXX_ZOOM_TEST is set no image gets sent
Antonio Ospite [Sun, 14 Oct 2012 16:03:54 +0000 (18:03 +0200)]
am7xxx: add support for Philips/SagemCom PicoPix PPX 2055
Antonio Ospite [Mon, 17 Sep 2012 08:07:55 +0000 (10:07 +0200)]
examples: support multiple devices
Expose a '-d <index>' option to set the device index, this way multiple
devices can be used.
Tested-by: Konstantin Lohmann <konstl@konstl.com>
Antonio Ospite [Mon, 17 Sep 2012 08:10:07 +0000 (10:10 +0200)]
doc: update Doxygen configuration
Use "doxygen -s -u doc/Doxyfile.in"; the update fixes some warnings
when building the documentation with Doxygen 1.8:
warning: Tag `SHOW_DIRECTORIES' at line 79 of file Doxyfile has become obsolete.
To avoid this warning please remove this line from your configuration file or upgrade it using "doxygen -u"
warning: Tag `HTML_ALIGN_MEMBERS' at line 149 of file Doxyfile has become obsolete.
To avoid this warning please remove this line from your configuration file or upgrade it using "doxygen -u"
warning: Tag `USE_INLINE_TREES' at line 176 of file Doxyfile has become obsolete.
To avoid this warning please remove this line from your configuration file or upgrade it using "doxygen -u"
Antonio Ospite [Fri, 27 Jul 2012 10:57:44 +0000 (12:57 +0200)]
Merge branch 'am7xxx_set_zoom_mode'
Antonio Ospite [Thu, 21 Jun 2012 08:12:14 +0000 (10:12 +0200)]
contrib: add a test image to show how zoom modes work
The image can be converted to a suitable JPEG with 'convert' from
imagemagick:
$ convert libam7xxx_test_image_800x480.svg libam7xxx_test_image_800x480.jpg
Antonio Ospite [Thu, 21 Jun 2012 08:41:42 +0000 (10:41 +0200)]
am7xxx-play: make the help about power mode more consistent
Use the same terminology used in the Doxygen documentation, "power mode"
instead of "power level".
Print values using "%d" instead of "%x".
Antonio Ospite [Wed, 20 Jun 2012 13:32:13 +0000 (15:32 +0200)]
picoproj: make the help about power mode more consistent
Use the same terminology used in the Doxygen documentation, "power mode"
instead of "power level".
Print values using "%d" instead of "%x".
Antonio Ospite [Wed, 20 Jun 2012 11:13:20 +0000 (13:13 +0200)]
am7xxx: update signature and documentation of am7xxx_set_power_mode()
In the signature, rename the 'mode' parameter to 'power' in order to
show better what it is about, after all in am7xxx_set_zoom_mode() the
correspondent parameter has been called zoom.
In the documentation tells about the new guesses about what the expected
behavior after AM7XXX_POWER_OFF is.
Antonio Ospite [Thu, 21 Jun 2012 08:32:32 +0000 (10:32 +0200)]
am7xxx-play: support setting the zoom mode
Antonio Ospite [Mon, 20 Feb 2012 12:43:03 +0000 (13:43 +0100)]
picoproj: support setting the zoom mode
Antonio Ospite [Mon, 20 Feb 2012 12:37:20 +0000 (13:37 +0100)]
am7xxx: implement support for the AM7XXX_PACKET_TYPE_ZOOM
The info has been guessed from the windows drivers, it may be imprecise
and incomplete.
Antonio Ospite [Sun, 8 Jul 2012 21:17:20 +0000 (23:17 +0200)]
Merge remote-tracking branch 'origin/rettichschnidi'
Reto Schneider [Sun, 8 Jul 2012 20:56:08 +0000 (22:56 +0200)]
Add missing break.
Reto Schneider [Thu, 5 Jul 2012 22:48:31 +0000 (00:48 +0200)]
Fix typo.
Antonio Ospite [Fri, 29 Jun 2012 11:22:55 +0000 (13:22 +0200)]
contrib: add an example of how to start displaying images automatically
Add an example of how an am7xxx-autodisplay functionality might be
implemented: some udev rules call a script which resizes the screen and
then call am7xxx-play.
Antonio Ospite [Thu, 21 Jun 2012 08:23:28 +0000 (10:23 +0200)]
contrib: add other supported devices to 55-am7xxx.rules
Antonio Ospite [Wed, 20 Jun 2012 13:01:02 +0000 (15:01 +0200)]
doc: update the list of supported devices
Antonio Ospite [Tue, 12 Jun 2012 10:48:28 +0000 (12:48 +0200)]
am7xxx: rename am7xxx_header.unknown0 to am7xxx_header.direction
This field should indicate the direction of the communication, according to
the USB dumps it is 0 for outgoing packets and 1 for incoming packets.
Antonio Ospite [Sat, 9 Jun 2012 10:21:36 +0000 (12:21 +0200)]
README.asciidoc: add Aiptek PocketCinema T25 to the AM7XXX devices list
Matti Koskinen [Sat, 9 Jun 2012 10:19:28 +0000 (12:19 +0200)]
am7xxx: add support for Aiptek PocketCinema T25
Antonio Ospite [Tue, 22 May 2012 14:34:29 +0000 (16:34 +0200)]
README.asciidoc: add info about running am7xxx-play.exe on Windows
Antonio Ospite [Tue, 22 May 2012 14:33:44 +0000 (16:33 +0200)]
HACKING.asciidoc: add info about compiling am7xxx-play for Windows
Antonio Ospite [Tue, 22 May 2012 14:23:10 +0000 (16:23 +0200)]
am7xxx-play: check if strtok_r is available
On Windows systems, where strtok_r is not available, strtok_s could be
used but this needs the C Run-Time library (msvcrt.dll or msvcr80.dll)
and we can't distribute it.
So for now, when strtok_r is not available, just print a message to warn
the user that the '-o' options is not available.
Antonio Ospite [Tue, 22 May 2012 14:21:25 +0000 (16:21 +0200)]
am7xxx-play: check if sigaction is available
If sigaction is not available just stub out the set_signal_handler()
function.
Antonio Ospite [Tue, 22 May 2012 14:16:15 +0000 (16:16 +0200)]
am7xxx-play: add a fallback definition for ENOTSUP
Antonio Ospite [Tue, 22 May 2012 13:42:26 +0000 (15:42 +0200)]
am7xxx-play: get the framerate from the video stream
When setting the output codec get the time_base (which indicates the
framerate) from the video stream, not from the input codec context, this
is the correct way to do it.
On some systems (Windows) the time_base from the input codec context is
set different from the one of the video stream, and timebase.num ends up
being 0 which results in the output codec initialization failing with
the message "framerate not set".
Antonio Ospite [Tue, 22 May 2012 13:29:55 +0000 (15:29 +0200)]
mingw_cross_toolchain.cmake: set the MINGW variable to True
Setting MINGW to True is important to let cmake set some variables such
as CMAKE_FIND_LIBRARY_PREFIXES and CMAKE_FIND_LIBRARY_SUFFIXES from
Platform/Windows-GNU.cmake
I wasted a lot of time on this with find_library() not finding libav
libraries compiled for MingW whith the ".dll.a" suffix.
Antonio Ospite [Tue, 15 May 2012 08:35:05 +0000 (10:35 +0200)]
HACKING.asciidoc: add info about getting and building libam7xxx
Some Ubuntu user asked for a step by step guide.
Antonio Ospite [Mon, 14 May 2012 12:42:44 +0000 (14:42 +0200)]
README.asciidoc: add Royaltek PJU-2100 to the AM7XXX based devices list
The drivers for this device look like the same "EZ Display" bundle as
some other models.
Richard Wisenoecker [Sun, 13 May 2012 08:25:52 +0000 (10:25 +0200)]
am7xxx: add support for Acer C112
Antonio Ospite [Fri, 11 May 2012 19:52:29 +0000 (21:52 +0200)]
README.asciidoc document how to get libam7xx running on MS Windows
Antonio Ospite [Fri, 11 May 2012 19:50:36 +0000 (21:50 +0200)]
Add a simple usb_mode_switch clone for am7xxx devices
Add am7xxx_mode_switch, this is will be used on systems where
usb_mode_switch is not easily available (e.g. MS Windows).
Antonio Ospite [Thu, 10 May 2012 15:00:27 +0000 (17:00 +0200)]
TODO: mention the plan about GStreamer
Antonio Ospite [Thu, 10 May 2012 14:02:16 +0000 (16:02 +0200)]
Merge branch 'mingw-port'
Antonio Ospite [Thu, 10 May 2012 13:46:47 +0000 (15:46 +0200)]
HACKING.asciidoc: add a section to explain Windows cross compilation
Antonio Ospite [Thu, 10 May 2012 13:29:56 +0000 (15:29 +0200)]
Add a CMAKE_TOOLCHAIN_FILE to compile with MinGW
This is inspired by this blog post by Sylvain Beucler:
http://blog.beuc.net/posts/Cross-compiling_with_CMake/
Antonio Ospite [Thu, 10 May 2012 12:58:26 +0000 (14:58 +0200)]
Don't set -pedantic-errors in CMAKE_C_FLAGS, it breaks check_symbol_exists()
Set -pedantic-errors in more specific variables like
CMAKE_C_FLAGS_DEBUG, CMAKE_C_FLAGS_RELEASE and
CMAKE_C_FLAGS_RELWITHDEBINFO.
See also http://public.kitware.com/Bug/view.php?id=13208
Antonio Ospite [Thu, 10 May 2012 10:13:03 +0000 (12:13 +0200)]
picoproj: replace mmap() with more portable file stream operations
This makes picoproj compile for Windows, for instance.
Antonio Ospite [Thu, 10 May 2012 10:11:33 +0000 (12:11 +0200)]
picoproj: fix a typo
We have no am7xxx_get_info(), maybe this is a leftover of some older
unreleased API version.
Antonio Ospite [Thu, 10 May 2012 10:10:45 +0000 (12:10 +0200)]
picoproj: issue a warning when passing "-f" more than once
Antonio Ospite [Thu, 10 May 2012 07:34:01 +0000 (09:34 +0200)]
am7xxx: don't look for the math library when compiling for Windows
Antonio Ospite [Thu, 10 May 2012 07:01:40 +0000 (09:01 +0200)]
am7xxx: MinGW does not have endian.h, provide fallbacks
Provide fallbacks only for the functions used in the code, and assume
Windows is always using little endian.
Antonio Ospite [Thu, 10 May 2012 06:16:04 +0000 (08:16 +0200)]
am7xxx: fix setting the USB configuration
libusb_set_configuration() expects the bConfigurationValue of the
configuration we wish to activate as the second parameter.
The am7xxx devices we know have bConfigurationValue=2 for the first and
only configuration available in the descriptor, use this value.
While the libusb linux back-end looks forgiving on this one, without this
change the WinUSB back-end will fail with an error like:
C:\Documents and Settings\Administrator\Desktop\win>picoproj.exe -f image.jpg -F 1 -l 5 -W 800 -H 480
JPEG format
scan_devices: am7xxx device found, index: 0, name: Acer C110
[timestamp] [threadID] facility level [function call] <message>
--------------------------------------------------------------------------------
[ 0.000000] [
00000eb0] libusbx: warning [winusb_submit_control_transfer] cannot set configuration other than the default one
[ 0.031250] [
00000eb0] libusbx: warning [winusb_submit_control_transfer] cannot set configuration other than the default one
[ 0.046875] [
00000eb0] libusbx: error [winusb_submit_bulk_transfer] unable to match endpoint to an open interface - cancelling transfer
read_data[281]: ret: -5 transferred: 0 (expected 24)
am7xxx_get_info: No such file or directory
Antonio Ospite [Thu, 10 May 2012 06:11:14 +0000 (08:11 +0200)]
am7xxx: use hex notation for USB endpoints
This is for consistency with other uses.
Antonio Ospite [Thu, 10 May 2012 05:57:01 +0000 (07:57 +0200)]
picoproj: use MAP_PRIVATE in the mmap call
There is no need to allow sharing the mapped region with other
processes.
Antonio Ospite [Thu, 10 May 2012 05:49:46 +0000 (07:49 +0200)]
HACKING.asciidoc: fix cmake invocation examples
Put the path to the source dir last, like the cmake manual says:
cmake [options] <path-to-source>
Also put a space between the -D option and the configuration setting it
modifies, this is more readable.
Antonio Ospite [Thu, 10 May 2012 13:57:19 +0000 (15:57 +0200)]
Merge remote-tracking branch 'origin/rettichschnidi' into mingw-port
Antonio Ospite [Sun, 6 May 2012 21:24:40 +0000 (23:24 +0200)]
picoproj: add a note about image dimensions and native resolution
Also print a warning when the user supplies a big image, picoproj does
not perform any rescale so the device may just display a wrong picture
or even hang.
Reto Schneider [Sun, 8 Apr 2012 12:24:43 +0000 (14:24 +0200)]
Fix usage of FIND_PATH, allow $FFMPEG_DIR to be used.
Reto Schneider [Sat, 7 Apr 2012 10:39:43 +0000 (12:39 +0200)]
Stop CMake if function avformat_open_input not available,
print an error message. Prevents compile errors later on.
Reto Schneider [Sat, 7 Apr 2012 06:39:33 +0000 (08:39 +0200)]
Make example programs optional.
Antonio Ospite [Wed, 28 Mar 2012 11:37:00 +0000 (13:37 +0200)]
Release version 0.1.2
This fixes the handling of DESTDIR and should finally make packaging
easier.
Antonio Ospite [Wed, 28 Mar 2012 11:08:23 +0000 (13:08 +0200)]
doc: fix the "custom install targets" to handle DESTDIR
Stuff has to be installed/copied in an actual "install" target for Cmake
to handle DESTDIR sanely, a custom target is not enough.
So the story now is:
- add a component-local install rule
- make the "custom install target" invoke it
- make sure the custom target has been executed at install time
Maybe all this is not even worth the effort anymore and the "custom
install targets" could go away altogether, their point was to have
_them_ invoke at install time end exploit the dependencies chain.
Antonio Ospite [Wed, 28 Mar 2012 08:55:14 +0000 (10:55 +0200)]
Release version 0.1.1
This release adds some improvements which should ease packaging, we also
ship a changelog (generated with "make changelog") because some
distributions like to ship some form of upstream history in their
packages.
Antonio Ospite [Wed, 28 Mar 2012 08:43:04 +0000 (10:43 +0200)]
doc: use ${DOC_OUTPUT_PATH} in the targets once we have it defined
Antonio Ospite [Wed, 28 Mar 2012 08:31:22 +0000 (10:31 +0200)]
examples: keep the -h option as the last one in am7xxx-play
This is the Unix tradition AFAICT. Also, options in the geopt() loop
usually follow the order in which they appear in the usage message.
Antonio Ospite [Wed, 28 Mar 2012 08:27:12 +0000 (10:27 +0200)]
examples: add power level setting to picoproj
Antonio Ospite [Wed, 28 Mar 2012 08:11:54 +0000 (10:11 +0200)]
TODO: remove the entry about signals and picoproj
picoproj is a minimal example and it is just meant to illustrate the API
and run and exit quickly, it is not worth adding signal handling in it,
that would just make the code more noisy.
Antonio Ospite [Wed, 28 Mar 2012 08:09:08 +0000 (10:09 +0200)]
cosmetics: remove some trailing spaces
Antonio Ospite [Wed, 28 Mar 2012 08:02:03 +0000 (10:02 +0200)]
am7xxx: control shared library symbols visibility
Export as public symbols only those really needed, without this change
some symbols from serialize.c (get_8, get_le32, put_8, put_le32) were
public too.
Use -fvisibility=hidden so we don't need to explicitly mark symbols as
local.
Antonio Ospite [Wed, 28 Mar 2012 07:11:51 +0000 (09:11 +0200)]
doc: make sure docs have been generated when installing
This is done in three steps:
- first a "custom install target" is created for each custom target
which builds documentation;
- then dependencies between those custom install targets and the
correspondent "build" targets are added;
- finally some code is added to ensure those "custom install targets"
are called when the builtin install target is executed.
Antonio Ospite [Mon, 26 Mar 2012 11:50:05 +0000 (13:50 +0200)]
Increase project number to 0.1.0
Version 0.1.0 is going to be the first libam7xxx stable release.
Antonio Ospite [Mon, 26 Mar 2012 11:49:31 +0000 (13:49 +0200)]
Merge branch 'unstable'
Antonio Ospite [Mon, 26 Mar 2012 11:27:43 +0000 (13:27 +0200)]
TODO: remove the entry about documenting the API with Doxygen
Antonio Ospite [Fri, 23 Mar 2012 23:25:57 +0000 (00:25 +0100)]
doc: add generation of man pages from asciidoc sources
Antonio Ospite [Fri, 23 Mar 2012 23:01:25 +0000 (00:01 +0100)]
doc: add a link to the public API on the main page
Antonio Ospite [Fri, 23 Mar 2012 23:26:59 +0000 (00:26 +0100)]
examples: rephrase picoproj example description
This is to avoid repeating 'show' two times in the same sentence.
Antonio Ospite [Fri, 23 Mar 2012 22:32:59 +0000 (23:32 +0100)]
examples: make picoproj usage look more like am7xxx-play one
Antonio Ospite [Fri, 23 Mar 2012 21:01:45 +0000 (22:01 +0100)]
doc: add examples to the Doxygen documentation
Antonio Ospite [Fri, 23 Mar 2012 16:03:36 +0000 (17:03 +0100)]
sm7xxx-play: add missing newline on some error messages
Antonio Ospite [Wed, 21 Mar 2012 13:47:20 +0000 (14:47 +0100)]
am7xxx: round scaled_height and scaled_width
Round when converting from float to int, this is more like what the user
expects about image dimensions.
Antonio Ospite [Wed, 21 Mar 2012 11:06:16 +0000 (12:06 +0100)]
cmake: make stricter compilation checks conditional
On some systems building with options like -Werror is just impractical.
Antonio Ospite [Wed, 21 Mar 2012 10:45:36 +0000 (11:45 +0100)]
Merge remote-tracking branch 'origin/rettichschnidi' into unstable
Conflicts:
examples/am7xxx-play.c
Antonio Ospite [Tue, 20 Mar 2012 21:59:03 +0000 (22:59 +0100)]
examples: set proper return codes in am7xxx-play
Set the return codes explicitly on the error path of functions not
returning an int error value.
Antonio Ospite [Mon, 19 Mar 2012 21:13:04 +0000 (22:13 +0100)]
examples: add a -l option to am7xxx-play
Allow setting the verbosity level of log messages.
Reto Schneider [Tue, 20 Mar 2012 22:39:05 +0000 (23:39 +0100)]
Fix typo: dimesions -> dimensions
Reto Schneider [Tue, 20 Mar 2012 22:36:20 +0000 (23:36 +0100)]
All modes above LOW need both connectors to be plugged in.
Reto Schneider [Tue, 20 Mar 2012 22:33:50 +0000 (23:33 +0100)]
Fix typo: architechtures -> architectures
Reto Schneider [Tue, 20 Mar 2012 22:32:46 +0000 (23:32 +0100)]
Remove douled semicolons
Reto Schneider [Tue, 20 Mar 2012 20:16:14 +0000 (21:16 +0100)]
Check the user submitted value for the rescaling method.
Reto Schneider [Tue, 20 Mar 2012 20:15:29 +0000 (21:15 +0100)]
Fix the wording of the help message for the rescaling method.
Reto Schneider [Tue, 20 Mar 2012 20:06:30 +0000 (21:06 +0100)]
Update the help message to make it clear that the quality argument needs
a parameter.
Reto Schneider [Tue, 20 Mar 2012 19:53:38 +0000 (20:53 +0100)]
Let the user set the power mode via the switch '-p <power mode>'
Reto Schneider [Tue, 20 Mar 2012 18:55:27 +0000 (19:55 +0100)]
Merge remote-tracking branch 'origin/unstable' into rettichschnidi
Antonio Ospite [Mon, 19 Mar 2012 21:07:16 +0000 (22:07 +0100)]
cmake: disable optimizations in debug builds