decoder/wavpack: move code to WavpackInput methods
This commit is contained in:
parent
0525a6f90f
commit
f7f59df8aa
|
@ -264,6 +264,63 @@ struct WavpackInput {
|
||||||
:client(_client), is(_is), last_byte(EOF) {}
|
:client(_client), is(_is), last_byte(EOF) {}
|
||||||
|
|
||||||
int32_t ReadBytes(void *data, size_t bcount);
|
int32_t ReadBytes(void *data, size_t bcount);
|
||||||
|
|
||||||
|
InputStream::offset_type GetPos() const {
|
||||||
|
return is.GetOffset();
|
||||||
|
}
|
||||||
|
|
||||||
|
int SetPosAbs(InputStream::offset_type pos) {
|
||||||
|
try {
|
||||||
|
is.LockSeek(pos);
|
||||||
|
return 0;
|
||||||
|
} catch (const std::runtime_error &) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int SetPosRel(InputStream::offset_type delta, int mode) {
|
||||||
|
offset_type offset = delta;
|
||||||
|
switch (mode) {
|
||||||
|
case SEEK_SET:
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SEEK_CUR:
|
||||||
|
offset += is.GetOffset();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SEEK_END:
|
||||||
|
if (!is.KnownSize())
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
offset += is.GetSize();
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return SetPosAbs(offset);
|
||||||
|
}
|
||||||
|
|
||||||
|
int PushBackByte(int c) {
|
||||||
|
if (last_byte == EOF) {
|
||||||
|
last_byte = c;
|
||||||
|
return c;
|
||||||
|
} else {
|
||||||
|
return EOF;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
InputStream::offset_type GetLength() const {
|
||||||
|
if (!is.KnownSize())
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
return is.GetSize();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CanSeek() const {
|
||||||
|
return is.IsSeekable();
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -316,89 +373,42 @@ static uint32_t
|
||||||
wavpack_input_get_pos(void *id)
|
wavpack_input_get_pos(void *id)
|
||||||
{
|
{
|
||||||
WavpackInput &wpi = *wpin(id);
|
WavpackInput &wpi = *wpin(id);
|
||||||
|
return wpi.GetPos();
|
||||||
return wpi.is.GetOffset();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
wavpack_input_set_pos_abs(void *id, uint32_t pos)
|
wavpack_input_set_pos_abs(void *id, uint32_t pos)
|
||||||
{
|
{
|
||||||
WavpackInput &wpi = *wpin(id);
|
WavpackInput &wpi = *wpin(id);
|
||||||
|
return wpi.SetPosAbs(pos);
|
||||||
try {
|
|
||||||
wpi.is.LockSeek(pos);
|
|
||||||
return 0;
|
|
||||||
} catch (const std::runtime_error &) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
wavpack_input_set_pos_rel(void *id, int32_t delta, int mode)
|
wavpack_input_set_pos_rel(void *id, int32_t delta, int mode)
|
||||||
{
|
{
|
||||||
WavpackInput &wpi = *wpin(id);
|
WavpackInput &wpi = *wpin(id);
|
||||||
InputStream &is = wpi.is;
|
return wpi.SetPosRel(delta, mode);
|
||||||
|
|
||||||
offset_type offset = delta;
|
|
||||||
switch (mode) {
|
|
||||||
case SEEK_SET:
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SEEK_CUR:
|
|
||||||
offset += is.GetOffset();
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SEEK_END:
|
|
||||||
if (!is.KnownSize())
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
offset += is.GetSize();
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
wpi.is.LockSeek(offset);
|
|
||||||
return 0;
|
|
||||||
} catch (const std::runtime_error &) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
wavpack_input_push_back_byte(void *id, int c)
|
wavpack_input_push_back_byte(void *id, int c)
|
||||||
{
|
{
|
||||||
WavpackInput &wpi = *wpin(id);
|
WavpackInput &wpi = *wpin(id);
|
||||||
|
return wpi.PushBackByte(c);
|
||||||
if (wpi.last_byte == EOF) {
|
|
||||||
wpi.last_byte = c;
|
|
||||||
return c;
|
|
||||||
} else {
|
|
||||||
return EOF;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint32_t
|
static uint32_t
|
||||||
wavpack_input_get_length(void *id)
|
wavpack_input_get_length(void *id)
|
||||||
{
|
{
|
||||||
WavpackInput &wpi = *wpin(id);
|
WavpackInput &wpi = *wpin(id);
|
||||||
InputStream &is = wpi.is;
|
return wpi.GetLength();
|
||||||
|
|
||||||
if (!is.KnownSize())
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
return is.GetSize();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
wavpack_input_can_seek(void *id)
|
wavpack_input_can_seek(void *id)
|
||||||
{
|
{
|
||||||
WavpackInput &wpi = *wpin(id);
|
WavpackInput &wpi = *wpin(id);
|
||||||
InputStream &is = wpi.is;
|
return wpi.CanSeek();
|
||||||
|
|
||||||
return is.IsSeekable();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static WavpackStreamReader mpd_is_reader = {
|
static WavpackStreamReader mpd_is_reader = {
|
||||||
|
|
Loading…
Reference in New Issue