On 06/13/2011 03:38 PM, Alex Converse wrote: > On Mon, Jun 13, 2011 at 11:41 AM, Justin Ruggles > <[email protected]> wrote: >> >> Only the low 31 bits are used for channel assignments. The high bit is a >> special-case flag bit used to indicate that any channel layout is supported. > > Is masking here the best choice (vs zero which seems to mean > unspecified or moving the channels to a new position)? Has a sample > where we mask off the top channels been tested?
Setting it to zero is not as good because at least the low 18 bits match defined channels. The remaining channels without bits set in the channel mask would still be undefined. MS documentation says "Should nChannels exceed the number of bits set in dwChannelMask, then the remaining channels are not assigned to any particular speaker location." So here are the choices: 1) We keep channel_layout low 32 bits compatible with dwChannelMask and move all of channel mask values that aren't defined in WAVEFORMATEXTENSIBLE to the high 32 bits. This assumes Microsoft will actually use bits 19 to 31 at some point and that we want to avoid changing our API if that happens. 2) We make channel_layout compatible with only the defined values for dwChannelMask (low 18 bits) and mask off the rest. This allows us to keep AV_CH_STEREO_LEFT/RIGHT as-is and even use the other low bits if we want. As for testing samples... I don't have any files which utilize channels other than those defined in WAVEFORMATEXTENSIBLE. But clearly writing bits other than the low 18 is using reserved values and can only lead to no good. -Justin _______________________________________________ libav-devel mailing list [email protected] https://lists.libav.org/mailman/listinfo/libav-devel
