3 years agoBump version. v0.1.8
Gregory Maxwell [Wed, 4 Dec 2013 23:43:08 +0000 (15:43 -0800)]
Bump version.

3 years agoFix copying pictures from FLAC with a mimetype.
Timothy B. Terriberry [Thu, 28 Nov 2013 16:02:34 +0000 (08:02 -0800)]
Fix copying pictures from FLAC with a mimetype.

If the METADATA_BLOCK_PICTURE field contained a non-empty mimetype
 or description field, then we would overwrite important pieces of
 the struct when encoding, making the tag useless.

3 years agoopusrtp: add options to set destination address and port
Tristan Matthews [Wed, 30 Oct 2013 21:07:46 +0000 (14:07 -0700)]
opusrtp: add options to set destination address and port

Signed-off-by: Ralph Giles <giles@mozilla.com>
4 years agoPass --always to 'git describe'.
Ralph Giles [Tue, 1 Oct 2013 21:47:06 +0000 (14:47 -0700)]
Pass --always to 'git describe'.

This provides a fallback commit id if no tags are available,
for example when doing a shallow clone.

4 years agoDocument using --genre and --artist multiple times.
Ralph Giles [Thu, 19 Sep 2013 21:24:44 +0000 (14:24 -0700)]
Document using --genre and --artist multiple times.

4 years agoFix a manpage typo.
Ralph Giles [Thu, 19 Sep 2013 21:24:35 +0000 (14:24 -0700)]
Fix a manpage typo.

4 years agoAdd new metadata switches to the manpage.
Ralph Giles [Mon, 9 Sep 2013 02:21:26 +0000 (19:21 -0700)]
Add new metadata switches to the manpage.

4 years agoActually enable flac support in the unix build.
Ralph Giles [Sun, 8 Sep 2013 20:21:12 +0000 (13:21 -0700)]
Actually enable flac support in the unix build.

Previously we linked to flac, but didn't set the enabling CFLAG.

4 years agoAdd wave_out to VERSIONED_OBJS.
Ralph Giles [Sun, 8 Sep 2013 20:15:19 +0000 (13:15 -0700)]
Add wave_out to VERSIONED_OBJS.

wave_out.c also references PACKAGE_NAME and PACKAGE_VERSION.

4 years agoRemove unused file NEWS.
Ralph Giles [Sun, 8 Sep 2013 17:14:26 +0000 (10:14 -0700)]
Remove unused file NEWS.

GNU autotools used to enforce some coding standards, but I don't
see a warning about not having this or a changelog now.

4 years agoBe consistent with the order we include dependencies
Ron [Sat, 7 Sep 2013 09:23:54 +0000 (18:53 +0930)]
Be consistent with the order we include dependencies

This should have no real functional change at this point in time,
but it's clear that Ogg will never depend on Opus.  The reverse is
likely to remain true, but less axiomatic.

4 years agoDon't overlink everything with flac
Ron [Sat, 7 Sep 2013 09:18:59 +0000 (18:48 +0930)]
Don't overlink everything with flac

Only opusenc uses it at present.

4 years agoDon't include OPUS_CFLAGS and OPUS_LIBS twice
Ron [Sat, 7 Sep 2013 09:16:22 +0000 (18:46 +0930)]
Don't include OPUS_CFLAGS and OPUS_LIBS twice

4 years agoBump version. v0.1.7
Gregory Maxwell [Wed, 4 Sep 2013 22:54:00 +0000 (15:54 -0700)]
Bump version.

4 years agoSilence mvsc posix warnings.
Ralph Giles [Mon, 26 Aug 2013 19:10:28 +0000 (12:10 -0700)]
Silence mvsc posix warnings.

4 years agoAdd picture.c to the Visual Studio project files.
Ralph Giles [Mon, 26 Aug 2013 18:46:05 +0000 (11:46 -0700)]
Add picture.c to the Visual Studio project files.

4 years agoUpdate opus library paths for the new project files.
Ralph Giles [Mon, 26 Aug 2013 18:31:44 +0000 (11:31 -0700)]
Update opus library paths for the new project files.

Garf's new project files build things in win32/VSnnnn/ instead
of the top level. Also updates the ogg paths to use defines
instead of hard-coding release and platform tags.

4 years agoAsk genversion.bat to generate PACKAGE_VERSION.
Ralph Giles [Mon, 26 Aug 2013 18:13:47 +0000 (11:13 -0700)]
Ask genversion.bat to generate PACKAGE_VERSION.

It was still defining VERSION in the Visual Studio project files,
which hadn't been updated for this change.

4 years agoDoc improvements for --bitrate.
Ron [Sat, 13 Jul 2013 08:11:37 +0000 (17:41 +0930)]
Doc improvements for --bitrate.

Include the doc fixes from 3138cb7c9a8b108a9609d53ad56ae6391130af79,
even if people don't want the --quality alias after all.

4 years agoAlways try to update the version when autogen.sh is run
Ron [Sat, 13 Jul 2013 08:00:13 +0000 (17:30 +0930)]
Always try to update the version when autogen.sh is run

This avoids at least one case where ./autogen.sh && ./configure && make
will re-run configure because the makefile rules updated something that
it depends upon. Pulling a new version from git will change the version
so we should update that at the first step rather than iterating after
the last one.

4 years agoRevert "Doc improvements for --bitrate, and a --quality alias for it."
Gregory Maxwell [Thu, 11 Jul 2013 23:46:12 +0000 (16:46 -0700)]
Revert "Doc improvements for --bitrate, and a --quality alias for it."

This reverts commit 3138cb7c9a8b108a9609d53ad56ae6391130af79.

4 years agoDoc improvements for --bitrate, and a --quality alias for it.
Gregory Maxwell [Thu, 11 Jul 2013 23:36:57 +0000 (16:36 -0700)]
Doc improvements for --bitrate, and a --quality alias for it.

4 years agoOpus-tools now requires libopus 1.0.3 or later.
Gregory Maxwell [Sat, 29 Jun 2013 21:22:39 +0000 (14:22 -0700)]
Opus-tools now requires libopus 1.0.3 or later.

This updates the configure.ac requirements for the last patch from
 JM, and also fixes the unused variable warnings it created.

4 years agoConverts opusenc to the new multistream surround encoder API
Jean-Marc Valin [Sun, 5 May 2013 21:10:00 +0000 (17:10 -0400)]
Converts opusenc to the new multistream surround encoder API

Channel mapping is now determined automatically by libopus.
This breaks the --uncoupled option because opusenc no longer
has any control over the mapping.

4 years agoReplace INCLUDES with AM_CPPFLAGS
Ron [Sat, 29 Jun 2013 06:08:35 +0000 (15:38 +0930)]

Automake 1.13 complains that INCLUDES is obsoleted now.

4 years agoTweak the sound driver detection tests
Ron [Fri, 28 Jun 2013 16:07:46 +0000 (01:37 +0930)]
Tweak the sound driver detection tests

Test for the available possibilities in the code in the same order that
we use when including the headers.  This ensures that BSDs which test
positive for both sndio and oss compat won't include the headers for one
and the code for the other.  The sndio support was added in commit
064bb2176518117531e0032747128761a19e5439, but only preferred sndio when
including the headers.

Enable the OSS code for all the possible HAVE_*_SOUNDCARD_H options.
A more comprehensive test and additional macros were added in commit
a0c500527daa6a8638eabac382810b1c42f442a2, but only to include the
headers, not to also enable the relevant code.

4 years agoCheck for libm in a way that shouldn't explode on BeOS
Ron [Fri, 28 Jun 2013 15:43:27 +0000 (01:13 +0930)]
Check for libm in a way that shouldn't explode on BeOS

4 years agoDrop the test for lrint too
Ron [Mon, 10 Jun 2013 13:49:15 +0000 (23:19 +0930)]
Drop the test for lrint too

Nothing uses it either.

4 years agoReplace the last AC_TRY_COMPILE
Ron [Mon, 10 Jun 2013 13:33:31 +0000 (23:03 +0930)]
Replace the last AC_TRY_COMPILE

It is declared to be obsolete and we already use AC_COMPILE_IFELSE
everywhere else, so finish the job to avoid confusion and people
pasting more instances of it in later.

Double quote all the parameters to AC_LANG_SOURCE and AC_LANG_PROGRAM.
This is actually required, even if you can get away with not doing it
sometimes, so again set a good example for future changes to follow,
to hopefully avoid people getting bitten harder than they need to be.

4 years agoGet rid of LIBM altogether
Ron [Mon, 10 Jun 2013 13:25:47 +0000 (22:55 +0930)]
Get rid of LIBM altogether

And the exp() check too.  Nothing in the code actually tests for that
and it's irrelevant whether it needs libm or not, since plenty of other
things definitely do need it.

So add the hardcoded -lm back where it is definitely needed (at the
very least for the speex resampler), and make sure it is in LIBS when
we test for lrint and f{min,max}f, since those tests do fail on Linux
if libm isn't linked.

4 years agoIndentation
Ron [Mon, 10 Jun 2013 06:17:18 +0000 (15:47 +0930)]

It's not just for the weak.

4 years agoMore autoconf housekeeping
Ron [Mon, 10 Jun 2013 06:02:22 +0000 (15:32 +0930)]
More autoconf housekeeping

Fix the libm exp() test to not unconditionally add it to everything via
LIBS, and fix opus{enc,dec}_LDADD to actually use LIBM that it sets
rather than hardcoding it there as well.

Use AS_HELP_STRING to format all option descriptions.

Get rid of a bunch of shadow variables that aren't really needed.

Drop the x warts in tests, it really isn't needed, and there are lots
of places we don't use it, so if it was they'd already be exploding.

Let the pkg-config tests actually fail if they don't find the desired
package, rather than also running the manual test which will just fail
again in that case.

Don't overlink flac with -lm in the manual test.  That was fixed in
its .pc in commit 5da86630bee2336e251f0a140f33332af703c43e.

Change --disable-flac to --without-flac.  The normal autoconf idiom is
to use 'enable' for intrinsic features and 'with' for external software
support that is optional.

Change Opus_{CFLAGS,LIBS} to OPUS_{CFLAGS,LIBS}, since that what opus.m4
will try to set if pkg-config isn't available.

Drop the check for __malloc_hook, we don't use it anywhere here.

4 years agoDrop the stdint size tests that we never use anywhere
Ron [Sat, 8 Jun 2013 15:20:30 +0000 (00:50 +0930)]
Drop the stdint size tests that we never use anywhere

These were probably cribbed from libopus, where they aren't used either,
which was probably cribbed from libogg where they are.  We definitely
don't need them here since we get all our sized types from elsewhere.

4 years agoFully automate version updating
Ron [Sat, 8 Jun 2013 15:15:07 +0000 (00:45 +0930)]
Fully automate version updating

This one meets or exceeds the following requirements:

 - Version is checked/updated for every build action when in the git repo.
   Does not require the user to re- ./configure to get the correct version.

 - Version is not updated automatically when using exported tarball source.
   Avoids accidentally getting a wrong version from some other git repo in
   a parent directory of the source, and allows setting the correct version
   for distro package exports.

 - Automatic updating can be manually suppressed.
   For developers doing lots of change/rebuild cycles they don't plan to
   release, when they don't want a full rebuild triggered for every commit,
   and again for every change made immediately after a commit.
   The version will still always be updated if they do a `make dist`.

 - Does not require any manual updating of versions in the mainline git
   repo for each release aside from normal tagging.  The version is
   recorded in one file only, that is automatically generated and will
   never need to be committed.

 - Does not require gnu-make features for the autoconf builds.

It does not currently:

 - Keep a checksum of every source file in tarball releases to mangle the
   version if people modify the tarball source.  Responsible people can
   manually update the version easily though in such cases.

4 years agoFix the phoney spelling of PHONY
Ron [Sat, 8 Jun 2013 14:57:00 +0000 (00:27 +0930)]
Fix the phoney spelling of PHONY

4 years agoTidy up some of the special CPPFLAGS
Ron [Sat, 8 Jun 2013 14:51:59 +0000 (00:21 +0930)]
Tidy up some of the special CPPFLAGS

So that we can see what they are actually for, and only apply them to
the files that actually need them.

4 years agoDrop the inline PACKAGE/VERSION fallback
Ron [Sat, 8 Jun 2013 14:36:43 +0000 (00:06 +0930)]
Drop the inline PACKAGE/VERSION fallback

If this was really needed the other tools would need it too (and would be
failing to build wherever it was).  If the normal mechanism for setting
them isn't working somewhere we should fix that instead.

4 years agoDrop the HAVE_GETOPT_H guard
Ron [Sat, 8 Jun 2013 14:32:28 +0000 (00:02 +0930)]
Drop the HAVE_GETOPT_H guard

If this was really needed the other tools would be failing to compile.
And if they are, we should fix that at the cause for all of them.

4 years agoReplace the homegrown autogen.sh with a call to autoreconf
Ron [Sat, 8 Jun 2013 14:26:32 +0000 (23:56 +0930)]
Replace the homegrown autogen.sh with a call to autoreconf

4 years agoMore gitignorance
Ron [Sat, 8 Jun 2013 14:25:23 +0000 (23:55 +0930)]
More gitignorance

4 years agoAdd picture.c to Makefile.unix.
Gregory Maxwell [Mon, 6 May 2013 16:54:30 +0000 (09:54 -0700)]
Add picture.c to Makefile.unix.

4 years agoRefactor METADATA_BLOCK_PICTURE support.
Timothy B. Terriberry [Sat, 27 Apr 2013 21:12:19 +0000 (14:12 -0700)]

This splits some common parts into a separate picture.h and
It also allows opusinfo to verify the declared
 width/height/depth/colors information against the values in the
 actual image data (if found).

4 years agoAdd METADATA_BLOCK_PICTURE validation to opusinfo.
Timothy B. Terriberry [Sat, 27 Apr 2013 19:33:27 +0000 (12:33 -0700)]
Add METADATA_BLOCK_PICTURE validation to opusinfo.

This will parse such comments and validate the various pieces, and
 print the results in a form similar to that used by the --picture
 argument to opusenc.

4 years agoAdd support for METADATA_BLOCK_PICTURE.
Timothy B. Terriberry [Sat, 27 Apr 2013 17:10:36 +0000 (10:10 -0700)]

The allows embedding album art in Opus files.
The format is the same as for Vorbis files, which is a base64
 encoded VorbisComment version of the format used in FLAC files.
It extends opusenc to provide a --picture option that works the
 same as FLAC's, and automatically parses mime type and image
 dimensions for JPEG, PNG, and GIF files.
It also updates the FLAC input module to convert FLAC's native
 metadata picture blocks to the base64 encoded version.

4 years agoFix R128_TRACK_GAIN tags for flac input.
Timothy B. Terriberry [Thu, 4 Apr 2013 21:28:02 +0000 (14:28 -0700)]
Fix R128_TRACK_GAIN tags for flac input.

opusenc was emitting an extra '=' character.
Thanks to Jan Janssen for the report.

4 years agoAdd copyright headers to FLAC import.
Timothy B. Terriberry [Wed, 20 Feb 2013 12:44:06 +0000 (04:44 -0800)]
Add copyright headers to FLAC import.

4 years agoMake more FLAC reader functions static.
Timothy B. Terriberry [Wed, 20 Feb 2013 12:42:07 +0000 (04:42 -0800)]
Make more FLAC reader functions static.

They weren't being used outside flac.c.

4 years agoBump copyright notices.
Gregory Maxwell [Mon, 18 Feb 2013 18:26:01 +0000 (10:26 -0800)]
Bump copyright notices.

4 years agoopusdec: handle chaining without EOS on the prior chain.
Gregory Maxwell [Thu, 7 Feb 2013 22:34:43 +0000 (14:34 -0800)]
opusdec: handle chaining without EOS on the prior chain.

4 years agoDon't clobber FLAC_CFLAGS and FLAC_LIBS from the command line.
Ralph Giles [Thu, 7 Feb 2013 21:18:14 +0000 (13:18 -0800)]
Don't clobber FLAC_CFLAGS and FLAC_LIBS from the command line.

PKG_CHECK_MODULES() inserts help text about being able to override
the pkg-config output with appropriate environment flags, and indeed
the macro respects this and does nothing if they're both set.

The subsequent fallback checks for system libFLAC were variously
clobbering and ignoring any previous values for the flags variables,
making the help text incorrect and preventing their use to build
against an uninstalled flac library.

Note that PKG_CHECK_MODULES() actually reports 'yes' that it's
found flac if both FLAC_CFLAGS and FLAC_LIBS are non-empty strings,
without verifying that they work.

Thanks to Nekit1234007 for reporting the issue.

4 years agoRequire libFLAC >= 1.1.3 in the no-pkg-config case
Timothy B. Terriberry [Thu, 7 Feb 2013 16:33:11 +0000 (08:33 -0800)]
Require libFLAC >= 1.1.3 in the no-pkg-config case

4 years agoExpose the --discard-comments flag in the opusenc help.
Gregory Maxwell [Tue, 5 Feb 2013 23:06:39 +0000 (15:06 -0800)]
Expose the --discard-comments flag in the opusenc help.

4 years agoMake sure the flac input replay gain tag parsing uses the C locale.
Gregory Maxwell [Tue, 5 Feb 2013 23:04:36 +0000 (15:04 -0800)]
Make sure the flac input replay gain tag parsing uses the C locale.

My best read of the spec suggests that the the replay gain tags should always
 be formatted with the "." radix (rather than, say, ",") and certainly our
 parsing should not depend in the user's locale setting.

4 years agoAdd metadata padding in opusenc.
Gregory Maxwell [Tue, 5 Feb 2013 19:44:07 +0000 (11:44 -0800)]
Add metadata padding in opusenc.

4 years agoDon't include new title/album/date/genre args in the command-line tag.
Gregory Maxwell [Tue, 22 Jan 2013 20:03:43 +0000 (15:03 -0500)]
Don't include new title/album/date/genre args in the command-line tag.

We don't save anything in the command-line tag that would leak file
paths or duplicate other metadata.

4 years agoAdd more standard tag switches to opusenc.
Ralph Giles [Tue, 15 Jan 2013 22:32:22 +0000 (14:32 -0800)]
Add more standard tag switches to opusenc.

This adds --album, --date, and --genre to opusenc, to simplify
adding these common tags. This now matches the subset oggenc
offers direct command line switches for.

4 years agoSave (some) commandline arguments into a comment in opusenc.
Gregory Maxwell [Tue, 15 Jan 2013 21:53:43 +0000 (16:53 -0500)]
Save (some) commandline arguments into a comment in opusenc.

Also, fix the serial option which had gone AWOL.

4 years agoAdd the '=' separator inside comment_add().
Ralph Giles [Tue, 15 Jan 2013 21:48:42 +0000 (13:48 -0800)]
Add the '=' separator inside comment_add().

This avoids having to remember to pass it in as part of the
tag name, which is confusing when the fuction takes both
a tag and a value as separate arguments.

The separator is only added if the tag is non-null, so
the --comment option, which passes tag and value together
in the value argument still works fine.

4 years agoMake it more clear that the rate range range is instantaneous bitrates.
Gregory Maxwell [Tue, 15 Jan 2013 16:26:24 +0000 (11:26 -0500)]
Make it more clear that the rate range range is instantaneous bitrates.

4 years agoUse AC_CONFIG_HEADERS.
Ralph Giles [Wed, 2 Jan 2013 23:55:37 +0000 (15:55 -0800)]

This avoids an obsolescence warning with newer autoconf.

4 years agoRemove extraneous CONFIG_H after #endif in win32/config.h.
Gregory Maxwell [Fri, 21 Dec 2012 19:09:52 +0000 (14:09 -0500)]
Remove extraneous CONFIG_H after #endif in win32/config.h.

4 years agoDocument the intent of the #ifdefs around query_cpu_support.
Ralph Giles [Mon, 17 Dec 2012 23:17:15 +0000 (15:17 -0800)]
Document the intent of the #ifdefs around query_cpu_support.

I found the code bypassing the query definition both when
SSE isn't available _and_ on x86_64, where it is unconditionally
available, confusing. That's not what I expected from general
cpuid reporting implementation.

Instead, it's specialized to the code's use only to warn before
the user hits an invalid instruction, so it makes sense to disable
it in those particular cases.

Thanks to Greg Maxwell for explaining what was going on.

4 years agoFix an indent.
Ralph Giles [Mon, 17 Dec 2012 21:46:56 +0000 (13:46 -0800)]
Fix an indent.

4 years agoAdd FLAC support files to MSVC projects.
Gian-Carlo Pascutto [Wed, 12 Dec 2012 07:03:51 +0000 (08:03 +0100)]
Add FLAC support files to MSVC projects.

4 years agoBump version.
Gregory Maxwell [Tue, 11 Dec 2012 22:53:41 +0000 (17:53 -0500)]
Bump version.

4 years agoAdd serial number argument to opusenc, updates help for FLAC.
Gregory Maxwell [Mon, 10 Dec 2012 15:17:09 +0000 (10:17 -0500)]
Add serial number argument to opusenc, updates help for FLAC.

4 years agoMakefile.unix updates for flac support.
Gregory Maxwell [Sun, 9 Dec 2012 06:47:54 +0000 (01:47 -0500)]
Makefile.unix updates for flac support.

4 years agoAdd FLAC input support.
Timothy B. Terriberry [Sun, 9 Dec 2012 01:10:42 +0000 (17:10 -0800)]
Add FLAC input support.

This copies the tags from FLAC files by default.
It also properly strips ReplayGain tags and converts them into a
 header gain and an R128_TRACK_GAIN tag, according to the current
 OggOpus specification (draft-ietf-codec-oggopus-00).

4 years agoDistribute the getopt implementation for the msvc build. v0.1.6
Ralph Giles [Fri, 7 Dec 2012 23:18:46 +0000 (15:18 -0800)]
Distribute the getopt implementation for the msvc build.

4 years agoAdd win32/version.h to the distribution so it does some good.
Ralph Giles [Fri, 7 Dec 2012 22:58:48 +0000 (14:58 -0800)]
Add win32/version.h to the distribution so it does some good.

Thanks to Greg for pointing out I'd missed this.

4 years agoRemove MSVC incremental linking directives.
Ralph Giles [Fri, 7 Dec 2012 20:33:18 +0000 (12:33 -0800)]
Remove MSVC incremental linking directives.

This avoids linker errors with VS2010 of the form
    failure during conversion to COFF: invalid file or corrupt

The problem does not occur if the project files are updated
to build under VS2012.

4 years agoAdd a static win32/version.h for tarball builds.
Ralph Giles [Fri, 7 Dec 2012 20:08:19 +0000 (12:08 -0800)]
Add a static win32/version.h for tarball builds.

This must be updated in sync with the version numbers in

The autotools build strips the initial 'v' from release
tags, but genversion.bat does not, so I've left it in
the static version.h to match what would be generated
when building from the git tag.

4 years agoAdd -lm to the opusrtp build line.
Ralph Giles [Fri, 7 Dec 2012 17:19:35 +0000 (09:19 -0800)]
Add -lm to the opusrtp build line.

This is a dependency of libopus.

4 years agoBump version.
Gregory Maxwell [Fri, 7 Dec 2012 11:49:39 +0000 (06:49 -0500)]
Bump version.

4 years agoHide uncoupled in opusenc. It's being confused as something to increase quality.
Gregory Maxwell [Mon, 3 Dec 2012 16:16:33 +0000 (11:16 -0500)]
Hide uncoupled in opusenc. It's being confused as something to increase quality.

The option was added primarily for multistream debugging. I don't believe anyone
 is currently using it, but I'll leave it in for now for compatibility and because
 my own test scripts use it.

Uncouplued is not something people should normally be setting as it results in
 lower quality streams which are gratuitously RTP incompatible.

4 years agoFix opusenc crash on win32 for large files; Length detection on 32bit.
Gregory Maxwell [Tue, 27 Nov 2012 20:03:17 +0000 (15:03 -0500)]
Fix opusenc crash on win32 for large files; Length detection on 32bit.

Opusenc was using ftell() whos return is 32 bits on some systems to get the
 input file size and later code was not dealing well with negative sizes.
This commit changes to use 64-bit returning functions where available and
 sanity checks the detected length then treats any cases where the length
 still ends up negative as streams.

Thanks to win32vb on IRC for the report and reproduction.

4 years agoEnable maintainer mode by default on automake 1.11
Ralph Giles [Wed, 14 Nov 2012 20:51:21 +0000 (12:51 -0800)]
Enable maintainer mode by default on automake 1.11

Passing 'enable' as an argument to AM_MAINTAINER_MODE flips the
default to enabled, rather than disabled until automake 1.11.
This is a safer default for a developer-oriented library.

./configure --disable-maintainer-mode is still available for
packagers who what to preserve the upstream build distribution.

On earlier automake versions, the argument appears to have no
effect, so there is no behaviour change for developers using
older autotools.

Based on a patch for opusfile by ron@debian.org.

4 years agoConditionalize the opusrtp socket code.
Ralph Giles [Mon, 5 Nov 2012 22:12:45 +0000 (14:12 -0800)]
Conditionalize the opusrtp socket code.

This lets it compile (but not be functional) on Windows,
which doesn't support the posix socket api.

4 years agoUpdate Makefile.unix to work with mingw.
Ralph Giles [Mon, 5 Nov 2012 20:47:51 +0000 (12:47 -0800)]
Update Makefile.unix to work with mingw.

If $(CC) contains the substring 'mingw' then add some
options required to target windows. This fixes

  make -f Makefile.unix CC=i686-w64-mingw32-gcc

on my Fedora 17 system.

This uses a few more GNU make features, and makes the
Makefile itself less portable. However, we've had some
gnu-isms like := for a couple of releases so far without

4 years agoSimplify native-endian reader.
Ralph Giles [Mon, 5 Nov 2012 06:52:47 +0000 (22:52 -0800)]
Simplify native-endian reader.

We don't need the union, we can memcpy directly into an int.
NB this assumes at least a 32 bit int, since the actual header
field is 32 bits.

Also minor related comment updates

4 years agoAdd a native-endian int32 reader. Fixes an ARM warning.
Ralph Giles [Mon, 5 Nov 2012 06:03:48 +0000 (22:03 -0800)]
Add a native-endian int32 reader. Fixes an ARM warning.

Arm (and other) architectures have stricter alignment requirements
thank x86, so just casting a char* to an int* and reading from it
could cause an exception, and because of this gcc warns on that

I'm pretty sure this particular read would always be aligned in
pracice, since it's the first word of the network packet returned
by pcap, but adding a more general helper is reasonable.

We memcpy() the value into a union, which the compiler should
allocate aligned, and then read the data back out as an int.

Thanks to Ron for reporting the issue, and Greg for suggesting
the fix.

4 years agoLower default bitrates for sampling rates <44.1k. Fix status output.
Gregory Maxwell [Sat, 3 Nov 2012 17:28:30 +0000 (13:28 -0400)]
Lower default bitrates for sampling rates <44.1k. Fix status output.

Getting 64kbit/sec output for a mono 8kHz stream is somewhat surprising.
Instead lower the default rate by a factor of (rate+16000)/64000 for rates
under 44.1kHz. This gives mono 8kHz a more respectable 24kbit/sec rate.

In opusenc the "encoding complete" was incompletely overwriting
the last status line. Now it takes care to overwrite it all the way.

4 years agoFix opusrtp option handling.
Ralph Giles [Tue, 30 Oct 2012 22:49:33 +0000 (15:49 -0700)]
Fix opusrtp option handling.

I don't know what I was thinking, but 'i' wasn't the variable
I wanted to be shifting the argument list by.

4 years agoAlso reject streams where a second packet begins but is not completed on the header...
Gregory Maxwell [Sun, 21 Oct 2012 23:42:03 +0000 (19:42 -0400)]
Also reject streams where a second packet begins but is not completed on the header pages.

4 years agoReject inputs where there is more than one packet on the initial two pages.
Gregory Maxwell [Sun, 21 Oct 2012 22:51:37 +0000 (18:51 -0400)]
Reject inputs where there is more than one packet on the initial two pages.

This will help encoder/streamer implementations that have it wrong
detect their mistake a little earlier.

5 years agoUpdate the hard-coded opus payload type.
Ralph Giles [Thu, 18 Oct 2012 22:49:23 +0000 (15:49 -0700)]
Update the hard-coded opus payload type.

This matches the value used by the webrtc.org codebase now that
the basic support patch has been merged.

5 years agoWarning fix: rename 'state' variable to 'headers'.
Ralph Giles [Tue, 16 Oct 2012 20:58:38 +0000 (13:58 -0700)]
Warning fix: rename 'state' variable to 'headers'.

gcc 4.7.2's -Wshadow can't tell types from variable names.

5 years agoPrint the packet duration as well as size when sending.
Ralph Giles [Thu, 4 Oct 2012 16:31:06 +0000 (09:31 -0700)]
Print the packet duration as well as size when sending.

Helps debug duration-related issues.

5 years agoAccept filenames to send over rtp on the command line.
Ralph Giles [Thu, 4 Oct 2012 07:10:30 +0000 (00:10 -0700)]
Accept filenames to send over rtp on the command line.

Also update the usage and manpage for the send functionality.

5 years agoCalculate timestamps from packet durations.
Ralph Giles [Thu, 4 Oct 2012 04:54:43 +0000 (21:54 -0700)]
Calculate timestamps from packet durations.

Previously, everything was hard-coded to 20 ms. Now we increment
rtp timestamps and ogg granulepos based on the packet duration
as described by the ToC header.

This adds a dependency on libopus, but the opus_packet() calls
as small and can stand alone, so they could be extracted and
supplied separately if necessary.

Granulepos values are still ignored when reading from a .opus
file. It would probably be better to either warn, or use those
as much as possible to set the rtp timestamps to better represent
the recorded data.

5 years agoDon't truncate the rtp packets.
Ralph Giles [Wed, 3 Oct 2012 22:36:11 +0000 (15:36 -0700)]
Don't truncate the rtp packets.

Previously, the length passed to the sendto() function didn't
include the length of the rtp header, truncating every packet
by 12 bytes.

Also use the calculated rtp header size, rather than hard-coding
the minimum size.

5 years agoThe current rtp version is 2.
Ralph Giles [Wed, 3 Oct 2012 21:49:34 +0000 (14:49 -0700)]
The current rtp version is 2.

Previously we were sending version 0, which the webrtc.org
code rightly rejects.

5 years agoOnly clear ogg_stream_state if it's initialized.
Ralph Giles [Wed, 3 Oct 2012 21:25:29 +0000 (14:25 -0700)]
Only clear ogg_stream_state if it's initialized.

Corrects a crash when rtpdump.opus exists, but isn't valid data.

5 years agoRemove a debug statement.
Ralph Giles [Wed, 3 Oct 2012 21:25:11 +0000 (14:25 -0700)]
Remove a debug statement.

5 years agoGet the link-layer header type from pcap_datalink.
Ralph Giles [Wed, 3 Oct 2012 21:02:29 +0000 (14:02 -0700)]
Get the link-layer header type from pcap_datalink.

Instead of using compile-time switches to choose loopback
or eth header parsing in sniff mode, ask libpcap what it
will be supplying and parse based on that.

Also abort if the link layer type isn't ethernet or loopback,
or if the header doesn't indicate IP/UDP.

5 years agoLoopback packet header is host, not big, endian.
Ralph Giles [Wed, 3 Oct 2012 20:08:19 +0000 (13:08 -0700)]
Loopback packet header is host, not big, endian.

This returns the proper value (2) on darwin, matching socket.h:
  #define AF_INET 2 /* internetwork: UDP, TCP, etc. */

5 years agoAdd 'loopback' header parsing to the sniff mode.
Ralph Giles [Tue, 2 Oct 2012 23:57:30 +0000 (16:57 -0700)]
Add 'loopback' header parsing to the sniff mode.

On darwin, pcap returns packets from the loopback device
with a 4 byte 'family' number, instead of the dummy eth
header we get on linux. Add support for parsing this
instead. The build now needs to define either 'LOOP' or
'ETH' to control which is expected.

I don't know if there's a way to ask pcap about this,
but wireshark manages to handle it correctly.

Also hardcode the sniff device to 'lo0' as required by
darwin instead of linux 'lo'. That's where I'm currently

5 years agoImprove trace output.
Ralph Giles [Tue, 2 Oct 2012 23:56:51 +0000 (16:56 -0700)]
Improve trace output.

5 years agoMake the payload type a constant.
Ralph Giles [Tue, 2 Oct 2012 23:53:52 +0000 (16:53 -0700)]
Make the payload type a constant.

This lets us use the same value in the sniff and send functions.

5 years agoReturn after executing --sniff.
Ralph Giles [Tue, 2 Oct 2012 22:23:49 +0000 (15:23 -0700)]
Return after executing --sniff.

Otherwise we fall through to the default sending behaviour.