On 08/09/2011 08:49 AM, Måns Rullgård wrote:

> Justin Ruggles <[email protected]> writes:
> 
>> On 08/09/2011 07:18 AM, Måns Rullgård wrote:
>>
>>> Justin Ruggles <[email protected]> writes:
>>>
>>>>>> +    LOCAL_ALIGNED_16(CoefType, cpl_coords,      [AC3_MAX_BLOCKS], 
>>>>>> [AC3_MAX_CHANNELS][16]);
>>>>>>  #if CONFIG_AC3ENC_FLOAT
>>>>>> -    LOCAL_ALIGNED_16(float,   cpl_coords,       [AC3_MAX_BLOCKS], 
>>>>>> [AC3_MAX_CHANNELS][16]);
>>>>>>     LOCAL_ALIGNED_16(int32_t, fixed_cpl_coords, [AC3_MAX_BLOCKS], 
>>>>>> [AC3_MAX_CHANNELS][16]);
>>>>>> +#else
>>>>>> +#define fixed_cpl_coords cpl_coords
>>>>>> +#endif
>>>>>
>>>>> Ehw. That is a little icky and will lead to a hard-to-debug conflict
>>>>> later on. I'm wondering if you could use something like a struct
>>>>> (float encoder) vs union (fixed-point encoder) here instead, i.e.:
>>>>>
>>>>> #if CONFIG_AC3ENC_FLOAT
>>>>> struct {
>>>>> #else
>>>>> union {
>>>>> #endif
>>>>>     LOCAL_ALIGNED_16(CoefType, cpl_coords,      [AC3_MAX_BLOCKS],
>>>>> [AC3_MAX_CHANNELS][16]);
>>>>>     LOCAL_ALIGNED_16(int32_t, fixed_cpl_coords, [AC3_MAX_BLOCKS],
>>>>> [AC3_MAX_CHANNELS][16]);
>>>>> } someprefix;
>>>>
>>>> Yeah, I know it's pretty ugly. I didn't think of a union/struct combo.
>>>> It also seems out-of-the-ordinary, but at least it's C and not
>>>> pre-processor trickery. I'll give it a try.
>>>
>>> What about simply int32_t *fixed_cpl_coords = cpl_coords?
>>
>> Ok, I can do that. Multiplying out the pointer positions within the flat
>> array is not too painful in this situation.
> 
> Sorry, make that int32_t (*fixed_cpl_coords)[AC3_MAX_CHANNELS][16].
> Then indexing will work unchanged.  The LOCAL_ALIGNED_16 macro already
> declares it like that on most targets.


Ah, much better.

-Justin
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to