Example #1
0
static int AStreamControl(stream_t *s, int cmd, va_list args)
{
    stream_sys_t *sys = s->p_sys;
    access_t *access = sys->access;

    static_control_match(CAN_SEEK);
    static_control_match(CAN_FASTSEEK);
    static_control_match(CAN_PAUSE);
    static_control_match(CAN_CONTROL_PACE);
    static_control_match(GET_SIZE);
    static_control_match(IS_DIRECTORY);
    static_control_match(GET_PTS_DELAY);
    static_control_match(GET_TITLE_INFO);
    static_control_match(GET_TITLE);
    static_control_match(GET_SEEKPOINT);
    static_control_match(GET_META);
    static_control_match(GET_CONTENT_TYPE);
    static_control_match(GET_SIGNAL);
    static_control_match(SET_PAUSE_STATE);
    static_control_match(SET_TITLE);
    static_control_match(SET_SEEKPOINT);
    static_control_match(SET_PRIVATE_ID_STATE);
    static_control_match(SET_PRIVATE_ID_CA);
    static_control_match(GET_PRIVATE_ID_STATE);

    switch (cmd)
    {
        case STREAM_SET_TITLE:
        case STREAM_SET_SEEKPOINT:
        {
            int ret = access_vaControl(access, cmd, args);
            if (ret != VLC_SUCCESS)
                return ret;

            if (sys->block != NULL)
            {
                block_Release(sys->block);
                sys->block = NULL;
            }
            break;
        }

        case STREAM_GET_PRIVATE_BLOCK:
        {
            block_t **b = va_arg(args, block_t **);
            bool *eof = va_arg(args, bool *);

            if (access->pf_block == NULL)
                return VLC_EGENERIC;

            *b = vlc_access_Eof(access) ? NULL : vlc_access_Block(access);
            *eof = (*b == NULL) && vlc_access_Eof(access);
            break;
        }

        default:
            return access_vaControl(access, cmd, args);
    }
    return VLC_SUCCESS;
}
Example #2
0
static int Control(access_t *access, int query, va_list args)
{
    access_sys_t *sys = access->p_sys;

    switch (query)
    {
        case ACCESS_CAN_SEEK:
            *va_arg(args, bool *) = sys->can_seek;
            break;
        case ACCESS_CAN_FASTSEEK:
            *va_arg(args, bool *) = sys->can_seek_fast;
            break;
        case ACCESS_CAN_PAUSE:
            *va_arg(args, bool *) = sys->can_pause;
            break;
        case ACCESS_CAN_CONTROL_PACE:
            *va_arg(args, bool *) = sys->can_control_pace;
            break;
        case ACCESS_GET_SIZE:
            *va_arg(args, uint64_t *) = sys->size;
            break;
        case ACCESS_GET_PTS_DELAY:
            *va_arg(args, int64_t *) = sys->caching;
            break;

        case ACCESS_GET_SIGNAL:
        case ACCESS_SET_PAUSE_STATE:
            return access_vaControl(sys->access, query, args);

        default:
            return VLC_EGENERIC;
    }
    return VLC_SUCCESS;
}