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. -- Måns Rullgård [email protected] _______________________________________________ libav-devel mailing list [email protected] https://lists.libav.org/mailman/listinfo/libav-devel
