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; }
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; }