Skip to content

Commit

Permalink
sacd_extract DSF export truncates sample data‏ (Chuck Anderson)
Browse files Browse the repository at this point in the history
  • Loading branch information
mrwicked committed Jul 31, 2015
1 parent fbcfb03 commit 6be5a40
Showing 1 changed file with 23 additions and 9 deletions.
32 changes: 23 additions & 9 deletions libs/libsacd/dsf.c
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,23 @@ static int dsf_create(scarletbook_output_format_t *ft)
static int dsf_close(scarletbook_output_format_t *ft)
{
dsf_handle_t *handle = (dsf_handle_t *) ft->priv;
int i;

// write out what was left in the ring buffers
for (i = 0; i < handle->channel_count; i++)
{
if (handle->buffer_ptr[i] > handle->buffer[i]) {
handle->sample_count += handle->buffer_ptr[i] - handle->buffer[i];

fwrite(handle->buffer[i], 1, SACD_BLOCK_SIZE_PER_CHANNEL, ft->fd);
memset(handle->buffer[i], 0, SACD_BLOCK_SIZE_PER_CHANNEL);

handle->buffer_ptr[i] = handle->buffer[i];
handle->audio_data_size += SACD_BLOCK_SIZE_PER_CHANNEL;
}
}

// write the footer
fwrite(handle->footer, 1, handle->footer_size, ft->fd);
fseek(ft->fd, 0, SEEK_SET);

Expand Down Expand Up @@ -209,17 +225,15 @@ static size_t dsf_write_frame(scarletbook_output_format_t *ft, const uint8_t *bu

handle->buffer_ptr[i]++;
buf_ptr++;
} else {
handle->sample_count += handle->buffer_ptr[i] - handle->buffer[i];

continue;
}

handle->sample_count += handle->buffer_ptr[i] - handle->buffer[i];

fwrite(handle->buffer[i], 1, SACD_BLOCK_SIZE_PER_CHANNEL, ft->fd);
memset(handle->buffer[i], 0, SACD_BLOCK_SIZE_PER_CHANNEL);
handle->buffer_ptr[i] = handle->buffer[i];
fwrite(handle->buffer[i], 1, SACD_BLOCK_SIZE_PER_CHANNEL, ft->fd);
memset(handle->buffer[i], 0, SACD_BLOCK_SIZE_PER_CHANNEL);

handle->audio_data_size += SACD_BLOCK_SIZE_PER_CHANNEL;
handle->buffer_ptr[i] = handle->buffer[i];
handle->audio_data_size += SACD_BLOCK_SIZE_PER_CHANNEL;
}
}
}

Expand Down

0 comments on commit 6be5a40

Please sign in to comment.