paraslash.git
13 years agoSilence two Doxygen warnings.
Andre Noll [Wed, 16 Mar 2011 20:30:26 +0000 (21:30 +0100)]
Silence two Doxygen warnings.

Doxygen does not like comments in <brackets>. Use upper case instead.
This gets rid of annoying warnings of the form

/home/work/maan/scm/paraslash/audiod_command_list.h:13: warning: Unsupported xml/html tag <parent> found
/home/work/maan/scm/paraslash/audiod_command_list.h:13: warning: Unsupported xml/html tag <name> found

13 years agoMerge remote-tracking branch 'fml/master'
Andre Noll [Wed, 16 Mar 2011 19:28:29 +0000 (20:28 +0100)]
Merge remote-tracking branch 'fml/master'

13 years agoaudiod: Remove unused num_filters().
Andre Noll [Wed, 16 Mar 2011 19:26:27 +0000 (20:26 +0100)]
audiod: Remove unused num_filters().

This function has no callers. Also, get_audio_format_num() is
only called from functions in audiod.c, so make this function
static.

13 years agofade: Quiesce two gcc warnings.
Andre Noll [Wed, 16 Mar 2011 16:56:43 +0000 (17:56 +0100)]
fade: Quiesce two gcc warnings.

Ubuntu Lucid's gcc 4.4.3 does not like it if not each possible value
of an enumeration is handled in the body of a switch statement.

Since gengetopt for some reason always creates an additional xxx_NULL
value in options of type enum, this more or less means we have to
introduce default: cases to avoid warnings of the form

fade.c:113: warning: enumeration value ‘mixer_channel__NULL’ not handled in switch
fade.c:346: warning: enumeration value ‘mode__NULL’ not handled in switch

Fortunately, these are the only two warnings, so add default: cases
to make gcc happy.

13 years agoserver: Include git version in output of com_si().
Andre Noll [Tue, 15 Mar 2011 20:07:42 +0000 (21:07 +0100)]
server: Include git version in output of com_si().

It is often useful to be able to find out which version of para_server
is currently running.

13 years agoNEWS update.
Andre Noll [Sat, 5 Mar 2011 12:05:29 +0000 (13:05 +0100)]
NEWS update.

13 years agoMerge branch 't/array_size'
Andre Noll [Sat, 5 Mar 2011 11:54:28 +0000 (12:54 +0100)]
Merge branch 't/array_size'

13 years agoMerge branch 't/vorbis_dummy_header'
Andre Noll [Sat, 5 Mar 2011 11:53:02 +0000 (12:53 +0100)]
Merge branch 't/vorbis_dummy_header'

13 years agogui: Fix window redrawing on SIGWINCH.
Andre Noll [Sat, 5 Mar 2011 11:42:04 +0000 (12:42 +0100)]
gui: Fix window redrawing on SIGWINCH.

It is incorrect to check the condition (offset < 0 || len < offset).
This caused messed up contents of the bottom window after a resize.

13 years agoMerge remote-tracking branch 'refs/remotes/fml/master'
Andre Noll [Thu, 3 Mar 2011 18:43:25 +0000 (19:43 +0100)]
Merge remote-tracking branch 'refs/remotes/fml/master'

13 years agoInitialize all task->status fields.
Andre Noll [Thu, 3 Mar 2011 18:43:07 +0000 (19:43 +0100)]
Initialize all task->status fields.

Does not matter unless SCHED_DEBUG is enabled, but still..

13 years agohandle_connect(): Don't send anything to non-authorized clients.
Andre Noll [Thu, 3 Mar 2011 16:39:11 +0000 (17:39 +0100)]
handle_connect(): Don't send anything to non-authorized clients.

Currently, if we don't receive a valid authentication request, we send
back an RC4-encrypted error message to the client, which is kind of
pointless since the RC4 keys are not set up at this point.

Of course we could send an unencryted error message in this case,
but in since the peer could be anything, it seems safer to just close
the connection.

13 years agoscore: Fix use of uninitialized memory on 64 bit machines.
Andre Noll [Thu, 3 Mar 2011 14:51:41 +0000 (15:51 +0100)]
score: Fix use of uninitialized memory on 64 bit machines.

The score of an audio file in the score table is defined as a quantity
which is sizeof(long) bytes large, i.e. 4 bytes on 32bit systems and
8 bytes on 64 bit systems. This is not a problem per se because the
score column lives only in memory, so we do not have to worry about
incompatibilities of the on-disk layout.

However, at several places in score.c we cast the pointer to the osl
object to (int *) rather than (long *). When writing to the object on
a 64 bit machine, this will only set 4 out of the 8 allocated bytes,
the other four bytes stay uninitialized. The "ls" command uses the
correct cast to (long *) and reads the full 8 bytes. This causes
valgrind to complain:

==5433== Conditional jump or move depends on uninitialised value(s)
==5433==    at 0x4164F4: prepare_ls_row (aft.c:1334)
==5433==    by 0x4E2F421: osl_rbtree_loop (osl.c:1457)
==5433==    by 0x418935: admissible_file_loop (score.c:255)
==5433==    by 0x41601A: com_ls_callback (aft.c:1363)
==5433==    by 0x411FDE: command_post_select (afs.c:842)
==5433==    by 0x41B67A: schedule (sched.c:76)
==5433==    by 0x411ACF: afs_init (afs.c:986)
==5433==    by 0x408863: main (server.c:451)
==5433==
==5433== Conditional jump or move depends on uninitialised value(s)
==5433==    at 0x41650A: prepare_ls_row (aft.c:1334)
==5433==    by 0x4E2F421: osl_rbtree_loop (osl.c:1457)
==5433==    by 0x418935: admissible_file_loop (score.c:255)
==5433==    by 0x41601A: com_ls_callback (aft.c:1363)
==5433==    by 0x411FDE: command_post_select (afs.c:842)
==5433==    by 0x41B67A: schedule (sched.c:76)
==5433==    by 0x411ACF: afs_init (afs.c:986)
==5433==    by 0x408863: main (server.c:451)

Fix this bug by always casting to (long *).

13 years agoRC4: Fix invalid read.
Andre Noll [Thu, 3 Mar 2011 14:09:53 +0000 (15:09 +0100)]
RC4: Fix invalid read.

Commit 7cb8fa26 (May 2010) created a target buffer for the RC4-encoded
data which is slightly larger than the input buffer because openssl
apparently wrote beyond the size it was told to write.

As it turns out, this was not enough as RC4() may also read-overflow
the input buffer. Valgrind says on Linux/x86_64:

==2423== Invalid read of size 8
==2423==    at 0x5312020: RC4 (in /lib/libcrypto.so.0.9.8)
==2423==    by 0x40F01D: rc4_send_bin_buffer (crypt.c:224)
==2423==    by 0x40C724: com_stat (command.c:391)
==2423==    by 0x40BABF: handle_connect (command.c:838)
==2423==    by 0x408330: command_post_select (server.c:404)
==2423==    by 0x41B5DA: schedule (sched.c:76)
==2423==    by 0x4089C3: main (server.c:581)
==2423==  Address 0x6cefeb8 is 232 bytes inside a block of size 235 alloc'd
==2423==    at 0x4C275A2: realloc (vg_replace_malloc.c:525)
==2423==    by 0x40DE74: para_realloc (string.c:40)
==2423==    by 0x40E324: make_message (string.c:134)
==2423==    by 0x40C5D0: com_stat (command.c:328)
==2423==    by 0x40BABF: handle_connect (command.c:838)
==2423==    by 0x408330: command_post_select (server.c:404)
==2423==    by 0x41B5DA: schedule (sched.c:76)
==2423==    by 0x4089C3: main (server.c:581)

Fix this by treating the last len % 8 bytes of the input
separately. It's ugly but it does silence valgrind and should not be
noticeably slower since we are only doing one extra copy of at most
7 bytes.

We need to round the input size up and down to a multiple of 8,
so this patch introduces generic macros in para.h for this purpose.

13 years agoNEWS update.
Andre Noll [Wed, 2 Mar 2011 14:20:20 +0000 (15:20 +0100)]
NEWS update.

13 years agoMerge remote-tracking branch 'boock/master'
Andre Noll [Wed, 2 Mar 2011 10:38:43 +0000 (11:38 +0100)]
Merge remote-tracking branch 'boock/master'

13 years agoconfigure.ac: Avoid stray -L option in para_server link command.
Andre Noll [Tue, 1 Mar 2011 22:18:33 +0000 (23:18 +0100)]
configure.ac: Avoid stray -L option in para_server link command.

If --with-osl-libs  is not given, we end up passing "-L" without a corresponding
directory name to the linker.

13 years agoaudiod: Update --no_default_filters help text.
Andre Noll [Mon, 28 Feb 2011 13:05:31 +0000 (14:05 +0100)]
audiod: Update --no_default_filters help text.

This was quite outdated: We got the defaults right for udp and dccp
streams at least since commit 28f8405e (April 2010). Moreover, two new
audio formats (wma and spx) are supported now but are not mentioned
in the help text. Describe that the corresponding decoder is used as
the default filter rather than listing all supported audio formats.

13 years agoMakefile: Stop building on ggo errors.
Andre Noll [Mon, 28 Feb 2011 10:32:16 +0000 (11:32 +0100)]
Makefile: Stop building on ggo errors.

The dependency files *.d are implicitly made by -include command
during make's first pass. The "-" prefix instructs make to ignore any
non-existing files *and* all errors resulting from executing the rules
for the *.d targets . This prefix is necessary to avoid the warning
messages about non-existing dependency files, for example after a
"make clean2".

This implies that make proceeds even if a dependency file could not
be created due to a syntax error in a .ggo file. We'd like to stop
if this happens, but unfortunately gnu make does not have an option
for specifying this behaviour in an include command.

This patch works around this shortcoming by letting the "all"
target depend on the new phony target "dep" which depends on all .d
files. This way all *.d targets are considered twice: Once during the
first pass (where errors are ignored) and again due to the all->dep
dependency.

If no errors occur, "make dep" is a no-op, so this change should not
slow down the build noticeably. A slight drawback of this solution
is that, in case of an error in a ggo file, the error will be printed
twice. But this it is still better than silently ignoring the error.

13 years agoMerge branch 't/ogg_timining_fixes'
Andre Noll [Sun, 27 Feb 2011 22:19:51 +0000 (23:19 +0100)]
Merge branch 't/ogg_timining_fixes'

13 years agoFix depend.sh on NetBSD.
Andre Noll [Fri, 25 Feb 2011 14:33:58 +0000 (15:33 +0100)]
Fix depend.sh on NetBSD.

NetBSD's sed apparently does not understand the \+ syntax to match the preceeding
pattern one or more times. OTOH, {1,} seems to work, so use this syntax instead.

This caused the build to abort silently because make gives up on the targets that
depend on files in the "cmdline" directory.

13 years agoImprove ARRAY_SIZE macro.
Andre Noll [Fri, 4 Feb 2011 06:46:28 +0000 (07:46 +0100)]
Improve ARRAY_SIZE macro.

Compilation now fails if the given argument not an array but a pointer.

Idea taken from ccan. Thanks Rusty!

13 years agoweb: Link to the gitweb summary page rather than the shortlog.
Andre Noll [Fri, 25 Feb 2011 12:12:55 +0000 (13:12 +0100)]
web: Link to the gitweb summary page rather than the shortlog.

This page shows heads and tags which might be more useful to people
than the shortlog only.

13 years agogitweb: Make the W3C validation checker happy.
Andre Noll [Thu, 24 Feb 2011 16:34:40 +0000 (17:34 +0100)]
gitweb: Make the W3C validation checker happy.

It reported a couple of errors on the gitweb (Changes) page. Moreover,
the git-logo was missing. This should fix both issues.

13 years agovorbis: Write out _all_ pending ogg pages.
Andre Noll [Thu, 24 Feb 2011 13:11:18 +0000 (14:11 +0100)]
vorbis: Write out _all_ pending ogg pages.

ogg_stream_flush() does not necessarily write out all pending ogg
packets into a single ogg page. So we have to call this function
in a loop until it returns zero to make sure we have a complete
ogg/vorbis header.

This fixes a bug in the vorbis dummy header patch set which caused
corrupt replacement headers for ogg files whose header spanned more
than one ogg page.

13 years agoRevert "Create three ogg pages when skipping vorbis comments."
Andre Noll [Thu, 24 Feb 2011 10:16:16 +0000 (11:16 +0100)]
Revert "Create three ogg pages when skipping vorbis comments."

This reverts commit 3569c4ac0d5b35318e741b0123bc707473261ad9 since
it did not fix the problem at all.  A proper fix is provided in the
next commit.

13 years agoconfigure.ac: Update header and function checks.
Andre Noll [Mon, 21 Feb 2011 20:34:52 +0000 (21:34 +0100)]
configure.ac: Update header and function checks.

This makes autoscan a bit happier.

13 years agogui_theme: Make set_theme() static.
Andre Noll [Mon, 21 Feb 2011 20:32:14 +0000 (21:32 +0100)]
gui_theme: Make set_theme() static.

13 years agoaac_afh: Make parameters of atom_cmp() const.
Andre Noll [Mon, 21 Feb 2011 20:31:28 +0000 (21:31 +0100)]
aac_afh: Make parameters of atom_cmp() const.

13 years agofd: Make two functions static.
Andre Noll [Mon, 21 Feb 2011 08:02:19 +0000 (09:02 +0100)]
fd: Make two functions static.

para_opendir() and para_fchdir() are only used inside fd.c.

13 years agopara_write: Fix memory leak.
Andre Noll [Mon, 21 Feb 2011 07:13:15 +0000 (08:13 +0100)]
para_write: Fix memory leak.

We missed to call the ->free_config() method of the writer(s).

13 years agoFix oss_init() error path.
Andre Noll [Sun, 20 Feb 2011 18:56:59 +0000 (19:56 +0100)]
Fix oss_init() error path.

A bug similar to the one fixed in the previous patch for the alsa
writer is also present in the oss writer: If oss_init() fails the
->private_data pointer is non-NULL, but its contents have already
been freed. glibc detects this, aborts the process and spits out

*** glibc detected *** ./para_write: double free or corruption (fasttop): 0x080622a0 ***

Fix this bug by initializing ->private_data only if oss_init()
succeeds.

13 years agoFix alsa_init() error path.
Andre Noll [Sun, 20 Feb 2011 16:01:15 +0000 (17:01 +0100)]
Fix alsa_init() error path.

If alsa_init() fails, alsa_write_post_select() removes the buffer tree
node and sets t->error to a negative value. para_audiod (or para_write)
then calls alsa->close() to deallocate any resources. At this point
wn->private_data is non-NULL while  pad->handle _is_ NULL. The
subsequent call to snd_pcm_nonblock() therefore triggers the assertion

para_audiod: pcm.c:724: snd_pcm_nonblock: Assertion `pcm' failed.

which aborts para_audiod. Fix this bug by freeing the ->private_data
pointer already in alsa_write_post_select() if alsa_init() fails. This
way, ->private_data and pad->handle are either both NULL or both
non-NULL, which meets the expectations of alsa_close().

13 years agoNEWS update.
Andre Noll [Sun, 20 Feb 2011 12:16:17 +0000 (13:16 +0100)]
NEWS update.

13 years agoMerge branch 't/gui_improvements'
Andre Noll [Sun, 20 Feb 2011 12:12:32 +0000 (13:12 +0100)]
Merge branch 't/gui_improvements'

13 years agoaudiod: Fix a memory leak in parse_receiver_args().
Andre Noll [Sun, 20 Feb 2011 11:50:37 +0000 (12:50 +0100)]
audiod: Fix a memory leak in parse_receiver_args().

If multiple receivers are given, we leak the config structure of
all but the last one.

Clean up a comment further down in the function while we're at it.

13 years agoMerge branch 'maint'
Andre Noll [Sun, 20 Feb 2011 11:44:05 +0000 (12:44 +0100)]
Merge branch 'maint'

Conflicts:
configure.ac

13 years agoMake autoconf-2.66 happy. v0.3
Andre Noll [Mon, 5 Jul 2010 21:42:31 +0000 (23:42 +0200)]
Make autoconf-2.66 happy.

This removes more lines than it adds and avoids the following warning;

configure.ac:689: warning: AC_DEFINE_UNQUOTED: `
configure.ac:689:       result=
configure.ac:689:       for i in $status_items; do
configure.ac:689:               result="$result SI_$(echo $i | tr 'a-z' 'A-Z')' is not a valid preprocessor define value
(cherry picked from commit 5842e3e7f2aa17fe16cb806b4ba955ce1f25ce53)

13 years agoSpeed up the oggdec filter and avoid wasting tons of memory.
Andre Noll [Wed, 9 Feb 2011 17:18:17 +0000 (18:18 +0100)]
Speed up the oggdec filter and avoid wasting tons of memory.

Calls to ov_read appear to return at most 4K, no matter how much data
was requested. We allocated 64K per output chunk, so 60K of that space
is wasted. On the other hand we need large output buffers in order to
not sacrifice performance when para_filter decodes to stdout.

Fix this flaw by increasing the oggdec output buffer size from 64K to
640K, calling ov_read() until the output buffer is full or there is
nothing left to read, and then reallocating the buffer to the amount
of bytes actually read.

Assuming CD audio, the 640K output buffer size roughly matches
the decoded size of the 32K input buffer used by the stdin task,
so each input buffer corresponds roughly to one output buffer. The
patched version performs almost identically to the oggdec reference
implementation while previous versions were up to a factor of 2 slower.

13 years agooggdec: Use local variable for the vorbis file struct.
Andre Noll [Mon, 7 Feb 2011 16:00:21 +0000 (17:00 +0100)]
oggdec: Use local variable for the vorbis file struct.

This way, the read callback knows whether we are about to open the
file or not.

13 years agooggdec: Replace stream start delay by minimum input queue size.
Andre Noll [Mon, 17 Jan 2011 07:32:52 +0000 (08:32 +0100)]
oggdec: Replace stream start delay by minimum input queue size.

Waiting 300ms at stream start is both ugly and unnecessary if playback
does not start in the middle of the stream. This patch removes the
->stream_start member of struct private_oggdec_data and delays plaback
only if ov_read returns OV_HOLE, i.e. if streaming does not start at
the beginning of the file.

This delay is enforced by setting the minimal input queue size.

13 years agoogg_afh: Compute chunk time more accurately.
Andre Noll [Mon, 17 Jan 2011 07:24:37 +0000 (08:24 +0100)]
ogg_afh: Compute chunk time more accurately.

The chunk table is constructed so that each chunk corresponds to
frames_per_chunk samples as determined by the granule position of
the ogg page. Use this exact value for computing the duration of a
chunk rather than the avaerage num_frames / num_chunks.

13 years agoogg_afh: Comment fix.
Andre Noll [Mon, 17 Jan 2011 07:18:36 +0000 (08:18 +0100)]
ogg_afh: Comment fix.

We are counting ogg pages, not ogg packets.

13 years agogui: Check return values of curses functions more strictly.
Andre Noll [Sun, 30 Jan 2011 15:22:05 +0000 (16:22 +0100)]
gui: Check return values of curses functions more strictly.

noecho(), cbreak() and init_pair() may fail. Detect these errors and exit
with a proper error message.

13 years agogui: Open-code check_geometry().
Andre Noll [Sun, 30 Jan 2011 12:25:13 +0000 (13:25 +0100)]
gui: Open-code check_geometry().

It is simple enough and has only one caller.

13 years agogui: Cosmetic cleanups for init_curses().
Andre Noll [Sun, 30 Jan 2011 12:23:14 +0000 (13:23 +0100)]
gui: Cosmetic cleanups for init_curses().

Remove some code which was commented out long ago, nicify a comment and
kill some unnecessary braces.

13 years agogui: Recognize "home" and "end" keys.
Andre Noll [Thu, 27 Jan 2011 07:44:38 +0000 (08:44 +0100)]
gui: Recognize "home" and "end" keys.

And map them to new functions which scroll to the top and the bottom of
the output window.

13 years agogui: Don't exit without shutting down curses on config reload.
Andre Noll [Tue, 18 Jan 2011 21:36:32 +0000 (22:36 +0100)]
gui: Don't exit without shutting down curses on config reload.

Currently, if a config file containing errors is being reloaded,
gui_cmdline_parser_ext() calls exit() which leaves the terminal
in an unusable state because para_gui had no chance to call
endwin() in order to reset the terminal.

Fix this flaw by instructing gengetopt to generate code that does
not exit on errors. We can still tell that the command line or the
config file contained errors by looking at the return value of the
various parsers.

13 years agogui: Don't fail silently on config file errors.
Andre Noll [Tue, 18 Jan 2011 20:23:50 +0000 (21:23 +0100)]
gui: Don't fail silently on config file errors.

We need to set ->print_errors non-zero in order to get the error message
from gengetopt.

13 years agogui: Check only once for invalid key maps.
Andre Noll [Tue, 18 Jan 2011 20:21:48 +0000 (21:21 +0100)]
gui: Check only once for invalid key maps.

No need to call check_key_map_args() twice.

13 years agogui: Remove pointless error message for invalid command line options.
Andre Noll [Tue, 18 Jan 2011 20:19:18 +0000 (21:19 +0100)]
gui: Remove pointless error message for invalid command line options.

This error message is never printed anyway because gui_cmdline_parser()
exits on errors.

13 years agogui: Help text improvements.
Andre Noll [Mon, 17 Jan 2011 22:19:50 +0000 (23:19 +0100)]
gui: Help text improvements.

- Fix default config file name
- Reformat ggo file
- Add detailed help fpr --stat_cmd
- Move description of key_map to --detailed-help output.

13 years agogui: Allow selecting a startup theme.
Andre Noll [Mon, 17 Jan 2011 22:00:40 +0000 (23:00 +0100)]
gui: Allow selecting a startup theme.

This implements the --theme option which allows to start para_gui
with a theme different than the default theme.

13 years agoCreate three ogg pages when skipping vorbis comments.
Andre Noll [Thu, 10 Feb 2011 20:06:27 +0000 (21:06 +0100)]
Create three ogg pages when skipping vorbis comments.

This works around a shortcoming in older versions of libogg. It
makes get_header() create a separate ogg page for each of the
three header packets in an ogg/vorbis stream instead of combining
packets #2 and #3.

The patch also adds a couple of debug log messages which print the
size of the individual ogg packets and ogg pages.

13 years agoUpdate Doxyfile to version 1.6.3.
Andre Noll [Mon, 7 Feb 2011 15:47:36 +0000 (16:47 +0100)]
Update Doxyfile to version 1.6.3.

The result of "doygen -u" on a Ubuntu lucid system.

13 years agobtr: Fix documentation of btr_consume().
Andre Noll [Mon, 7 Feb 2011 15:45:45 +0000 (16:45 +0100)]
btr: Fix documentation of btr_consume().

s/buffer tree/buffer pool/.

13 years agoMerge remote branch 'refs/remotes/meins/master'
Andre Noll [Thu, 3 Feb 2011 08:46:23 +0000 (09:46 +0100)]
Merge remote branch 'refs/remotes/meins/master'

13 years agoMerge branch 'maint'
Andre Noll [Thu, 3 Feb 2011 08:46:23 +0000 (09:46 +0100)]
Merge branch 'maint'

13 years agoMerge branch 'maint'
Andre Noll [Thu, 3 Feb 2011 08:15:58 +0000 (09:15 +0100)]
Merge branch 'maint'

13 years agoserver: Avoid invalid free() in com_help().
Andre Noll [Thu, 3 Feb 2011 08:12:39 +0000 (09:12 +0100)]
server: Avoid invalid free() in com_help().

If the argument to com_help is not a valid command, we try to free
uninitialized memory which may lead to a segfault.

This bug existed at least since day 1 of the git repo.

13 years agovss: Use the stripped header also at stream start.
Andre Noll [Mon, 1 Nov 2010 08:28:11 +0000 (09:28 +0100)]
vss: Use the stripped header also at stream start.

For ogg vorbis streams the stripped header is computed when a new audio file is
opened, but chunk zero, the unmodified header, is used for the first FEC group.
This not only wastes bandwidth but might cause vss to abort because the length
of the real header was not taken into account when computing the FEC
parameters.

Solve this by introducing vss_get_chunk() which returns either the stripped
header or calls afh_get_chunk() to obtain a reference to a "real" chunk.

13 years agoIntroduce get_header() for ogg/vorbis.
Andre Noll [Sun, 3 Oct 2010 13:37:02 +0000 (15:37 +0200)]
Introduce get_header() for ogg/vorbis.

Define the get_header() method for the ogg vorbis audio format handler
which replaces ogg packet #2 by a dummy packet which contains no meta
data.

We call ogg_get_file_info() with afhi == NULL which only passes the
first three ogg packets to the given callback but does not compute
the chunk table. Ogg packet #1 and #3 are copied unmodified into the
header.

13 years agovss: Introduce extra_header_buf.
Andre Noll [Sun, 24 Oct 2010 17:27:55 +0000 (19:27 +0200)]
vss: Introduce extra_header_buf.

For the same reasons the extra data buffer is necessary, we also need to reserve
an extra buffer for the header in order to not read-overflow the header buffer
provided by the new get_header() function.

13 years agoAdd Infrastructure for dynamic header computation.
Andre Noll [Sun, 3 Oct 2010 11:07:42 +0000 (13:07 +0200)]
Add Infrastructure for dynamic header computation.

vorbis allows to add arbitrary many comments to an audio file. These
comments are stored in ogg packet #2, which is part of the audio file
header of ogg vorbis files. Hence ogg/vorbis headers may be arbitrary
large. Since the header is sent periodically, this wastes bandwidth
and may cause FEC parameters to become unnecessary large.

This introductory patch paves the way for replacing ogg packet #2 at
stream time by a dummy packet with does not contain any comments and
is therefore of bounded size.

In order to do so, we need audio file headers which are not necessarily
an unmodified portion of the audio file. Therefore we call back into
the audio format handler code at stream time to compute an appropriate
audio file header.  Hence an optional new method ->get_header() is
added to struct audio_format_hander. If it is non-NULL, is is called
instead of using the first header_len bytes of the file.

Unfortunately, this implies that the virtual streaming system must
be aware of the audio format id in order to know which get_header()
method should be called. Thus we store the audio format id in struct
audio_file_data which is passed from the afs process to the server
process. Vss then calls afh_get_header() with the audio format id as
an additional argument.

ATM, the new functionality is not yet used as as no audio format
handler defines ->get_header() yet.

13 years agoKill afhi->header_offset.
Andre Noll [Wed, 6 Oct 2010 20:21:07 +0000 (22:21 +0200)]
Kill afhi->header_offset.

It is always zero, and stored _twice_ in the osl table. Since we must
not change the layout of the on-disk afhi structure, rename these
fields to AFHI_UNUSED1_OFFSET and AFHI_UNUSED2_OFFSET, and set them
to zero in save_afhi().

13 years agoafh: Fix a memory leak in stream mode.
Andre Noll [Sun, 3 Oct 2010 10:43:00 +0000 (12:43 +0200)]
afh: Fix a memory leak in stream mode.

We need to free the audio format handler info in both info and stream mode.

13 years agovss: Initialize all bytes of the FEC header.
Andre Noll [Sun, 24 Oct 2010 17:23:25 +0000 (19:23 +0200)]
vss: Initialize all bytes of the FEC header.

Does not matter much but makes valgrind happier.

13 years agoTrivial comment cleanups.
Andre Noll [Sat, 11 Sep 2010 23:58:52 +0000 (01:58 +0200)]
Trivial comment cleanups.

13 years agoNEWS update.
Andre Noll [Sat, 29 Jan 2011 10:40:40 +0000 (11:40 +0100)]
NEWS update.

13 years agoMerge branch 't/command_util_replace_tabs'
Andre Noll [Sat, 29 Jan 2011 10:37:34 +0000 (11:37 +0100)]
Merge branch 't/command_util_replace_tabs'

13 years agoMerge branch 't/color_cleanups'
Andre Noll [Sat, 29 Jan 2011 10:34:18 +0000 (11:34 +0100)]
Merge branch 't/color_cleanups'

13 years agoMerge branch 't/aacdec_cleanups'
Andre Noll [Sat, 29 Jan 2011 10:01:30 +0000 (11:01 +0100)]
Merge branch 't/aacdec_cleanups'

13 years agoChange year in version string to 2011.
Andre Noll [Thu, 27 Jan 2011 07:44:57 +0000 (08:44 +0100)]
Change year in version string to 2011.

13 years agoNEWS update.
Andre Noll [Sat, 22 Jan 2011 16:02:19 +0000 (17:02 +0100)]
NEWS update.

13 years agoMerge branch 't/periodic_header_optional'
Andre Noll [Sat, 22 Jan 2011 15:57:02 +0000 (16:57 +0100)]
Merge branch 't/periodic_header_optional'

13 years agoSuppress non-fatal bitstream error message at BOF/EOF.
Andre Noll [Sat, 18 Dec 2010 12:05:25 +0000 (13:05 +0100)]
Suppress non-fatal bitstream error message at BOF/EOF.

These errors occur frequently for 64KBit aac files. So print an
error message only if the error occurs in the middle of the stream.

13 years agoaacdec: Print error message only once.
Andre Noll [Sat, 18 Dec 2010 12:00:04 +0000 (13:00 +0100)]
aacdec: Print error message only once.

No need to call NeAACDecGetErrorMessage() twice.

13 years agoaacdec: Remove useless call to btr_get_input_queue_size().
Andre Noll [Sat, 18 Dec 2010 11:54:11 +0000 (12:54 +0100)]
aacdec: Remove useless call to btr_get_input_queue_size().

The returned input queue size is never used.

13 years agocommand_util: Replace tabs by \t.
Andre Noll [Wed, 24 Nov 2010 22:36:01 +0000 (23:36 +0100)]
command_util: Replace tabs by \t.

Probably does not matter much...

13 years agoReplace 2010 in copyright message by 2011.
Andre Noll [Mon, 17 Jan 2011 07:50:18 +0000 (08:50 +0100)]
Replace 2010 in copyright message by 2011.

13 years agoogg_afh_common.c: Remove pointless loop counter.
Andre Noll [Fri, 14 Jan 2011 18:51:22 +0000 (19:51 +0100)]
ogg_afh_common.c: Remove pointless loop counter.

The integer variable i is not used at all in the loop body.

13 years agohttp_recv.c: Trivial typo fix.
Andre Noll [Mon, 10 Jan 2011 22:34:12 +0000 (23:34 +0100)]
http_recv.c: Trivial typo fix.

13 years agoMerge remote-tracking branch 'fml/master'
Andre Noll [Sat, 18 Dec 2010 11:07:36 +0000 (12:07 +0100)]
Merge remote-tracking branch 'fml/master'

13 years agonew codename, reset version to git
Andre Noll [Fri, 17 Dec 2010 16:10:49 +0000 (17:10 +0100)]
new codename, reset version to git

13 years agothe paraslash-0.4.5 release tarball
Andre Noll [Fri, 17 Dec 2010 16:06:25 +0000 (17:06 +0100)]
the paraslash-0.4.5 release tarball

13 years agoparaslash 0.4.5 v0.4.5
Andre Noll [Fri, 17 Dec 2010 16:02:14 +0000 (17:02 +0100)]
paraslash 0.4.5

13 years agoweb: Remove server side includes.
Andre Noll [Thu, 9 Dec 2010 10:37:17 +0000 (11:37 +0100)]
web: Remove server side includes.

The new apache on systemlinux.org does not have this feature activated.
We don't need it anyway.

13 years agoMerge branch 't/kill_udp_cq'
Andre Noll [Wed, 8 Dec 2010 12:45:42 +0000 (13:45 +0100)]
Merge branch 't/kill_udp_cq'

13 years agoclient: Kill superfluous label "err".
Andre Noll [Mon, 6 Dec 2010 22:05:28 +0000 (23:05 +0100)]
client: Kill superfluous label "err".

The position of this label is identical to the "out" label, and "out"
is more to the point as we jump there not only in case of an error. So
jump always to "out" and remove the "err" label.

13 years agocolor: Simplify color error handling.
Andre Noll [Sun, 21 Nov 2010 20:48:42 +0000 (21:48 +0100)]
color: Simplify color error handling.

We exit on errors anyway, so get rid of the return value of
color_parse() and daemon_set_log_color() and abort immediately rather
than returning -1. Add the familiar "_or_die" suffix to these functions
to make it clear that no error handling is necessary in the caller.

13 years agoNEWS update.
Andre Noll [Sun, 5 Dec 2010 17:52:19 +0000 (18:52 +0100)]
NEWS update.

13 years agoMerge branch 't/writer_cleanups'
Andre Noll [Sun, 5 Dec 2010 17:41:36 +0000 (18:41 +0100)]
Merge branch 't/writer_cleanups'

13 years agoMinor documentation cleanups.
Andre Noll [Sun, 5 Dec 2010 17:38:06 +0000 (18:38 +0100)]
Minor documentation cleanups.

13 years agofecdec: Use a fixed buffer pool size of 64K.
Andre Noll [Sun, 28 Nov 2010 21:43:45 +0000 (22:43 +0100)]
fecdec: Use a fixed buffer pool size of 64K.

With the new variable sized FEC slices, it may happen that the
number of bytes per slice of the first FEC group is very small. It is
therefore no longer appropriate to base the size of the buffer pool
on this quantity. It happened to be much too small (< 1000 bytes)
for one aac file which caused the fecdec filter to abort early due
to a full buffer pool.

This patch uses a fixed buffer pool size of 64K for the fecdec filter,
which ought to be enough for everybody.

13 years agowrite_common: Don't abort if btr_exec_up() failed.
Andre Noll [Sun, 28 Nov 2010 21:32:13 +0000 (22:32 +0100)]
write_common: Don't abort if btr_exec_up() failed.

btr_exec_up() failure is unusual but possible if the upper btr node dies just in
the right moment.  It happened for an aac file due to another bug in the fecdec
filter (fixed in a subsequent patch)  which caused the fecdec and hence the aacdec
btr nodes to unregister themselves due to a full buffer tree pool.

So replace the assertion by a fat error message. This sets the sample rate,
channel count and the sample format to zero which makes the writer unregister
itsself. This is better than aborting.

13 years agofd.c: Fix typo in comment.
Andre Noll [Sun, 28 Nov 2010 21:17:39 +0000 (22:17 +0100)]
fd.c: Fix typo in comment.

13 years agovss: Avoid large FEC parameters for the DCCP transport.
Andre Noll [Mon, 1 Nov 2010 15:30:22 +0000 (16:30 +0100)]
vss: Avoid large FEC parameters for the DCCP transport.

Now that for DCCP streams the audio file header is sent only once at client
connect time, we can go one step further and send the header as its own FEC
group. Then all subsequent FEC groups contain data slices only, hence the
maximal required size for a FEC group reduces from

header_size + largest_chunk_size

to

max(header_size, largest_chunk_size)

This patch introduces a new helper function need_data_slices() which returns
false only at the beginning of a DCCP stream. In this case FEC group 0 consists
of the header only and an arbitrary time interval of 200ms is used for this
group.

13 years agovss: Let the transport specify whether periodic headers are necessary.
Andre Noll [Sun, 17 Oct 2010 09:45:57 +0000 (11:45 +0200)]
vss: Let the transport specify whether periodic headers are necessary.

This adds the new flag need_periodic_header to struct fec_client_parms. It is
true for the UDP transport and false for the DCCP transport.

vss checks this flag in need_audio_header() and does not send the header
periodically if the flag is false.

13 years agowriters: Kill ->open.
Andre Noll [Sat, 6 Nov 2010 10:48:12 +0000 (11:48 +0100)]
writers: Kill ->open.

Now that ->open is a dummy function for all writers, we may safely remove
this method from struct writer and kill the dummy functions.

13 years agoosx_write: Make osx_write_open() a no-op.
Andre Noll [Sat, 6 Nov 2010 10:43:59 +0000 (11:43 +0100)]
osx_write: Make osx_write_open() a no-op.

Move the allocation of the private_osx_write_data struct to core_audio_init()
and adjust the the check whether core audio has been initialized accordingly.