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
