Older/MediaServer/libmov/source/mov-ioutil.h

124 lines
2.6 KiB
C
Raw Permalink Normal View History

2024-10-01 00:12:57 +08:00
#ifndef _mov_ioutil_h_
#define _mov_ioutil_h_
#include "mov-buffer.h"
struct mov_ioutil_t
{
struct mov_buffer_t io;
void* param;
int error;
};
static inline int mov_buffer_error(const struct mov_ioutil_t* io)
{
return io->error;
}
static inline uint64_t mov_buffer_tell(const struct mov_ioutil_t* io)
{
int64_t v;
v = io->io.tell(io->param);
if (v < 0)
((struct mov_ioutil_t*)io)->error = -1;
return v;
}
static inline void mov_buffer_seek(const struct mov_ioutil_t* io, int64_t offset)
{
// if (0 == io->error)
((struct mov_ioutil_t*)io)->error = io->io.seek(io->param, offset);
}
static inline void mov_buffer_skip(struct mov_ioutil_t* io, uint64_t bytes)
{
uint64_t offset;
if (0 == io->error)
{
offset = io->io.tell(io->param);
io->error = io->io.seek(io->param, offset + bytes);
}
}
static inline void mov_buffer_read(struct mov_ioutil_t* io, void* data, uint64_t bytes)
{
if (0 == io->error)
io->error = io->io.read(io->param, data, bytes);
}
static inline void mov_buffer_write(const struct mov_ioutil_t* io, const void* data, uint64_t bytes)
{
if (0 == io->error)
((struct mov_ioutil_t*)io)->error = io->io.write(io->param, data, bytes);
}
static inline uint8_t mov_buffer_r8(struct mov_ioutil_t* io)
{
uint8_t v = 0;
mov_buffer_read(io, &v, 1);
return v;
}
static inline uint16_t mov_buffer_r16(struct mov_ioutil_t* io)
{
uint16_t v;
v = mov_buffer_r8(io);
v = (v << 8) | mov_buffer_r8(io);
return v;
}
static inline uint32_t mov_buffer_r24(struct mov_ioutil_t* io)
{
uint32_t v;
v = mov_buffer_r8(io);
v = (v << 16) | mov_buffer_r16(io);
return v;
}
static inline uint32_t mov_buffer_r32(struct mov_ioutil_t* io)
{
uint32_t v;
v = mov_buffer_r16(io);
v = (v << 16) | mov_buffer_r16(io);
return v;
}
static inline uint64_t mov_buffer_r64(struct mov_ioutil_t* io)
{
uint64_t v;
v = mov_buffer_r32(io);
v = (v << 32) | mov_buffer_r32(io);
return v;
}
static inline void mov_buffer_w8(const struct mov_ioutil_t* io, uint8_t v)
{
mov_buffer_write(io, &v, 1);
}
static inline void mov_buffer_w16(const struct mov_ioutil_t* io, uint16_t v)
{
mov_buffer_w8(io, (uint8_t)(v >> 8));
mov_buffer_w8(io, (uint8_t)v);
}
static inline void mov_buffer_w24(const struct mov_ioutil_t* io, uint32_t v)
{
mov_buffer_w16(io, (uint16_t)(v >> 8));
mov_buffer_w8(io, (uint8_t)v);
}
static inline void mov_buffer_w32(const struct mov_ioutil_t* io, uint32_t v)
{
mov_buffer_w16(io, (uint16_t)(v >> 16));
mov_buffer_w16(io, (uint16_t)v);
}
static inline void mov_buffer_w64(const struct mov_ioutil_t* io, uint64_t v)
{
mov_buffer_w32(io, (uint32_t)(v >> 32));
mov_buffer_w32(io, (uint32_t)v);
}
#endif /* !_mov_ioutil_h_ */