Age | Commit message (Collapse) | Author | Files | Lines |
|
In the osmo_gapk_pq_prepare() we do allocate an item's buffer
conditionally, only when its type is not sink, because an output
buffer is not required for sink.
Let's use a bit more elegant way to check, whether item is sink.
Change-Id: I770a1d02273d9d8301a9e4ec72426fb8f4060277
|
|
The osmo_init_logging() was deprecated.
Change-Id: Ic30a924571feb273274587998e87c86b688c3544
|
|
This change fixes parallel building problem, when osmo-gapk was
being compiled before its libosmogapk dependency:
make[2]: *** No rule to make target '../src/libosmogapk.la',
needed by 'osmo-gapk'. Stop.
make[2]: *** Waiting for unfinished jobs....
For some reason, automake ignores a dependency if the full
path is provided:
$(top_builddir)/src/libosmogapk.la
while the relative path solves the problem:
libosmogapk.la
Closes: OS#2907
Change-Id: I3fdd1731bd372bbb42fe57981e757386e8ede0f0
|
|
The previous GAPK implementation was represented by a single
executable. So, all audio transcoding operations were available
only via calling the 'gapk' binary. This approach didn't allow
external applications to benefit from using GAPK API directly.
The following set of changes separates the common code into a
shared library called 'libosmogapk', linking the 'gapk' binary
against it:
- 95e6664 Introduce a shared 'libosmogapk' library
- 30209ce Install GAPK headers to '${includedir}/osmocom/gapk/'
- a8d4657 Add an 'osmo_gapk' prefix to the exposed symbols
- 40d59f1 Add a pkg-config manifest for libosmogapk
- 4f0a47d Add the symbol export map for libosmogapk
All memory management operations are now based on talloc library:
- 3c20dac libosmogapk: use talloc for memory management
- 5cabe1e osmo-gapk: use talloc for memory management
Integrated Osmocom logging framework:
- c35ba8a libosmogapk: use Osmocom logging framework
- 4b7cd2c osmo-gapk: drop useless printf calls
- 0fe18af osmo-gapk: use Osmocom logging framework
- 11943bf osmo-gapk: adjust application verbosity
Integrated GNU Autotest environment and basic test coverage:
- f069eb3 Init automake test environment
- 1fe6a9b tests: add procqueue test
- 3e9e57f tests: add pq_file test
- 9d2b15d tests: add pq_rtp test
- f59f3f1 tests: add format / codec transcoding tests
For more details, see commits history.
Change-Id: I3c6d4a9d326ee49153e4ad83823d094831c112da
|
|
Let's use the common string representation for item category
names, defined in the shared header, instead of defining
them in every file.
Change-Id: Ie0c449d77fa383cad27f67b8ce902bd071342dbb
|
|
Abusing the talloc hierarchical nature may cause some problems,
e.g. on embedded systems with emulated talloc API. Let's release
the memory allocated for a state explicitly.
Change-Id: Ie675a92b1e52a4886dc447af19f65ff5e12a4c40
|
|
The BENCHMARK_STOP should be called with a correct codec type and
a correct operation type (encode or decode). Otherwise the results
could be incorrect.
Change-Id: Ie90e85ca8d9ec3175a58dde60525e0b7d6daf608
|
|
The stdin / stdout operation was broken by a new check condition,
introduced by the 15fa605576a81803c57a144231e9e9720aa133a1.
|
|
The talloc_size() call sets the current file name and the current
line number as name for chunk being allocated. This combination
is not so informative during debugging, so let's use the static
'.buffer' string as context name for item's output buffer.
|
|
Previously a queue description string was allocated without
setting proper parental talloc context and proper name.
|
|
|
|
|
|
In order to give advanced control over a processing queue,
it would be better to have the checking function separated from
the osmo_gapk_pq_prepare(). Moreover, this change introduces an
additional 'strict' checking mode that requires a queue to have
a source item first and a sink item in the last position.
|
|
This change adds two meta-information fields to the processing
queue item structure. Both of them will be used for more
detailed logging and for the human-readable processing
queue description.
|
|
There are currently three types of prcessing queue items:
- source (file, alsa, rtp)
- proc (format, codec)
- sink (file, alsa, rtp)
Let's assign corresponding type for each item.
This would facilitate logging and the queue checking.
|
|
Since this change, every processing queue may optionally have
an associated human-readable name. If name is not required,
NULL should be passed to the osmo_gapk_pq_create().
|
|
It would be better to have an 'osmo_gapk' prefix for exposed
symbols only. Both internal logging variables aren't exposed,
so they shouldn't have one.
|
|
|
|
In order to simplify memory leak debugging, this change introduces
the library's internal talloc context that may be changed by
external application by calling the osmo_gapk_set_talloc_ctx().
|
|
There are not so much code, related to internal logging subsystem.
So, there is no reason to keep a few lines in a dedicated file.
In the future one may also be used for other routines.
|
|
The memory, allocated by codec_efr_init() / codec_amr_init(),
was not cleaned after calling the codec_exit(). Found using
talloc memory debugging API.
|
|
|
|
Previously both ALSA source and sink were out of attention.
|
|
Previously the osmo-gapk application used to exit as soon as all
the frames are processed, no matter has the sink finished its
internal processing (e.g. ALSA playback).
|
|
Using the snd_pcm_avail_update() call from ALSA API it's possible
to know, how much samples are still to be processed.
|
|
In some cases it's required to wait for some queue items
to finish processing. For example, the ALSA sink writes the
audio samples to the buffer in non-blocking mode, so as soon
as all of them will be written, a program may finish execution,
causing the playback abort.
To prevent that, this change extends the library's API, allowing
each queue item to have a processing state callback that returns
a positive integer if processing is not finished yet,
and 0 otherwise.
|
|
Instead of immediately shutting down the application, it is
better to try to break the processing queue first, and stop
the execution immediately if second SIGINT is received.
|
|
This change allows user to enable advanced verbosity using the
'-v' command line option, which is disabled by default.
|
|
|
|
The printf() writes the text into stdout, which may be undesirable
in some use cases. Moreover, the printed information was redundant.
So, let's drop such calls.
|
|
Since this change, the libosmogapk uses the Osmocom logging
framework. By default, logging is disabled and could be enabled
by the external applications calling the osmo_gapk_log_init()
with a desired log target as an argument.
|
|
Since GAPK package contains a library and the representative
osmo-gapk application, the 'main.c' looks a bit confusing. Let's
use the common naming scheme.
|
|
Previously the code intended to shutdown the osmo-gapk application
was repeated two times. It's better to have a single function.
|
|
If the codec benchmarking is required in particular case, it
could be activated by a special command line option introduced
by this change.
|
|
The usage of linuxlist is more flexible than having a limited
array of pointers. This approach allows to have as much items
in a processing queue as required.
|
|
|
|
An output buffer belongs to its queue item, so it will be more
correctly to store its pointer inside the osmo_gapk_pq_item.
|
|
|
|
To simplify the benchrarking process via the library API, this
change introduces two new functions, which are intended to
provide total cycle and frame count.
|
|
Having statically allocated memory for benchmark data of every
codec causes high memory usage, especially if actual benchmarking
is not required for a particular use case. Instead of that, let's
provide an optional opportunity to enable benchmarking for a
particular codec by calling the osmo_gapk_bench_enable(). The
required amount of memory would be allocated, and then can be
freed by calling the osmo_gapk_bench_free() or manually.
|
|
There is no need to expose the implementation details of both
BENCHMARK_START and BENCHMARK_STOP macros via public header.
This change moves them to a separate private header 'bench.h'.
|
|
The benchmark_dump() is only used by the osmo-gapk binary, and
is intended to prepare and print benchmarking results to stderr,
what is most likely unusable for the library users.
|
|
To avoid a naming conflict between libosmogapk and other projects
during linkage, all the exposed symbols should have an unique
prefix. Let's use 'osmo_gapk' for that.
|
|
To be able to use processing queues from outside, the pq struct
should be shared in the corresponding header file.
|
|
To be able to use the library, external applications need to know,
which symbols are exposed. This information is provided by header
files, which are being installed to a system's ${includedir}
since this change.
|
|
This is a common practice of all Osmocom executables
to have an 'osmo' prefix. Let's follow this here too.
|
|
The previous GAPK implementation was represented as a single
executable. So, all audio transcoding operations were available
only by calling the 'gapk' binary. This approach didn't allow
external applications to benefit from using GAPK API directly.
Since there are some projects (such as GR-GSM and OsmocomBB),
which are potential users of GAPK code base, it would be better
to have all transcoding functions within a shared library.
So, this change separates the common code into a shared library,
named 'libosmogapk', and links the 'gapk' binary against one.
Currently there are no shared headers, pkg-config manifest and
the export map, but they will be done latter.
|
|
|
|
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.
|
|
|