vgmstream/src/layout/halpst_blocked.c
Alex Barney 58398619a6 Add support for HPS files with >2 channels
Unlike mono HPS, the format never included support for more than 2 channels, as far as I know.
By adding additional channel headers and data to each block, we can unofficially extend the container to support more than 2 channels.
2017-05-20 20:36:24 -05:00

22 lines
830 B
C

#include "layout.h"
#include "../vgmstream.h"
/* set up for the block at the given offset */
void halpst_block_update(off_t block_offset, VGMSTREAM * vgmstream) {
int i, header_length;
/* header length must be a multiple of 0x20 */
header_length = (4+8*vgmstream->channels+0x1f)/0x20*0x20;
vgmstream->current_block_offset = block_offset;
vgmstream->current_block_size = read_32bitBE(
vgmstream->current_block_offset,
vgmstream->ch[0].streamfile)/vgmstream->channels;
vgmstream->next_block_offset = read_32bitBE(
vgmstream->current_block_offset+8,
vgmstream->ch[0].streamfile);
for (i=0;i<vgmstream->channels;i++) {
vgmstream->ch[i].offset = vgmstream->current_block_offset +
header_length + vgmstream->current_block_size*i;
}
}