avcodec/wavpackenc: add support for encoding unspec channel layouts

Also write 0 for chmask if mask have bits outside of first 32 bits,
as wavpack does not support more bits than 32 for channel layouts.
This commit is contained in:
Paul B Mahol 2023-08-15 00:27:40 +02:00
parent 46412a8935
commit a3b434e151

View File

@ -2592,7 +2592,16 @@ static int wavpack_encode_block(WavPackEncodeContext *s,
s->avctx->ch_layout.u.mask != AV_CH_LAYOUT_STEREO) {
put_metadata_block(&pb, WP_ID_CHANINFO, 5);
bytestream2_put_byte(&pb, s->avctx->ch_layout.nb_channels);
bytestream2_put_le32(&pb, s->avctx->ch_layout.u.mask);
if (s->avctx->ch_layout.u.mask >> 32)
bytestream2_put_le32(&pb, 0);
else
bytestream2_put_le32(&pb, s->avctx->ch_layout.u.mask);
bytestream2_put_byte(&pb, 0);
} else if (s->flags & WV_INITIAL_BLOCK &&
s->avctx->ch_layout.order == AV_CHANNEL_ORDER_UNSPEC) {
put_metadata_block(&pb, WP_ID_CHANINFO, 5);
bytestream2_put_byte(&pb, s->avctx->ch_layout.nb_channels);
bytestream2_put_le32(&pb, 0);
bytestream2_put_byte(&pb, 0);
}