decoder/flac: move position code to FlacDecoder::GetDeltaPosition()
This commit is contained in:
parent
3b031c6ba5
commit
0246082b9b
@ -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 {
|
|||||||
*/
|
*/
|
||||||
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,
|
|||||||
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)) {
|
return flac_common_write(data, frame, buf,
|
||||||
if (data->position > 0 && nbytes > data->position) {
|
data->GetDeltaPosition(*dec));
|
||||||
nbytes -= data->position;
|
|
||||||
data->position += nbytes;
|
|
||||||
} else {
|
|
||||||
data->position = nbytes;
|
|
||||||
nbytes = 0;
|
|
||||||
}
|
|
||||||
} else
|
|
||||||
nbytes = 0;
|
|
||||||
|
|
||||||
return flac_common_write(data, frame, buf, nbytes);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
|
Loading…
Reference in New Issue
Block a user