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.
pull/390/head
Paul B Mahol 1 year ago
parent 46412a8935
commit a3b434e151
  1. 11
      libavcodec/wavpackenc.c

@ -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);
}

Loading…
Cancel
Save