int counter;
int swap;
int dss_sp_swap_byte;
- int8_t dss_sp_buf[DSS_FRAME_SIZE + 1];
int packet_size;
int dss_header_size;
ctx->counter += DSS_BLOCK_SIZE - DSS_AUDIO_BLOCK_HEADER_SIZE;
}
-static void dss_sp_byte_swap(DSSDemuxContext *ctx,
- uint8_t *dst, const uint8_t *src)
+static void dss_sp_byte_swap(DSSDemuxContext *ctx, uint8_t *data)
{
int i;
if (ctx->swap) {
- for (i = 3; i < DSS_FRAME_SIZE; i += 2)
- dst[i] = src[i];
-
for (i = 0; i < DSS_FRAME_SIZE - 2; i += 2)
- dst[i] = src[i + 4];
+ data[i] = data[i + 4];
- dst[1] = ctx->dss_sp_swap_byte;
+ /* Zero the padding. */
+ data[DSS_FRAME_SIZE] = 0;
+ data[1] = ctx->dss_sp_swap_byte;
} else {
- memcpy(dst, src, DSS_FRAME_SIZE);
- ctx->dss_sp_swap_byte = src[DSS_FRAME_SIZE - 2];
+ ctx->dss_sp_swap_byte = data[DSS_FRAME_SIZE - 2];
}
/* make sure byte 40 is always 0 */
- dst[DSS_FRAME_SIZE - 2] = 0;
+ data[DSS_FRAME_SIZE - 2] = 0;
ctx->swap ^= 1;
}
pkt->stream_index = 0;
if (ctx->counter < read_size) {
- ret = avio_read(s->pb, ctx->dss_sp_buf + buff_offset,
+ ret = avio_read(s->pb, pkt->data + buff_offset,
ctx->counter);
if (ret < ctx->counter)
goto error_eof;
}
ctx->counter -= read_size;
- ret = avio_read(s->pb, ctx->dss_sp_buf + offset + buff_offset,
+ /* This will write one byte into pkt's padding if buff_offset == 3 */
+ ret = avio_read(s->pb, pkt->data + offset + buff_offset,
read_size - offset);
if (ret < read_size - offset)
goto error_eof;
- dss_sp_byte_swap(ctx, pkt->data, ctx->dss_sp_buf);
+ dss_sp_byte_swap(ctx, pkt->data);
if (ctx->dss_sp_swap_byte < 0) {
return AVERROR(EAGAIN);