refs https://code.videolan.org/videolan/vlc/-/issues/27421
Unified · Split
| @@ -615,24 +615,30 @@ static void create_channel_config(NeAACDecStruct *hDecoder, NeAACDecFrameInfo *h · 614 unmodified lines | ||
| 615 | 615 | if (hDecoder->pce_set) |
| 616 | 616 | { |
| 617 | 617 | uint8_t i, chpos = 0; |
| 618 | − uint8_t chdir, back_center = 0; | |
| 618 | + uint8_t chdir, back_center = 0, total = 0; | |
| 619 | 619 | |
| 620 | 620 | hInfo->num_front_channels = hDecoder->pce.num_front_channels; |
| 621 | + total += hInfo->num_front_channels; | |
| 621 | 622 | hInfo->num_side_channels = hDecoder->pce.num_side_channels; |
| 623 | + total += hInfo->num_side_channels; | |
| 622 | 624 | hInfo->num_back_channels = hDecoder->pce.num_back_channels; |
| 625 | + total += hInfo->num_back_channels; | |
| 623 | 626 | hInfo->num_lfe_channels = hDecoder->pce.num_lfe_channels; |
| 627 | + total += hInfo->num_lfe_channels; | |
| 624 | 628 | |
| 625 | 629 | chdir = hInfo->num_front_channels; |
| 626 | 630 | if (chdir & 1) |
| 627 | 631 | { |
| 628 | 632 | #if (defined(PS_DEC) || defined(DRM_PS)) |
| 629 | − /* When PS is enabled output is always stereo */ | |
| 630 | − hInfo->channel_position[chpos++] = FRONT_CHANNEL_LEFT; | |
| 631 | − hInfo->channel_position[chpos++] = FRONT_CHANNEL_RIGHT; | |
| 632 | −#else | |
| 633 | + if( total == 1 ) | |
| 634 | + { | |
| 635 | + /* When PS is enabled output is always stereo */ | |
| 636 | + hInfo->channel_position[chpos++] = FRONT_CHANNEL_LEFT; | |
| 637 | + hInfo->channel_position[chpos++] = FRONT_CHANNEL_RIGHT; | |
| 638 | + } else | |
| 639 | +#endif | |
| 633 | 640 | hInfo->channel_position[chpos++] = FRONT_CHANNEL_CENTER; |
| 634 | 641 | chdir--; |
| 635 | −#endif | |
| 636 | 642 | } |
| 637 | 643 | for (i = 0; i < chdir; i += 2) |
| 638 | 644 | { |