Current multi-channel mixing is as follows:
uint32_t left_channels = channel_front_left | channel_back_left | channel_front_center_left | channel_side_left | channel_top_front_left | channel_top_back_left;
uint32_t right_channels = channel_front_right | channel_back_right | channel_front_center_right | channel_side_right | channel_top_front_right | channel_top_back_right;
uint32_t center_channels = channel_front_center | channel_lfe | channel_back_center | channel_top_center | channel_top_front_center | channel_top_back_center;
std::array<int8_t, defined_channel_count> mix_factors{0, 0, -3, -10, -3, -3, -6, -6, -6, -3, -3, -6, -3, -6, -3, -3, -6, -3}; // front_left, front_right, front_center, lfe, back_left, back_right, front_center_left, front_center_right, back_center, side_left, side_right, top_center, front_left, front_center, front_right, back_left, back_center, back_right
Left panel gets left and center channels. Right panel right gets right and center channels. The mix factors attenuate center channels by half, generally, since they are mixed into both channels. There are too many channels (18) to intuitively allow for a specific mix factor for each. In case it wasn't obvious, the mix factors are in decibels.