Files
luban-lite-t3e-pro/packages/artinchip/mpp/middle_media/base/include/aic_stream.h
2025-09-30 11:56:06 +08:00

156 lines
4.7 KiB
C

/*
* Copyright (C) 2020-2024 ArtInChip Technology Co. Ltd
*
* SPDX-License-Identifier: Apache-2.0
*
* Author: <jun.ma@artinchip.com>
* Desc: aic stream
*/
#ifndef __AIC_STREAM_H__
#define __AIC_STREAM_H__
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
#include "mpp_dec_type.h"
struct aic_stream {
/* read data */
s64 (*read)(struct aic_stream *stream, void *buf, s64 len);
/* write data */
s64 (*write)(struct aic_stream *stream, void *buf, s64 len);
/* return current file offset */
s64 (*tell)(struct aic_stream *stream);
/* close stream */
s32 (*close)(struct aic_stream *stream);
/* seek */
s64 (*seek)(struct aic_stream *stream, s64 offset, s32 whence);
/* get stream total size */
s64 (*size)(struct aic_stream *stream);
};
#ifndef AIC_RL16
# define AIC_RL16(x) \
((((const uint8_t*)(x))[1] << 8) | \
((const uint8_t*)(x))[0])
#endif
#ifndef AIC_RL24
# define AIC_RL24(x) \
(((uint32_t)((const uint8_t*)(x))[2] << 16) | \
(((const uint8_t*)(x))[1] << 8) | \
((const uint8_t*)(x))[0])
#endif
#ifndef AIC_RL32
# define AIC_RL32(x) \
(((uint32_t)((const uint8_t*)(x))[3] << 24) | \
(((const uint8_t*)(x))[2] << 16) | \
(((const uint8_t*)(x))[1] << 8) | \
((const uint8_t*)(x))[0])
#endif
#ifndef AIC_RB16
# define AIC_RB16(x) \
((((const uint8_t*)(x))[0] << 8) | \
((const uint8_t*)(x))[1])
#endif
#ifndef AIC_RB24
# define AIC_RB24(x) \
(((uint32_t)((const uint8_t*)(x))[0] << 16) | \
(((const uint8_t*)(x))[1] << 8) | \
((const uint8_t*)(x))[2])
#endif
#ifndef AIC_RB32
# define AIC_RB32(x) \
(((uint32_t)((const uint8_t*)(x))[0] << 24) | \
(((const uint8_t*)(x))[1] << 16) | \
(((const uint8_t*)(x))[2] << 8) | \
((const uint8_t*)(x))[3])
#endif
#ifndef AIC_RB64
# define AIC_RB64(x) \
(((uint64_t)((const uint8_t*)(x))[0] << 56) | \
((uint64_t)((const uint8_t*)(x))[1] << 48) | \
((uint64_t)((const uint8_t*)(x))[2] << 40) | \
((uint64_t)((const uint8_t*)(x))[3] << 32) | \
((uint64_t)((const uint8_t*)(x))[4] << 24) | \
((uint64_t)((const uint8_t*)(x))[5] << 16) | \
((uint64_t)((const uint8_t*)(x))[6] << 8) | \
(uint64_t)((const uint8_t*)(x))[7])
#endif
#define aic_stream_read( \
stream, \
buf, \
len) \
((struct aic_stream*)stream)->read(stream, buf, len)
#define aic_stream_write( \
stream, \
buf, \
len) \
((struct aic_stream*)stream)->write(stream, buf, len)
#define aic_stream_seek( \
stream, \
offset, \
whence) \
((struct aic_stream*)stream)->seek(stream, offset, whence)
#define aic_stream_tell(stream)\
((struct aic_stream*)stream)->tell(stream)
#define aic_stream_size(stream)\
((struct aic_stream*)stream)->size(stream)
#define aic_stream_close(stream)\
((struct aic_stream*)stream)->close(stream)
s32 aic_stream_open(char *uri, struct aic_stream **stream, int flags);
int aic_stream_skip(struct aic_stream* s, int len);
void aic_stream_w8(struct aic_stream* s, int b);
void aic_stream_wl64(struct aic_stream* s, uint64_t val);
void aic_stream_wb64(struct aic_stream* s, uint64_t val);
void aic_stream_wl32(struct aic_stream* s, unsigned int val);
void aic_stream_wb32(struct aic_stream* s, unsigned int val);
void aic_stream_wl24(struct aic_stream* s, unsigned int val);
void aic_stream_wb24(struct aic_stream* s, unsigned int val);
void aic_stream_wl16(struct aic_stream* s, unsigned int val);
void aic_stream_wb16(struct aic_stream* s, unsigned int val);
int aic_stream_r8 (struct aic_stream* s);
unsigned int aic_stream_rl16(struct aic_stream* s);
unsigned int aic_stream_rl24(struct aic_stream* s);
unsigned int aic_stream_rl32(struct aic_stream* s);
uint64_t aic_stream_rl64(struct aic_stream* s);
unsigned int aic_stream_rb16(struct aic_stream* s);
unsigned int aic_stream_rb24(struct aic_stream* s);
unsigned int aic_stream_rb32(struct aic_stream* s);
uint64_t aic_stream_rb64(struct aic_stream* s);
#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif /* End of #ifdef __cplusplus */
#endif