Commit Graph

53 Commits

Author SHA1 Message Date
Vadim Yanitskiy d5cfaa6a52 pq_alsa.c: print error message if device init fails 2017-09-02 17:03:06 +02:00
Vadim Yanitskiy 83aa99e7a9 pq_alsa.c: handle output buffer underrun
On some systems the ALSA output buffer is pretty big, and
if the audio samples are not being passed into the buffer
quickly enough, it becomes starved for data, resulting
in an error called underrun.

Previously, when it happenned, GAPK used to stop processing
with the following message (where X is a random number):

[+] PQ: Adding ALSA output (dev='default', blk_len=320)
[!] pq_execute(): abort, item returned -1
[+] Processed X frames

According to the ALSA documentation, the pcm_handle
changes its state when the problem happens, and should
be recovered using the snd_pcm_prepare() call. This change
actually does that.
2017-09-02 17:02:37 +02:00
Harald Welte 1452203526 fmt_gsm: document that this format is also used for RTP 2017-05-29 11:25:03 +02:00
Harald Welte 84f4f86fdf fmt_rtp_hr_ietf.c: Fix error encoding this format
We used the wrong length constant during encoding of RTP-HR IETF style.
2017-05-28 21:06:20 +02:00
Harald Welte fa93cec8a1 EFR codec fixup.
While EFR has a canonical format of 31 bytes, the codec_efr.c *does not*
use that canonical format as input.  Rather, it uses the format of .amr
files with a 0x3C header as first byte.  So the resulting encode/decode
functions should not assume 31 bytes, but 32 bytes.
2017-05-28 20:58:10 +02:00
Harald Welte ac3517e715 alsa/file input: return -1 on eof (short read)
This will permit for a more graceful error than the next element in the
processing chain complaining that there's a 0-length input.
2017-05-28 20:06:01 +02:00
Harald Welte d045f1766f procqueue.c: Logging unficiation (always use the [x] prefix) 2017-05-28 20:06:01 +02:00
Harald Welte 6c7fd7958c codac_amr: Remove printf() left from debugging/testing 2017-05-28 19:44:26 +02:00
Harald Welte 0c655bce25 direct all log statements to stderr to avoid breaking stdout data out
The tool has the capability to be used in a pipe, so stdout should
recevie nothing else but actual codec/pcm data.
2017-05-28 19:44:26 +02:00
Harald Welte 7bdf34cc09 fmt_ti: fix lsb/msb mix-up in ti_hr_from_canon()
I noticed that ti-hr format doesn't pass an encode-decode-playback test,
and discussion with tnt resulted in the following conclusion:

19:29 <@tnt> looking at fr and efr, it's always msb_xxx
19:30 <@tnt> and if I ever used it, then most likely it was for decoding
             meaning ti_hr_to_canon would have been used and not the
             other way around.
2017-05-28 19:33:05 +02:00
Harald Welte 076d41aa79 print_help(): Fix formatting of help text 2017-05-28 16:22:43 +02:00
Harald Welte 848db7b662 Add support for RTP with GSM-HR payload according to RFC5993
This is incompatible with the ETSI TS 101 318 format!
2017-05-28 16:18:09 +02:00
Harald Welte dc3589a6be Add support for RTP with GSM-HR payload according to ETSI TS 101 318 2017-05-28 16:18:09 +02:00
Harald Welte f62e7a4936 Add "rtp-efr" format support for RTP payload according to RFC3551 4.5.9
The RTP EFR payload is a bit like the FR payload: one nibble magic
marker, then followed by the actual codec bits.  So we need to
add/remove that magic marker and shift the remainder by one nibble.
2017-05-28 16:18:09 +02:00
Harald Welte 526fc6e5e9 Fix HR codec block sizes
The ETSI reference codec actually uses an array of 20/22 16bit values
rather than a "canonical" format.  The conversion is what fmt_hr_ref.c
is doing.  However, codec_hr.c must then subsequently not check for the
canonical input/output sizes, but those specific to it.
2017-05-28 16:18:09 +02:00
Harald Welte bd42eba35d Print some useful information while putting together the procqueue 2017-05-28 14:30:05 +02:00
Harald Welte 495c694781 print meaningful error messages if something goes wrong in main/pq 2017-05-28 14:30:05 +02:00
Harald Welte 8b01f0ca05 Add AMR codec support
After merging this change, there is support for the AMR codec (by means
of libopencore-amr, which is already used for EFR).

In terms of gapk formats, we introdude
* the "amr-opencore" format, which serves both as the canonical format,
  and as the input format to opencore-amrnb itself.
* the "rtp-amr" format, which is the payload of RFC4867 octet-aligned mode

You can use the following command for a real-time RTP playback for AMR
frames:
  ./gapk -I 0.0.0.0/30000 -f rtp-amr -A default -g rawpcm-s16le
2017-05-28 14:29:59 +02:00
Harald Welte 5912848d2e prepare gapk for dealing with variable-length frames
The existing architecture was modelled around fixed-length codec frame
sizes, which of course fails with multi-rate codecs such as AMR.
2017-05-28 10:44:06 +02:00
Harald Welte 62688b60c2 introduce #defines for canonical length + use them 2017-05-28 10:20:26 +02:00
Harald Welte 2ae47af0be Add ALSA input/output support to GAPK
The ALSA source/sink uses the pcm-s16le format.
2017-05-28 01:56:33 +02:00
Harald Welte 07d691314c RTP: give meaningful error messages if something fails
In fact, it should probably be better to silently ignore all those
errors as opposed to aborting the entire processing queue?  But that's
for another patch...
2017-05-28 01:56:33 +02:00
Harald Welte f3d2ad6a19 add some more comments throughout the code 2017-05-27 16:42:14 +02:00
Sylvain Munaut db94df5f9c main: Fixup the help screen
Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
2015-12-30 13:06:40 +01:00
Sylvain Munaut d392a89cc8 benchmark: Make sure to print to stderr
stdout can be used for data output ...

Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
2015-12-30 10:45:22 +01:00
Harald Welte 7a04624563 Add cycle benchmarking support
This enables benchmarking of the codec.  It will print
the amount of CPU cycles needed for encoding/decoding a single
20ms frame on average.
2014-05-08 19:18:01 +02:00
Sylvain Munaut 2c8b3fd281 build: Use AM_CPPFLAGS in Makefile.am
Since automake 1.13 INCLUDES is depricates and causes a warning

Inspired from similar patches by Alexander Huemer for other osmocom
projects

Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
2013-06-17 08:53:21 +02:00
Harald Welte e7e12cc9aa gapk: make sure the output file is closed/flushed on ctrl+c
This is useful particularly in case you are reading from RTP and writing
to a file, and don't want truncated codec frames in your file.
2013-02-11 11:47:56 +01:00
Harald Welte ce94d971e1 gapk: Add support for RTP input/output streams
Instead of having only file-based I/O, this enables gapk to receive and
send RTP streams, e.g. from live GSM network equipment like
sysmoBTS/nanoBTS.

Support is currently simplistic.  On transmit, there is hard-coded codec
type of full-rate GSM.  On receive-side, we should auto-detect the
format based on frame size and/or payload type, but we don't do that yet
at all.
2013-02-11 11:38:23 +01:00
Harald Welte f7f0c91ca8 gapk main: move fh_in and fh_out to sub-structures in a union
this is done in preparation to provide something else but file
input/output.
2013-02-11 09:26:36 +01:00
Sylvain Munaut db837250de codec: Fix opencore nb include path
Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
2012-12-08 19:14:11 +01:00
Sylvain Munaut e2c5719d74 format/fmt_ti: Add support for EFR variant
Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
2011-02-25 18:12:25 +01:00
Sylvain Munaut b1525d67fe format/fmt_ti: Add support for HR variant
Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
2011-02-25 16:58:36 +01:00
Sylvain Munaut cfaec3a2f6 format: Add support for the TI calypso/locosto dumped buffer format
Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
2011-02-25 15:31:54 +01:00
Sylvain Munaut f624d18067 codec: Fix EFR codec encoder function. Return value is #bytes
32 is the normal value

Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
2010-11-12 20:53:53 +01:00
Sylvain Munaut a0c4d21bf6 [4/4] HR support: Add hooks in gapk to use libgsmhr for encoding/decoding
Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
2010-11-12 20:47:30 +01:00
Sylvain Munaut 4604976a5f Add a real main method to does the job
Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
2010-11-11 22:58:57 +01:00
Sylvain Munaut 456758c808 format: Add support for Raw PCM Signed 16 bits Little Endian
Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
2010-11-11 22:58:20 +01:00
Sylvain Munaut 9843418a33 procqueue: Add Codec tasks
Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
2010-11-11 20:45:24 +01:00
Sylvain Munaut 792d04135e procqueue: Add format conversion tasks
Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
2010-11-11 20:45:24 +01:00
Sylvain Munaut d9fb0e37c8 procqueue: Add file related tasks
Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
2010-11-11 20:45:24 +01:00
Sylvain Munaut 3c0a4fba8a procqueue: Add some mechanism to queue 'processing items' on the frames
Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
2010-11-11 20:45:24 +01:00
Sylvain Munaut 8552b9dc0c codec/efr: Add support for encoding/decoding using OpenCore AMR NB
Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
2010-11-11 20:26:41 +01:00
Sylvain Munaut dc5b38b991 codec/fr: Add support for encoding/decoding using libgsm
Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
2010-11-11 20:26:41 +01:00
Sylvain Munaut 24b761218f format: Add function to get format by name
Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
2010-11-11 20:26:41 +01:00
Sylvain Munaut 723df06dff format: Add support for .amr files encapsulating EFR data
Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
2010-11-11 20:26:41 +01:00
Sylvain Munaut 6c96cc28b3 format: Add support for the file read/written by the Racal 6103E ms test set
Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
2010-11-11 20:26:41 +01:00
Sylvain Munaut f905983b05 format: Add support for the 3GPP HR reference vocoder file/frame formats
Yes ... they use a different format for the decoder input than for the
encoder output ...

Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
2010-11-05 16:41:47 +01:00
Sylvain Munaut 5e380d0726 format: Add support for classic .gsm file/frame format
Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
2010-11-05 16:41:47 +01:00
Sylvain Munaut 0f7e52dbb5 format: Add initial format framework
Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
2010-11-05 16:41:47 +01:00