axfer: Fix creation of v1.2 headers on big-endian systems

struct block_v120_format defines these members as uint8_t. On
little-endian systems, no swapping is done, and the generated block
header is fine. However, on big-endian machines, the value is swapped to
the high byte and then truncated by the assignment, causing both
bits_per_sample and samples_per_frame to be zero.

This fixes an assertion failure in container-test when later
parsing the header ["assert(*samples_per_frame > 0);" in
container_context_pre_process()].

Fixes: 4ab7510f3a: ("axfer: add support for a container of Creative Tech. voice format")

Signed-off-by: Samuel Holland <samuel@sholland.org>
Reviewed-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
This commit is contained in:
Samuel Holland 2019-04-20 19:15:54 -05:00 committed by Jaroslav Kysela
parent 551cc37fc6
commit 60f78865d3

View file

@ -622,8 +622,8 @@ static int write_v120_format_block(struct container_context *cntr,
build_block_data_size(block->size, 12 + byte_count);
block->frames_per_second = htole32(frames_per_second);
block->bits_per_sample = htole16(state->bytes_per_sample * 8);
block->samples_per_frame = htole16(state->samples_per_frame);
block->bits_per_sample = state->bytes_per_sample * 8;
block->samples_per_frame = state->samples_per_frame;
block->code_id = htole16(state->code_id);
return container_recursive_write(cntr, block, sizeof(*block));