[FFmpeg-devel] [PATCH] Fast half-float to float conversion
Jimmy Christensen
jimmy
Tue Jun 30 11:06:27 CEST 2009
On 2009-06-30 10:57, M?ns Rullg?rd wrote:
> Jimmy Christensen<jimmy at ghost.dk> writes:
>
>> On 2009-06-30 10:01, M?ns Rullg?rd wrote:
>>> Jimmy Christensen<jimmy at ghost.dk> writes:
>>>
>>>> Hi,
>>>>
>>>> I'm almost done with my OpenEXR decoder, but since it can work in a
>>>> half-float format I wanted a fast half-float to float conversion. I
>>>> found one in the FOX toolkit which uses a table lookup. I didn't want
>>>> the table lookup in the OpenEXR decoder only, since a few other
>>>> formats can use half-floats aswell. So instead I submit the half-float
>>>> to float first as a libavutil header.
>>>
>>> ARM NEON has hardware support for half-precision floating point. This
>>> conversion should be done in a way that allows using such CPU-specific
>>> functionality.
>>>
>>
>> I don't have access to any ARM NEON processors. How should I proceed
>> with this?
>
> Make the function convert an array instead of single values, and put
> some macros or something in place so it can be overridden by
> cpu-specific code. See bswap.h or mathops.h for examples.
>
Will do. Thanks for the notice.
>>>> The code is derivative work from the FOX toolkit, but I have already
>>>> asked permission to include it in the ffmpeg project, granted that I
>>>> stated origin and a link to the paper describing the table lookup. The
>>>> paper can be seen here :
>>>>
>>>> http://www.fox-toolkit.org/ftp/fasthalffloatconversion.pdf
>>>>
>>>> I have tested the code with the before mentioned OpenEXR decoder and
>>>> it works as expected with half floats.
>>>
>>> Those tables look trivial enough that I have a hard time seeing how
>>> they could be covered by copyright at all. It's just a simple
>>> rescaling.
>>
>> Hehe. Was just a simple copy/paste from a previous header :) Will
>> remove the copyright. I just asked for permission of pure politeness.
>
> Is it copied from someone else's code? If so, placing your name in
> the copyright header is wrong. What copyright statement, if any, was
> on the original?
>
The code is modified from C++ to standard C and names are changed. Will
add the original authors name in copyright aswell.
The original copyright from FXhalf.h/cpp :
> /********************************************************************************
> * *
> * H a l f - F l o a t S u p p o r t *
> * *
> *********************************************************************************
> * Copyright (C) 2008,2009 by Jeroen van der Zijp. All Rights Reserved. *
> *********************************************************************************
> * This library is free software; you can redistribute it and/or modify *
> * it under the terms of the GNU Lesser General Public License as published by *
> * the Free Software Foundation; either version 3 of the License, or *
> * (at your option) any later version. *
> * *
> * This library is distributed in the hope that it will be useful, *
> * but WITHOUT ANY WARRANTY; without even the implied warranty of *
> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
> * GNU Lesser General Public License for more details. *
> * *
> * You should have received a copy of the GNU Lesser General Public License *
> * along with this program. If not, see <http://www.gnu.org/licenses/> *
> ********************************************************************************/
> It is also debatable whether we need the conversion to support
> denormal numbers. I doubt these will occur in image data. If this is
> not required, simple arithmetic conversion of exponent and mantissa is
> probably faster than table lookup.
>
Will do some testing.
The main point of posting it was to get some input on the approach.
--
Best Regards
Jimmy Christensen
Developer
Ghost A/S
More information about the ffmpeg-devel
mailing list