Commit 0246082b authored by Max Kellermann's avatar Max Kellermann

decoder/flac: move position code to FlacDecoder::GetDeltaPosition()

parent 3b031c6b
...@@ -151,6 +151,24 @@ flac_got_first_frame(FlacDecoder *data, const FLAC__FrameHeader *header) ...@@ -151,6 +151,24 @@ flac_got_first_frame(FlacDecoder *data, const FLAC__FrameHeader *header)
0); 0);
} }
FLAC__uint64
FlacDecoder::GetDeltaPosition(const FLAC__StreamDecoder &sd)
{
FLAC__uint64 nbytes;
if (!FLAC__stream_decoder_get_decode_position(&sd, &nbytes))
return 0;
if (position > 0 && nbytes > position) {
nbytes -= position;
position += nbytes;
} else {
position = nbytes;
nbytes = 0;
}
return nbytes;
}
FLAC__StreamDecoderWriteStatus FLAC__StreamDecoderWriteStatus
flac_common_write(FlacDecoder *data, const FLAC__Frame * frame, flac_common_write(FlacDecoder *data, const FLAC__Frame * frame,
const FLAC__int32 *const buf[], const FLAC__int32 *const buf[],
......
...@@ -69,6 +69,12 @@ struct FlacDecoder : public FlacInput { ...@@ -69,6 +69,12 @@ struct FlacDecoder : public FlacInput {
*/ */
bool Initialize(unsigned sample_rate, unsigned bits_per_sample, bool Initialize(unsigned sample_rate, unsigned bits_per_sample,
unsigned channels, FLAC__uint64 total_frames); unsigned channels, FLAC__uint64 total_frames);
/**
* Calculate the delta (in bytes) between the last frame and
* the current frame.
*/
FLAC__uint64 GetDeltaPosition(const FLAC__StreamDecoder &sd);
}; };
void flac_metadata_common_cb(const FLAC__StreamMetadata * block, void flac_metadata_common_cb(const FLAC__StreamMetadata * block,
......
...@@ -65,20 +65,9 @@ flac_write_cb(const FLAC__StreamDecoder *dec, const FLAC__Frame *frame, ...@@ -65,20 +65,9 @@ flac_write_cb(const FLAC__StreamDecoder *dec, const FLAC__Frame *frame,
const FLAC__int32 *const buf[], void *vdata) const FLAC__int32 *const buf[], void *vdata)
{ {
FlacDecoder *data = (FlacDecoder *) vdata; FlacDecoder *data = (FlacDecoder *) vdata;
FLAC__uint64 nbytes = 0;
if (FLAC__stream_decoder_get_decode_position(dec, &nbytes)) {
if (data->position > 0 && nbytes > data->position) {
nbytes -= data->position;
data->position += nbytes;
} else {
data->position = nbytes;
nbytes = 0;
}
} else
nbytes = 0;
return flac_common_write(data, frame, buf, nbytes); return flac_common_write(data, frame, buf,
data->GetDeltaPosition(*dec));
} }
static bool static bool
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment