u32 stbuf_space(struct stream_buf_s *buf) { /* reserved space for safe write, the parser fifo size is 1024byts, so reserve it */ int size; #if MESON_CPU_TYPE >= MESON_CPU_TYPE_MESON8 if (HAS_HEVC_VDEC && buf->type == BUF_TYPE_HEVC) size = buf->canusebuf_size - READ_VREG(HEVC_STREAM_LEVEL); else #endif size = (buf->canusebuf_size - _READ_ST_REG(LEVEL)) ; #if MESON_CPU_TYPE >= MESON_CPU_TYPE_MESON6TVD if ((buf->type == BUF_TYPE_VIDEO) && (vdec_on(VDEC_2))) { if ((_READ_VDEC2_ST_REG(START_PTR) == _READ_ST_REG(START_PTR)) && (_READ_VDEC2_ST_REG(END_PTR) == _READ_ST_REG(END_PTR)) && (_READ_VDEC2_ST_REG(CONTROL) & MEM_CTRL_FILL_EN)) { size = min(size, (int)(buf->canusebuf_size - _READ_VDEC2_ST_REG(LEVEL))); } } #endif if(buf->canusebuf_size>=buf->buf_size/2) size=size-6*1024;//old reversed value,tobe full, reversed only... if ((buf->type == BUF_TYPE_VIDEO) || (HAS_HEVC_VDEC && buf->type == BUF_TYPE_HEVC)) { size -= READ_MPEG_REG(PARSER_VIDEO_HOLE); } return size > 0 ? size : 0; }
u32 stbuf_rp(struct stream_buf_s *buf) { #if MESON_CPU_TYPE >= MESON_CPU_TYPE_MESON8 if (HAS_HEVC_VDEC) return (buf->type == BUF_TYPE_HEVC) ? READ_VREG(HEVC_STREAM_RD_PTR) : _READ_ST_REG(RP); else #endif return _READ_ST_REG(RP); }
void stbuf_vdec2_init(struct stream_buf_s *buf) { _WRITE_VDEC2_ST_REG(CONTROL, 0); _WRITE_VDEC2_ST_REG(START_PTR, _READ_ST_REG(START_PTR)); _WRITE_VDEC2_ST_REG(END_PTR, _READ_ST_REG(END_PTR)); _WRITE_VDEC2_ST_REG(CURR_PTR, _READ_ST_REG(CURR_PTR)); _WRITE_VDEC2_ST_REG(CONTROL, MEM_FILL_ON_LEVEL | MEM_BUFCTRL_INIT); _WRITE_VDEC2_ST_REG(CONTROL, MEM_FILL_ON_LEVEL); _WRITE_VDEC2_ST_REG(BUF_CTRL, MEM_BUFCTRL_INIT); _WRITE_VDEC2_ST_REG(BUF_CTRL, 0); _WRITE_VDEC2_ST_REG(CONTROL, (0x11 << 16) | MEM_FILL_ON_LEVEL | MEM_CTRL_FILL_EN | MEM_CTRL_EMPTY_EN); }
u32 stbuf_space(struct stream_buf_s *buf) { /* reserved space for safe write, the parser fifo size is 1024byts, so reserve it */ /* resever some space for demux buffer */ int size = (buf->canusebuf_size- _READ_ST_REG(LEVEL)) ; if(buf->canusebuf_size>=buf->buf_size/2) size=size-6*1024;//old reversed value,tobe full, reversed only... return size > 0 ? size : 0; }
u32 stbuf_rp(struct stream_buf_s *buf) { return _READ_ST_REG(RP); }
u32 stbuf_level(struct stream_buf_s *buf) { return _READ_ST_REG(LEVEL); }
static inline u32 _stbuf_wp(stream_buf_t *buf) { return _READ_ST_REG(WP); }