예제 #1
0
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;
}
예제 #2
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);
}
예제 #3
0
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); 
}
예제 #4
0
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;
}
예제 #5
0
u32 stbuf_rp(struct stream_buf_s *buf)
{
    return _READ_ST_REG(RP);
}
예제 #6
0
u32 stbuf_level(struct stream_buf_s *buf)
{
    return _READ_ST_REG(LEVEL);
}
예제 #7
0
static inline u32 _stbuf_wp(stream_buf_t *buf)
{
    return _READ_ST_REG(WP);
}