[FFmpeg-devel] [PATCH] Add DPX decoder rev-9

Vitor Sessak vitor1001
Wed May 27 21:18:50 CEST 2009


Jimmy Christensen wrote:
> On 2009-05-27 14:30, Michael Niedermayer wrote:
>> On Tue, May 26, 2009 at 05:51:25AM +0200, Jimmy Christensen wrote:
>>> On 2009-05-25 23:58, Michael Niedermayer wrote:
>>>> On Mon, May 25, 2009 at 08:54:12AM +0200, Jimmy Christensen wrote:
>>>>> On 2009-05-15 03:51, Michael Niedermayer wrote:
>>>>>> On Mon, May 11, 2009 at 11:31:25AM +0200, Jimmy Christensen wrote:
>>>> [...]
>>>>>>
>>>>>>
>>>>>> [...]
>>>>>>> +    for (x = 0; x<    s->height; x++) {
>>>>>>> +        uint8_t *dst = ptr;
>>>>>>> +        for (y = 0; y<    s->width; y++) {
>>>>>>
>>>>>>> +            rgbBuffer = AV_RB32(buf);
>>>>>>> +            memcpy(&rgb10Field,&rgbBuffer, 4);
>>>>>>> +            rgb16Field.R = rgb10Field.R * 64; // 10-bit>    16-bit
>>>>>>> +            rgb16Field.G = rgb10Field.G * 64; // 10-bit>    16-bit
>>>>>>> +            rgb16Field.B = rgb10Field.B * 64; // 10-bit>    16-bit
>>>>>>> +            memcpy(dst,&rgb16Field, dstBpp);
>>>>>>
>>>>>> not portable
>>>>>>
>>>>>
>>>>> I rewrote a little, but still uses memcpy from rgb16Field to dst, 
>>>>> since
>>>>> that should actually be portable.
>>>>
>>>> you will have to quote page and pararaph of the C standard that 
>>>> gurantees
>>>> bitfields to work the way you seem to belive they do
>>>>
>>>
>>> So the bit masking is fine (RED10, GREEN10 and BLUE10), but I need to
>>> change the memcpy?
>>
>> we need C code that works, any construct that has undefined or 
>> implementation
>> defined behavior is unacceptable. That is with a few exceptions that 
>> happen
>> to be exceedingly inconvenient to avoid or would cause speedloss and 
>> happen
>> to work on all for us relevant implementations, like
>> signed>>  or CHAR_BIT == 8
>>
> 
> I'm not familiar with coding on other platforms and what code is 
> portable or not. I'm just seeing that it works here and try to get some 
> input on how to fix the code to make it portable. So forgive my lack of 
> knowledge. I was merely asking for a yes or no.

I suggest you remove completely the RGB16Field struct and just use

> +    for (x = 0; x < s->height; x++) {
> +        uint16_t *dst = ptr;

instead of

> +    for (x = 0; x < s->height; x++) {
> +        uint8_t *dst = ptr;

as a secondary benefit, the code should be simpler (no memcpy()).

-Vitor



More information about the ffmpeg-devel mailing list