mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-10-29 05:40:23 -04:00
Explicitly check version number when determining which fields are in a stream
create response. git-svn-id: file:///home/lennart/svn/public/pulseaudio/trunk@978 fefdeb5f-60dc-0310-8127-8f9354f1896f
This commit is contained in:
parent
099304a0d4
commit
d142408f5c
2 changed files with 10 additions and 20 deletions
|
|
@ -100,7 +100,6 @@ struct pa_stream {
|
|||
|
||||
char *name;
|
||||
pa_buffer_attr buffer_attr;
|
||||
int buffer_attr_from_server;
|
||||
pa_sample_spec sample_spec;
|
||||
pa_channel_map channel_map;
|
||||
pa_stream_flags_t flags;
|
||||
|
|
|
|||
|
|
@ -84,7 +84,6 @@ pa_stream *pa_stream_new(pa_context *c, const char *name, const pa_sample_spec *
|
|||
s->requested_bytes = 0;
|
||||
s->state = PA_STREAM_UNCONNECTED;
|
||||
memset(&s->buffer_attr, 0, sizeof(s->buffer_attr));
|
||||
s->buffer_attr_from_server = 0;
|
||||
|
||||
s->peek_memchunk.index = 0;
|
||||
s->peek_memchunk.length = 0;
|
||||
|
|
@ -407,38 +406,29 @@ void pa_create_stream_callback(pa_pdispatch *pd, uint32_t command, PA_GCC_UNUSED
|
|||
goto finish;
|
||||
}
|
||||
|
||||
if (!pa_tagstruct_eof(t)) {
|
||||
|
||||
if (pa_context_get_server_protocol_version(s->context) >= 9) {
|
||||
if (s->direction == PA_STREAM_PLAYBACK) {
|
||||
|
||||
/* This is a server 0.9.0 or later */
|
||||
if (pa_tagstruct_getu32(t, &s->buffer_attr.maxlength) < 0 ||
|
||||
pa_tagstruct_getu32(t, &s->buffer_attr.tlength) < 0 ||
|
||||
pa_tagstruct_getu32(t, &s->buffer_attr.prebuf) < 0 ||
|
||||
pa_tagstruct_getu32(t, &s->buffer_attr.minreq) < 0 ||
|
||||
!pa_tagstruct_eof(t)) {
|
||||
pa_tagstruct_getu32(t, &s->buffer_attr.minreq) < 0) {
|
||||
pa_context_fail(s->context, PA_ERR_PROTOCOL);
|
||||
goto finish;
|
||||
}
|
||||
|
||||
s->buffer_attr_from_server = 1;
|
||||
} else if (s->direction == PA_STREAM_RECORD) {
|
||||
|
||||
/* This is a server 0.9.0 or later */
|
||||
if (pa_tagstruct_getu32(t, &s->buffer_attr.maxlength) < 0 ||
|
||||
pa_tagstruct_getu32(t, &s->buffer_attr.fragsize) < 0 ||
|
||||
!pa_tagstruct_eof(t)) {
|
||||
pa_tagstruct_getu32(t, &s->buffer_attr.fragsize) < 0) {
|
||||
pa_context_fail(s->context, PA_ERR_PROTOCOL);
|
||||
goto finish;
|
||||
}
|
||||
|
||||
s->buffer_attr_from_server = 1;
|
||||
} else {
|
||||
pa_context_fail(s->context, PA_ERR_PROTOCOL);
|
||||
goto finish;
|
||||
}
|
||||
}
|
||||
|
||||
if (!pa_tagstruct_eof(t)) {
|
||||
pa_context_fail(s->context, PA_ERR_PROTOCOL);
|
||||
goto finish;
|
||||
}
|
||||
|
||||
if (s->direction == PA_STREAM_RECORD) {
|
||||
assert(!s->record_memblockq);
|
||||
|
||||
|
|
@ -1375,7 +1365,8 @@ const pa_buffer_attr* pa_stream_get_buffer_attr(pa_stream *s) {
|
|||
|
||||
PA_CHECK_VALIDITY_RETURN_NULL(s->context, s->state == PA_STREAM_READY, PA_ERR_BADSTATE);
|
||||
PA_CHECK_VALIDITY_RETURN_NULL(s->context, s->direction != PA_STREAM_UPLOAD, PA_ERR_BADSTATE);
|
||||
PA_CHECK_VALIDITY_RETURN_NULL(s->context, s->buffer_attr_from_server, PA_ERR_NODATA);
|
||||
PA_CHECK_VALIDITY_RETURN_NULL(s->context,
|
||||
pa_context_get_server_protocol_version(s->context) >= 9, PA_ERR_NODATA);
|
||||
|
||||
return &s->buffer_attr;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue