[FFmpeg-devel] [PATCH] avcodec/alsdec: implement floating point decoding

Paul B Mahol onemda at gmail.com
Tue Jul 19 09:59:21 EEST 2016


On 7/19/16, Umair Khan <omerjerk at gmail.com> wrote:
> On Tue, Jul 19, 2016 at 3:08 AM, Michael Niedermayer
> <michael at niedermayer.cc> wrote:
>> On Mon, Jul 18, 2016 at 11:42:48PM +0530, Umair Khan wrote:
>>> On Sun, Jul 17, 2016 at 3:38 PM, Michael Niedermayer
>>> <michael at niedermayer.cc> wrote:
>>> > On Sun, Jul 17, 2016 at 11:54:49AM +0200, Michael Niedermayer wrote:
>>> >> On Sun, Jul 17, 2016 at 09:00:48AM +0530, Umair Khan wrote:
>>> >> > Hi,
>>> >> >
>>> >> > On Sun, Jul 17, 2016 at 12:25 AM, Thilo Borgmann
>>> >> > <thilo.borgmann at mail.de> wrote:
>>> >> > > Hi,
>>> >> > >
>>> >> > >> From 70e65b26cc3f84c9c664c30808b43a5e1cf16eaa Mon Sep 17 00:00:00
>>> >> > >> 2001
>>> >> > >> From: Umair Khan <omerjerk at gmail.com>
>>> >> > >> Date: Sat, 16 Jul 2016 23:52:39 +0530
>>> >> > >> Subject: [PATCH 1/1] avcodec/alsdec: implement floating point
>>> >> > >> decoding
>>> >> > >>
>>> >> > >> It conforms to RM22 version of the reference codec.
>>> >> > >>
>>> >> > >> Signed-off-by: Umair Khan <omerjerk at gmail.com>
>>> >> > >> ---
>>> >> > >>  libavcodec/Makefile           |   2 +-
>>> >> > >>  libavcodec/alsdec.c           | 284
>>> >> > >> +++++++++++++++++++++++++++++++++++++++++-
>>> >> > >>  libavcodec/mlz.c              | 171 +++++++++++++++++++++++++
>>> >> > >>  libavcodec/mlz.h              |  69 ++++++++++
>>> >> > >>  libavutil/softfloat_ieee754.h | 115 +++++++++++++++++
>>> >> > >>  5 files changed, 638 insertions(+), 3 deletions(-)
>>> >> > >>  create mode 100644 libavcodec/mlz.c
>>> >> > >>  create mode 100644 libavcodec/mlz.h
>>> >> > >>  create mode 100644 libavutil/softfloat_ieee754.h
>>> >> > >>
>>> >> > >> diff --git a/libavcodec/Makefile b/libavcodec/Makefile
>>> >> > >> index abef19e..a03adf5 100644
>>> >> > >> --- a/libavcodec/Makefile
>>> >> > >> +++ b/libavcodec/Makefile
>>> >> > >> @@ -163,7 +163,7 @@ OBJS-$(CONFIG_ALAC_DECODER)            +=
>>> >> > >> alac.o alac_data.o alacdsp.o
>>> >> > >>  OBJS-$(CONFIG_ALAC_ENCODER)            += alacenc.o alac_data.o
>>> >> > >>  OBJS-$(CONFIG_ALIAS_PIX_DECODER)       += aliaspixdec.o
>>> >> > >>  OBJS-$(CONFIG_ALIAS_PIX_ENCODER)       += aliaspixenc.o
>>> >> > >> -OBJS-$(CONFIG_ALS_DECODER)             += alsdec.o bgmc.o
>>> >> > >> mpeg4audio.o
>>> >> > >> +OBJS-$(CONFIG_ALS_DECODER)             += alsdec.o bgmc.o mlz.o
>>> >> > >> mpeg4audio.o
>>> >> > >>  OBJS-$(CONFIG_AMRNB_DECODER)           += amrnbdec.o
>>> >> > >> celp_filters.o   \
>>> >> > >>                                            celp_math.o
>>> >> > >> acelp_filters.o \
>>> >> > >>                                            acelp_vectors.o
>>> >> > >>      \
>>> >> > >> diff --git a/libavcodec/alsdec.c b/libavcodec/alsdec.c
>>> >> > >> index a7e58a2..c710fc3 100644
>>> >> > >> --- a/libavcodec/alsdec.c
>>> >> > >> +++ b/libavcodec/alsdec.c
>>> >> > >> @@ -35,8 +35,11 @@
>>> >> > >>  [...]
>>> >> > >>
>>> >> > >> +/** multiply two softfloats and handle the rounding off
>>> >> > >> + */
>>> >> > >> +static SoftFloat_IEEE754 multiply(SoftFloat_IEEE754 a,
>>> >> > >> SoftFloat_IEEE754 b) {
>>> >> > >> [...]
>>> >> > >
>>> >> > > Why is this in alsdec.c?
>>> >> >
>>> >> > This is not the actual IEEE 754 multiplication. It is as is
>>> >> > mentioned
>>> >> > in the reference spec.
>>> >> > The typical one for 754 floats, I've implemented here separately -
>>> >> > https://github.com/omerjerk/FFmpeg/commit/d6cd4bf66b9da46dd87580d7d974ce44abdcfba2#diff-4dd4b2d8d523f336fbefa96e9252187cR93
>>> >> >
>>> >> > > [...]
>>> >> > >
>>> >> > >> diff --git a/libavcodec/mlz.c b/libavcodec/mlz.c
>>> >> > >> new file mode 100644
>>> >> > >> index 0000000..cb2ed6a
>>> >> > >> --- /dev/null
>>> >> > >> +++ b/libavcodec/mlz.c
>>> >> > >> [...]
>>> >> > >
>>> >> > >> +static int input_code(GetBitContext* gb, int len) {
>>> >> > >> +    int tmp_code = 0;
>>> >> > >> +    int i;
>>> >> > >> +    for (i = 0; i < len; ++i) {
>>> >> > >> +        tmp_code += get_bits1(gb) << i;
>>> >> > >> +    }
>>> >> > >> +    return tmp_code;
>>> >> > >> +}
>>> >> > >
>>> >> > > Is there nothing in get_bits.h that solves that already?
>>> >> > >
>>> >> > > -Thilo
>>> >> >
>>> >> > I'm not sure. It is just reading the bits in the reverse order. May
>>> >> > be
>>> >> > someone else can help.
>>> >>
>>> >> theres asv2_get_bits()
>>> >> if it works here it could be shared
>>> >
>>> > note though asv2_get_bits() is maximum 8 bits, for more bits more
>>> > table lookups or a bigger table is needed
>>>
>>> What should be the best way to use this function? It is not present in
>>> any header file.
>>
>> it could be moved into a header and made static inlinw with a more
>> generic name.
>> That is if it works ...
>
> I did this for now and it doesn't seem to read the reversed bits properly.
> https://github.com/omerjerk/FFmpeg/commit/c58bdd74518444022c753e24d8048e2fd9febd72
>
> No idea what's wrong. If it was reversing the bits properly, this code
> should've worked I guess.

Because it is wrong, use what you had before.

>
> -Umair
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>


More information about the ffmpeg-devel mailing list