Use new builder for props and formats

This commit is contained in:
Wim Taymans 2017-03-07 19:40:51 +01:00
parent 78a3cd61b8
commit a1dad30fd1
14 changed files with 338 additions and 320 deletions

View file

@ -68,6 +68,7 @@ spa_alsa_sink_node_get_props (SpaNode *node,
{
SpaALSASink *this;
SpaPODBuilder b = { NULL, };
SpaPODFrame f;
if (node == NULL || props == NULL)
return SPA_RESULT_INVALID_ARGUMENTS;
@ -77,33 +78,44 @@ spa_alsa_sink_node_get_props (SpaNode *node,
spa_pod_builder_init (&b, this->props_buffer, sizeof (this->props_buffer));
*props = SPA_MEMBER (b.data, spa_pod_builder_props (&b,
PROP_ID_DEVICE, SPA_POD_TYPE_STRING,
SPA_POD_TYPE_PROP, &f,
PROP_ID_DEVICE, SPA_POD_PROP_FLAG_READWRITE |
SPA_POD_PROP_RANGE_NONE,
-SPA_POD_TYPE_STRING, 1,
this->props.device, sizeof (this->props.device),
SPA_POD_PROP_FLAG_READWRITE |
-SPA_POD_TYPE_PROP, &f,
SPA_POD_TYPE_PROP, &f,
PROP_ID_DEVICE_NAME, SPA_POD_PROP_FLAG_READABLE |
SPA_POD_PROP_RANGE_NONE,
PROP_ID_DEVICE_NAME, SPA_POD_TYPE_STRING,
-SPA_POD_TYPE_STRING, 1,
this->props.device_name, sizeof (this->props.device_name),
SPA_POD_PROP_FLAG_READABLE |
-SPA_POD_TYPE_PROP, &f,
SPA_POD_TYPE_PROP, &f,
PROP_ID_CARD_NAME, SPA_POD_PROP_FLAG_READABLE |
SPA_POD_PROP_RANGE_NONE,
PROP_ID_CARD_NAME, SPA_POD_TYPE_STRING,
-SPA_POD_TYPE_STRING, 1,
this->props.card_name, sizeof (this->props.card_name),
SPA_POD_PROP_FLAG_READABLE |
SPA_POD_PROP_RANGE_NONE,
PROP_ID_PERIOD_SIZE, SPA_POD_TYPE_INT,
-SPA_POD_TYPE_PROP, &f,
SPA_POD_TYPE_PROP, &f,
PROP_ID_PERIOD_SIZE, SPA_POD_PROP_FLAG_READWRITE |
SPA_POD_PROP_RANGE_MIN_MAX,
SPA_POD_TYPE_INT, 3,
this->props.period_size,
SPA_POD_PROP_FLAG_READWRITE |
SPA_POD_PROP_RANGE_MIN_MAX,
1, INT32_MAX,
PROP_ID_PERIODS, SPA_POD_TYPE_INT,
-SPA_POD_TYPE_PROP, &f,
SPA_POD_TYPE_PROP, &f,
PROP_ID_PERIODS, SPA_POD_PROP_FLAG_READWRITE |
SPA_POD_PROP_RANGE_MIN_MAX,
SPA_POD_TYPE_INT, 3,
this->props.periods,
SPA_POD_PROP_FLAG_READWRITE |
SPA_POD_PROP_RANGE_MIN_MAX,
1, INT32_MAX,
PROP_ID_PERIOD_EVENT, SPA_POD_TYPE_BOOL,
this->props.period_event,
SPA_POD_PROP_FLAG_READWRITE |
-SPA_POD_TYPE_PROP, &f,
SPA_POD_TYPE_PROP, &f,
PROP_ID_PERIOD_EVENT, SPA_POD_PROP_FLAG_READWRITE |
SPA_POD_PROP_RANGE_NONE,
0), SpaProps);
SPA_POD_TYPE_BOOL, 1,
this->props.period_event,
-SPA_POD_TYPE_PROP, &f, 0), SpaProps);
return SPA_RESULT_OK;
@ -329,6 +341,7 @@ spa_alsa_sink_node_port_enum_formats (SpaNode *node,
SpaFormat *fmt;
uint8_t buffer[1024];
SpaPODBuilder b = { NULL, };
SpaPODFrame f[2];
if (node == NULL || format == NULL)
return SPA_RESULT_INVALID_ARGUMENTS;
@ -344,24 +357,29 @@ next:
switch (index++) {
case 0:
fmt = SPA_MEMBER (buffer, spa_pod_builder_format (&b,
SPA_MEDIA_TYPE_AUDIO, SPA_MEDIA_SUBTYPE_RAW,
SPA_PROP_ID_AUDIO_FORMAT, SPA_POD_TYPE_INT,
SPA_MEDIA_TYPE_AUDIO, SPA_MEDIA_SUBTYPE_RAW,
SPA_POD_TYPE_PROP, &f[0],
SPA_PROP_ID_AUDIO_FORMAT, SPA_POD_PROP_FLAG_UNSET | SPA_POD_PROP_FLAG_READWRITE |
SPA_POD_PROP_RANGE_ENUM,
SPA_POD_TYPE_INT, 3,
SPA_AUDIO_FORMAT_S16,
SPA_POD_PROP_FLAG_UNSET | SPA_POD_PROP_FLAG_READWRITE |
SPA_POD_PROP_RANGE_ENUM, 2,
SPA_AUDIO_FORMAT_S16,
SPA_AUDIO_FORMAT_S32,
SPA_PROP_ID_AUDIO_RATE, SPA_POD_TYPE_INT,
-SPA_POD_TYPE_PROP, &f[0],
SPA_POD_TYPE_PROP, &f[0],
SPA_PROP_ID_AUDIO_RATE, SPA_POD_PROP_FLAG_UNSET | SPA_POD_PROP_FLAG_READWRITE |
SPA_POD_PROP_RANGE_MIN_MAX,
SPA_POD_TYPE_INT, 3,
44100,
SPA_POD_PROP_FLAG_UNSET | SPA_POD_PROP_FLAG_READWRITE |
SPA_POD_PROP_RANGE_MIN_MAX,
1, INT32_MAX,
SPA_PROP_ID_AUDIO_CHANNELS, SPA_POD_TYPE_INT,
-SPA_POD_TYPE_PROP, &f[0],
SPA_POD_TYPE_PROP, &f[0],
SPA_PROP_ID_AUDIO_CHANNELS, SPA_POD_PROP_FLAG_UNSET | SPA_POD_PROP_FLAG_READWRITE |
SPA_POD_PROP_RANGE_MIN_MAX,
SPA_POD_TYPE_INT, 3,
2,
SPA_POD_PROP_FLAG_UNSET | SPA_POD_PROP_FLAG_READWRITE |
SPA_POD_PROP_RANGE_MIN_MAX,
1, INT32_MAX,
0), SpaFormat);
-SPA_POD_TYPE_PROP, &f[0], 0), SpaFormat);
break;
case 1:
fmt = SPA_MEMBER (buffer, spa_pod_builder_format (&b,

View file

@ -68,6 +68,7 @@ spa_alsa_source_node_get_props (SpaNode *node,
{
SpaALSASource *this;
SpaPODBuilder b = { NULL, };
SpaPODFrame f;
if (node == NULL || props == NULL)
return SPA_RESULT_INVALID_ARGUMENTS;
@ -77,33 +78,44 @@ spa_alsa_source_node_get_props (SpaNode *node,
spa_pod_builder_init (&b, this->props_buffer, sizeof (this->props_buffer));
*props = SPA_MEMBER (b.data, spa_pod_builder_props (&b,
PROP_ID_DEVICE, SPA_POD_TYPE_STRING,
SPA_POD_TYPE_PROP, &f,
PROP_ID_DEVICE, SPA_POD_PROP_FLAG_READWRITE |
SPA_POD_PROP_RANGE_NONE,
-SPA_POD_TYPE_STRING, 1,
this->props.device, sizeof (this->props.device),
SPA_POD_PROP_FLAG_READWRITE |
-SPA_POD_TYPE_PROP, &f,
SPA_POD_TYPE_PROP, &f,
PROP_ID_DEVICE_NAME, SPA_POD_PROP_FLAG_READABLE |
SPA_POD_PROP_RANGE_NONE,
PROP_ID_DEVICE_NAME, SPA_POD_TYPE_STRING,
-SPA_POD_TYPE_STRING, 1,
this->props.device_name, sizeof (this->props.device_name),
SPA_POD_PROP_FLAG_READABLE |
-SPA_POD_TYPE_PROP, &f,
SPA_POD_TYPE_PROP, &f,
PROP_ID_CARD_NAME, SPA_POD_PROP_FLAG_READABLE |
SPA_POD_PROP_RANGE_NONE,
PROP_ID_CARD_NAME, SPA_POD_TYPE_STRING,
-SPA_POD_TYPE_STRING, 1,
this->props.card_name, sizeof (this->props.card_name),
SPA_POD_PROP_FLAG_READABLE |
SPA_POD_PROP_RANGE_NONE,
PROP_ID_PERIOD_SIZE, SPA_POD_TYPE_INT,
-SPA_POD_TYPE_PROP, &f,
SPA_POD_TYPE_PROP, &f,
PROP_ID_PERIOD_SIZE, SPA_POD_PROP_FLAG_READWRITE |
SPA_POD_PROP_RANGE_MIN_MAX,
SPA_POD_TYPE_INT, 3,
this->props.period_size,
SPA_POD_PROP_FLAG_READWRITE |
SPA_POD_PROP_RANGE_MIN_MAX,
1, INT32_MAX,
PROP_ID_PERIODS, SPA_POD_TYPE_INT,
-SPA_POD_TYPE_PROP, &f,
SPA_POD_TYPE_PROP, &f,
PROP_ID_PERIODS, SPA_POD_PROP_FLAG_READWRITE |
SPA_POD_PROP_RANGE_MIN_MAX,
SPA_POD_TYPE_INT, 3,
this->props.periods,
SPA_POD_PROP_FLAG_READWRITE |
SPA_POD_PROP_RANGE_MIN_MAX,
1, INT32_MAX,
PROP_ID_PERIOD_EVENT, SPA_POD_TYPE_BOOL,
this->props.period_event,
SPA_POD_PROP_FLAG_READWRITE |
-SPA_POD_TYPE_PROP, &f,
SPA_POD_TYPE_PROP, &f,
PROP_ID_PERIOD_EVENT, SPA_POD_PROP_FLAG_READWRITE |
SPA_POD_PROP_RANGE_NONE,
0), SpaProps);
SPA_POD_TYPE_BOOL, 1,
this->props.period_event,
-SPA_POD_TYPE_PROP, &f, 0), SpaProps);
return SPA_RESULT_OK;
}
@ -364,6 +376,7 @@ spa_alsa_source_node_port_enum_formats (SpaNode *node,
SpaFormat *fmt;
uint8_t buffer[1024];
SpaPODBuilder b = { NULL, };
SpaPODFrame f[2];
if (node == NULL || format == NULL)
return SPA_RESULT_INVALID_ARGUMENTS;
@ -380,23 +393,28 @@ next:
case 0:
fmt = SPA_MEMBER (buffer, spa_pod_builder_format (&b,
SPA_MEDIA_TYPE_AUDIO, SPA_MEDIA_SUBTYPE_RAW,
SPA_PROP_ID_AUDIO_FORMAT, SPA_POD_TYPE_INT,
SPA_POD_TYPE_PROP, &f[0],
SPA_PROP_ID_AUDIO_FORMAT, SPA_POD_PROP_FLAG_UNSET | SPA_POD_PROP_FLAG_READWRITE |
SPA_POD_PROP_RANGE_ENUM,
SPA_POD_TYPE_INT, 3,
SPA_AUDIO_FORMAT_S16,
SPA_POD_PROP_FLAG_UNSET | SPA_POD_PROP_FLAG_READWRITE |
SPA_POD_PROP_RANGE_ENUM, 2,
SPA_AUDIO_FORMAT_S16,
SPA_AUDIO_FORMAT_S32,
SPA_PROP_ID_AUDIO_RATE, SPA_POD_TYPE_INT,
-SPA_POD_TYPE_PROP, &f[0],
SPA_POD_TYPE_PROP, &f[0],
SPA_PROP_ID_AUDIO_RATE, SPA_POD_PROP_FLAG_UNSET | SPA_POD_PROP_FLAG_READWRITE |
SPA_POD_PROP_RANGE_MIN_MAX,
SPA_POD_TYPE_INT, 3,
44100,
SPA_POD_PROP_FLAG_UNSET | SPA_POD_PROP_FLAG_READWRITE |
SPA_POD_PROP_RANGE_MIN_MAX,
1, INT32_MAX,
SPA_PROP_ID_AUDIO_CHANNELS, SPA_POD_TYPE_INT,
-SPA_POD_TYPE_PROP, &f[0],
SPA_POD_TYPE_PROP, &f[0],
SPA_PROP_ID_AUDIO_CHANNELS, SPA_POD_PROP_FLAG_UNSET | SPA_POD_PROP_FLAG_READWRITE |
SPA_POD_PROP_RANGE_MIN_MAX,
SPA_POD_TYPE_INT, 3,
2,
SPA_POD_PROP_FLAG_UNSET | SPA_POD_PROP_FLAG_READWRITE |
SPA_POD_PROP_RANGE_MIN_MAX,
1, INT32_MAX,
0), SpaFormat);
-SPA_POD_TYPE_PROP, &f[0], 0), SpaFormat);
break;
case 1:
fmt = SPA_MEMBER (buffer, spa_pod_builder_format (&b,

View file

@ -137,6 +137,7 @@ spa_audiotestsrc_node_get_props (SpaNode *node,
{
SpaAudioTestSrc *this;
SpaPODBuilder b = { NULL, };
SpaPODFrame f;
if (node == NULL || props == NULL)
return SPA_RESULT_INVALID_ARGUMENTS;
@ -146,29 +147,36 @@ spa_audiotestsrc_node_get_props (SpaNode *node,
spa_pod_builder_init (&b, this->props_buffer, sizeof (this->props_buffer));
*props = SPA_MEMBER (b.data, spa_pod_builder_props (&b,
PROP_ID_LIVE, SPA_POD_TYPE_BOOL,
this->props.live,
SPA_POD_PROP_FLAG_READWRITE |
SPA_POD_TYPE_PROP, &f,
PROP_ID_LIVE, SPA_POD_PROP_FLAG_READWRITE |
SPA_POD_PROP_RANGE_NONE,
PROP_ID_WAVE, SPA_POD_TYPE_INT,
SPA_POD_TYPE_BOOL, 1,
this->props.live,
-SPA_POD_TYPE_PROP, &f,
SPA_POD_TYPE_PROP, &f,
PROP_ID_WAVE, SPA_POD_PROP_FLAG_READWRITE |
SPA_POD_PROP_RANGE_ENUM,
SPA_POD_TYPE_INT, 3,
this->props.wave,
SPA_POD_PROP_FLAG_READWRITE |
SPA_POD_PROP_RANGE_ENUM, 2,
wave_val_sine,
wave_val_square,
PROP_ID_FREQ, SPA_POD_TYPE_DOUBLE,
this->props.freq,
SPA_POD_PROP_FLAG_READWRITE |
-SPA_POD_TYPE_PROP, &f,
SPA_POD_TYPE_PROP, &f,
PROP_ID_FREQ, SPA_POD_PROP_FLAG_READWRITE |
SPA_POD_PROP_RANGE_MIN_MAX,
SPA_POD_TYPE_DOUBLE, 3,
this->props.freq,
0.0,
50000000.0,
PROP_ID_VOLUME, SPA_POD_TYPE_DOUBLE,
this->props.volume,
SPA_POD_PROP_FLAG_READWRITE |
-SPA_POD_TYPE_PROP, &f,
SPA_POD_TYPE_PROP, &f,
PROP_ID_VOLUME, SPA_POD_PROP_FLAG_READWRITE |
SPA_POD_PROP_RANGE_MIN_MAX,
SPA_POD_TYPE_DOUBLE, 3,
this->props.volume,
0.0,
10.0,
0), SpaProps);
-SPA_POD_TYPE_PROP, &f, 0), SpaProps);
return SPA_RESULT_OK;
}
@ -462,6 +470,7 @@ spa_audiotestsrc_node_port_enum_formats (SpaNode *node,
SpaFormat *fmt;
uint8_t buffer[256];
SpaPODBuilder b = { NULL, };
SpaPODFrame f[2];
if (node == NULL || format == NULL)
return SPA_RESULT_INVALID_ARGUMENTS;
@ -478,23 +487,28 @@ next:
case 0:
fmt = SPA_MEMBER (buffer, spa_pod_builder_format (&b,
SPA_MEDIA_TYPE_AUDIO, SPA_MEDIA_SUBTYPE_RAW,
SPA_PROP_ID_AUDIO_FORMAT, SPA_POD_TYPE_INT,
SPA_POD_TYPE_PROP, &f[0],
SPA_PROP_ID_AUDIO_FORMAT, SPA_POD_PROP_FLAG_UNSET | SPA_POD_PROP_FLAG_READWRITE |
SPA_POD_PROP_RANGE_ENUM,
SPA_POD_TYPE_INT, 3,
SPA_AUDIO_FORMAT_S16,
SPA_POD_PROP_FLAG_UNSET | SPA_POD_PROP_FLAG_READWRITE |
SPA_POD_PROP_RANGE_ENUM, 2,
SPA_AUDIO_FORMAT_S16,
SPA_AUDIO_FORMAT_S32,
SPA_PROP_ID_AUDIO_RATE, SPA_POD_TYPE_INT,
-SPA_POD_TYPE_PROP, &f[0],
SPA_POD_TYPE_PROP, &f[0],
SPA_PROP_ID_AUDIO_RATE, SPA_POD_PROP_FLAG_UNSET | SPA_POD_PROP_FLAG_READWRITE |
SPA_POD_PROP_RANGE_MIN_MAX,
SPA_POD_TYPE_INT, 3,
44100,
SPA_POD_PROP_FLAG_UNSET | SPA_POD_PROP_FLAG_READWRITE |
SPA_POD_PROP_RANGE_MIN_MAX,
1, INT32_MAX,
SPA_PROP_ID_AUDIO_CHANNELS, SPA_POD_TYPE_INT,
-SPA_POD_TYPE_PROP, &f[0],
SPA_POD_TYPE_PROP, &f[0],
SPA_PROP_ID_AUDIO_CHANNELS, SPA_POD_PROP_FLAG_UNSET | SPA_POD_PROP_FLAG_READWRITE |
SPA_POD_PROP_RANGE_MIN_MAX,
SPA_POD_TYPE_INT, 3,
2,
SPA_POD_PROP_FLAG_UNSET | SPA_POD_PROP_FLAG_READWRITE |
SPA_POD_PROP_RANGE_MIN_MAX,
1, INT32_MAX,
0), SpaFormat);
-SPA_POD_TYPE_PROP, &f[0], 0), SpaFormat);
break;
default:
return SPA_RESULT_ENUM_END;
@ -587,6 +601,7 @@ spa_audiotestsrc_node_port_get_format (SpaNode *node,
{
SpaAudioTestSrc *this;
SpaPODBuilder b = { NULL, };
SpaPODFrame f;
if (node == NULL || format == NULL)
return SPA_RESULT_INVALID_ARGUMENTS;
@ -603,16 +618,21 @@ spa_audiotestsrc_node_port_get_format (SpaNode *node,
*format = SPA_MEMBER (b.data, spa_pod_builder_format (&b,
SPA_MEDIA_TYPE_AUDIO, SPA_MEDIA_SUBTYPE_RAW,
SPA_PROP_ID_AUDIO_FORMAT, SPA_POD_TYPE_INT,
SPA_POD_TYPE_PROP, &f,
SPA_PROP_ID_AUDIO_FORMAT, SPA_POD_PROP_FLAG_READWRITE,
SPA_POD_TYPE_INT, 1,
this->current_format.info.raw.format,
SPA_POD_PROP_FLAG_READWRITE,
SPA_PROP_ID_AUDIO_RATE, SPA_POD_TYPE_INT,
-SPA_POD_TYPE_PROP, &f,
SPA_POD_TYPE_PROP, &f,
SPA_PROP_ID_AUDIO_RATE, SPA_POD_PROP_FLAG_READWRITE,
SPA_POD_TYPE_INT, 1,
this->current_format.info.raw.rate,
SPA_POD_PROP_FLAG_READWRITE,
SPA_PROP_ID_AUDIO_CHANNELS, SPA_POD_TYPE_INT,
-SPA_POD_TYPE_PROP, &f,
SPA_POD_TYPE_PROP, &f,
SPA_PROP_ID_AUDIO_CHANNELS, SPA_POD_PROP_FLAG_READWRITE,
SPA_POD_TYPE_INT, 1,
this->current_format.info.raw.channels,
SPA_POD_PROP_FLAG_READWRITE,
0), SpaFormat);
-SPA_POD_TYPE_PROP, &f, 0), SpaFormat);
return SPA_RESULT_OK;
}

View file

@ -151,32 +151,36 @@ spa_v4l2_source_node_get_props (SpaNode *node,
{
SpaV4l2Source *this;
SpaPODBuilder b = { NULL, };
SpaPODFrame f;
if (node == NULL || props == NULL)
return SPA_RESULT_INVALID_ARGUMENTS;
this = SPA_CONTAINER_OF (node, SpaV4l2Source, node);
b.data = this->props_buffer;
b.size = sizeof (this->props_buffer);
spa_pod_builder_init (&b, this->props_buffer, sizeof (this->props_buffer));
*props = SPA_MEMBER (b.data, spa_pod_builder_props (&b,
PROP_ID_DEVICE, SPA_POD_TYPE_STRING,
SPA_POD_TYPE_PROP, &f,
PROP_ID_DEVICE, SPA_POD_PROP_FLAG_READWRITE |
SPA_POD_PROP_RANGE_NONE,
-SPA_POD_TYPE_STRING, 1,
this->props.device, sizeof (this->props.device),
SPA_POD_PROP_FLAG_READWRITE |
SPA_POD_PROP_RANGE_NONE,
PROP_ID_DEVICE_NAME, SPA_POD_TYPE_STRING,
-SPA_POD_TYPE_PROP, &f,
SPA_POD_TYPE_PROP, &f,
PROP_ID_DEVICE_NAME, SPA_POD_PROP_FLAG_READABLE |
SPA_POD_PROP_RANGE_NONE,
-SPA_POD_TYPE_STRING, 1,
this->props.device_name, sizeof (this->props.device_name),
SPA_POD_PROP_FLAG_READABLE |
SPA_POD_PROP_RANGE_NONE,
PROP_ID_DEVICE_FD, SPA_POD_TYPE_INT,
this->props.device_fd,
SPA_POD_PROP_FLAG_READABLE |
-SPA_POD_TYPE_PROP, &f,
SPA_POD_TYPE_PROP, &f,
PROP_ID_DEVICE_FD, SPA_POD_PROP_FLAG_READABLE |
SPA_POD_PROP_RANGE_NONE,
0), SpaProps);
SPA_POD_TYPE_INT, 1,
this->props.device_fd,
-SPA_POD_TYPE_PROP, &f, 0), SpaProps);
return SPA_RESULT_OK;
}
@ -561,7 +565,7 @@ spa_v4l2_source_node_port_get_format (SpaNode *node,
SpaV4l2Source *this;
SpaV4l2State *state;
SpaPODBuilder b = { NULL, };
SpaPODFrame f;
SpaPODFrame f[2];
if (node == NULL || format == NULL)
return SPA_RESULT_INVALID_ARGUMENTS;
@ -579,51 +583,61 @@ spa_v4l2_source_node_port_get_format (SpaNode *node,
b.data = state->format_buffer;
b.size = sizeof (state->format_buffer);
*format = SPA_POD_BUILDER_DEREF (&b, spa_pod_builder_push_format (&b, &f,
state->current_format.media_type,
state->current_format.media_subtype),
SpaFormat);
spa_pod_builder_push_format (&b, &f[0],
state->current_format.media_type,
state->current_format.media_subtype);
switch (state->current_format.media_subtype) {
case SPA_MEDIA_SUBTYPE_RAW:
spa_pod_builder_prop (&b,
SPA_PROP_ID_VIDEO_FORMAT, SPA_POD_TYPE_INT,
spa_pod_builder_add (&b,
SPA_POD_TYPE_PROP, &f[1],
SPA_PROP_ID_VIDEO_FORMAT, SPA_POD_PROP_FLAG_READWRITE,
SPA_POD_TYPE_INT, 1,
state->current_format.info.raw.format,
SPA_POD_PROP_FLAG_READWRITE,
SPA_PROP_ID_VIDEO_SIZE, SPA_POD_TYPE_RECTANGLE,
-SPA_POD_TYPE_PROP, &f[1],
SPA_POD_TYPE_PROP, &f[1],
SPA_PROP_ID_VIDEO_SIZE, SPA_POD_PROP_FLAG_READWRITE,
SPA_POD_TYPE_RECTANGLE, 1,
state->current_format.info.raw.size.width,
state->current_format.info.raw.size.height,
SPA_POD_PROP_FLAG_READWRITE,
SPA_PROP_ID_VIDEO_FRAMERATE, SPA_POD_TYPE_FRACTION,
-SPA_POD_TYPE_PROP, &f[1],
SPA_POD_TYPE_PROP, &f[1],
SPA_PROP_ID_VIDEO_FRAMERATE, SPA_POD_PROP_FLAG_READWRITE,
SPA_POD_TYPE_FRACTION, 1,
state->current_format.info.raw.framerate.num,
state->current_format.info.raw.framerate.denom,
SPA_POD_PROP_FLAG_READWRITE,
0);
-SPA_POD_TYPE_PROP, &f[1], 0);
break;
case SPA_MEDIA_SUBTYPE_MJPG:
case SPA_MEDIA_SUBTYPE_JPEG:
spa_pod_builder_prop (&b,
SPA_PROP_ID_VIDEO_SIZE, SPA_POD_TYPE_RECTANGLE,
spa_pod_builder_add (&b,
SPA_POD_TYPE_PROP, &f[1],
SPA_PROP_ID_VIDEO_SIZE, SPA_POD_PROP_FLAG_READWRITE,
SPA_POD_TYPE_RECTANGLE, 1,
state->current_format.info.mjpg.size.width,
state->current_format.info.mjpg.size.height,
SPA_POD_PROP_FLAG_READWRITE,
SPA_PROP_ID_VIDEO_FRAMERATE, SPA_POD_TYPE_FRACTION,
-SPA_POD_TYPE_PROP, &f[1],
SPA_POD_TYPE_PROP, &f[1],
SPA_PROP_ID_VIDEO_FRAMERATE, SPA_POD_PROP_FLAG_READWRITE,
SPA_POD_TYPE_FRACTION, 1,
state->current_format.info.mjpg.framerate.num,
state->current_format.info.mjpg.framerate.denom,
SPA_POD_PROP_FLAG_READWRITE,
0);
-SPA_POD_TYPE_PROP, &f[1], 0);
break;
case SPA_MEDIA_SUBTYPE_H264:
spa_pod_builder_prop (&b,
SPA_PROP_ID_VIDEO_SIZE, SPA_POD_TYPE_RECTANGLE,
spa_pod_builder_add (&b,
SPA_POD_TYPE_PROP, &f[1],
SPA_PROP_ID_VIDEO_SIZE, SPA_POD_PROP_FLAG_READWRITE,
SPA_POD_TYPE_RECTANGLE, 1,
state->current_format.info.h264.size.width,
state->current_format.info.h264.size.height,
SPA_POD_PROP_FLAG_READWRITE,
SPA_PROP_ID_VIDEO_FRAMERATE, SPA_POD_TYPE_FRACTION,
-SPA_POD_TYPE_PROP, &f[1],
SPA_POD_TYPE_PROP, &f[1],
SPA_PROP_ID_VIDEO_FRAMERATE, SPA_POD_PROP_FLAG_READWRITE,
SPA_POD_TYPE_FRACTION, 1,
state->current_format.info.h264.framerate.num,
state->current_format.info.h264.framerate.denom,
SPA_POD_PROP_FLAG_READWRITE,
0);
-SPA_POD_TYPE_PROP, &f[1], 0);
break;
case SPA_MEDIA_SUBTYPE_DV:
case SPA_MEDIA_SUBTYPE_MPEGTS:
@ -636,7 +650,9 @@ spa_v4l2_source_node_port_get_format (SpaNode *node,
default:
return SPA_RESULT_NO_FORMAT;
}
spa_pod_builder_pop (&b, &f);
spa_pod_builder_pop (&b, &f[0]);
*format = SPA_POD_BUILDER_DEREF (&b, f[0].ref, SpaFormat);
return SPA_RESULT_OK;
}

View file

@ -603,34 +603,35 @@ have_size:
}
}
fmt = SPA_MEMBER (b.data,
spa_pod_builder_push_format (&b, &f[0],
info->media_type,
info->media_subtype),
SpaFormat);
spa_pod_builder_push_format (&b, &f[0],
info->media_type,
info->media_subtype),
fmt = SPA_POD_BUILDER_DEREF (&b, f[0].ref, SpaFormat);
if (info->media_subtype == SPA_MEDIA_SUBTYPE_RAW) {
spa_pod_builder_prop (&b,
SPA_PROP_ID_VIDEO_FORMAT, SPA_POD_TYPE_INT,
spa_pod_builder_add (&b,
SPA_POD_TYPE_PROP, &f[1],
SPA_PROP_ID_VIDEO_FORMAT, SPA_POD_PROP_RANGE_NONE | SPA_POD_PROP_FLAG_READWRITE,
SPA_POD_TYPE_INT, 1,
info->format,
SPA_POD_PROP_RANGE_NONE | SPA_POD_PROP_FLAG_READWRITE,
0);
-SPA_POD_TYPE_PROP, &f[1], 0);
}
spa_pod_builder_add (&b,
SPA_POD_TYPE_PROP, &f[1],
SPA_PROP_ID_VIDEO_SIZE, SPA_POD_PROP_RANGE_NONE | SPA_POD_PROP_FLAG_READWRITE,
SPA_POD_TYPE_RECTANGLE, 1,
state->frmsize.discrete.width,
state->frmsize.discrete.height,
-SPA_POD_TYPE_PROP, &f[1], 0);
spa_pod_builder_prop (&b,
SPA_PROP_ID_VIDEO_SIZE, SPA_POD_TYPE_RECTANGLE,
state->frmsize.discrete.width,
state->frmsize.discrete.height,
SPA_POD_PROP_RANGE_NONE | SPA_POD_PROP_FLAG_READWRITE,
0);
spa_pod_builder_push_prop (&b, &f[1],
SPA_PROP_ID_VIDEO_FRAMERATE,
SPA_POD_PROP_RANGE_NONE |
SPA_POD_PROP_FLAG_UNSET |
SPA_POD_PROP_FLAG_READWRITE);
prop = SPA_MEMBER (b.data,
spa_pod_builder_push_prop (&b, &f[1],
SPA_PROP_ID_VIDEO_FRAMERATE,
SPA_POD_PROP_RANGE_NONE |
SPA_POD_PROP_FLAG_UNSET |
SPA_POD_PROP_FLAG_READWRITE),
SpaPODProp);
prop = SPA_POD_BUILDER_DEREF (&b, f[1].ref, SpaPODProp);
n_fractions = 0;
state->frmival.index = 0;

View file

@ -129,6 +129,7 @@ spa_videotestsrc_node_get_props (SpaNode *node,
{
SpaVideoTestSrc *this;
SpaPODBuilder b = { NULL, };
SpaPODFrame f;
if (node == NULL || props == NULL)
return SPA_RESULT_INVALID_ARGUMENTS;
@ -138,17 +139,20 @@ spa_videotestsrc_node_get_props (SpaNode *node,
spa_pod_builder_init (&b, this->props_buffer, sizeof (this->props_buffer));
*props = SPA_MEMBER (b.data, spa_pod_builder_props (&b,
PROP_ID_LIVE, SPA_POD_TYPE_BOOL,
this->props.live,
SPA_POD_PROP_FLAG_READWRITE |
SPA_POD_TYPE_PROP, &f,
PROP_ID_LIVE, SPA_POD_PROP_FLAG_READWRITE |
SPA_POD_PROP_RANGE_NONE,
PROP_ID_PATTERN, SPA_POD_TYPE_INT,
SPA_POD_TYPE_BOOL, 1,
this->props.live,
-SPA_POD_TYPE_PROP, &f,
SPA_POD_TYPE_PROP, &f,
PROP_ID_PATTERN, SPA_POD_PROP_FLAG_READWRITE |
SPA_POD_PROP_RANGE_ENUM,
SPA_POD_TYPE_INT, 3,
this->props.pattern,
SPA_POD_PROP_FLAG_READWRITE |
SPA_POD_PROP_RANGE_ENUM, 2,
pattern_val_smpte_snow,
pattern_val_snow,
0), SpaProps);
-SPA_POD_TYPE_PROP, &f, 0), SpaProps);
return SPA_RESULT_OK;
}
@ -431,6 +435,7 @@ spa_videotestsrc_node_port_enum_formats (SpaNode *node,
SpaFormat *fmt;
uint8_t buffer[1024];
SpaPODBuilder b = { NULL, };
SpaPODFrame f[2];
if (node == NULL || format == NULL)
return SPA_RESULT_INVALID_ARGUMENTS;
@ -447,24 +452,30 @@ next:
case 0:
fmt = SPA_MEMBER (buffer, spa_pod_builder_format (&b,
SPA_MEDIA_TYPE_VIDEO, SPA_MEDIA_SUBTYPE_RAW,
SPA_PROP_ID_VIDEO_FORMAT, SPA_POD_TYPE_INT,
SPA_POD_TYPE_PROP, &f[0],
SPA_PROP_ID_VIDEO_FORMAT, SPA_POD_PROP_FLAG_UNSET | SPA_POD_PROP_FLAG_READWRITE |
SPA_POD_PROP_RANGE_ENUM,
SPA_POD_TYPE_INT, 3,
SPA_VIDEO_FORMAT_RGB,
SPA_POD_PROP_FLAG_UNSET | SPA_POD_PROP_FLAG_READWRITE |
SPA_POD_PROP_RANGE_ENUM, 2,
SPA_VIDEO_FORMAT_RGB,
SPA_VIDEO_FORMAT_UYVY,
SPA_PROP_ID_VIDEO_SIZE, SPA_POD_TYPE_RECTANGLE,
320, 240,
SPA_POD_PROP_FLAG_UNSET | SPA_POD_PROP_FLAG_READWRITE |
-SPA_POD_TYPE_PROP, &f[0],
SPA_POD_TYPE_PROP, &f[0],
SPA_PROP_ID_VIDEO_SIZE, SPA_POD_PROP_FLAG_UNSET | SPA_POD_PROP_FLAG_READWRITE |
SPA_POD_PROP_RANGE_MIN_MAX,
SPA_POD_TYPE_RECTANGLE, 3,
320, 240,
1, 1,
INT32_MAX, INT32_MAX,
SPA_PROP_ID_VIDEO_FRAMERATE, SPA_POD_TYPE_FRACTION, 25, 1,
SPA_POD_PROP_FLAG_UNSET | SPA_POD_PROP_FLAG_READWRITE |
-SPA_POD_TYPE_PROP, &f[0],
SPA_POD_TYPE_PROP, &f[0],
SPA_PROP_ID_VIDEO_FRAMERATE, SPA_POD_PROP_FLAG_UNSET | SPA_POD_PROP_FLAG_READWRITE |
SPA_POD_PROP_RANGE_MIN_MAX,
SPA_POD_TYPE_FRACTION, 3,
25, 1,
0, 1,
INT32_MAX, 1,
0), SpaFormat);
-SPA_POD_TYPE_PROP, &f[0], 0), SpaFormat);
break;
default:
return SPA_RESULT_ENUM_END;
@ -569,6 +580,7 @@ spa_videotestsrc_node_port_get_format (SpaNode *node,
{
SpaVideoTestSrc *this;
SpaPODBuilder b = { NULL, };
SpaPODFrame f;
if (node == NULL || format == NULL)
return SPA_RESULT_INVALID_ARGUMENTS;
@ -585,18 +597,23 @@ spa_videotestsrc_node_port_get_format (SpaNode *node,
*format = SPA_MEMBER (b.data, spa_pod_builder_format (&b,
SPA_MEDIA_TYPE_VIDEO, SPA_MEDIA_SUBTYPE_RAW,
SPA_PROP_ID_VIDEO_FORMAT, SPA_POD_TYPE_INT,
SPA_POD_TYPE_PROP, &f,
SPA_PROP_ID_VIDEO_FORMAT, SPA_POD_PROP_FLAG_READWRITE,
SPA_POD_TYPE_INT, 1,
this->current_format.info.raw.format,
SPA_POD_PROP_FLAG_READWRITE,
SPA_PROP_ID_VIDEO_SIZE, SPA_POD_TYPE_RECTANGLE,
-SPA_POD_TYPE_PROP, &f,
SPA_POD_TYPE_PROP, &f,
SPA_PROP_ID_VIDEO_SIZE, SPA_POD_PROP_FLAG_READWRITE,
SPA_POD_TYPE_RECTANGLE, 1,
this->current_format.info.raw.size.width,
this->current_format.info.raw.size.height,
SPA_POD_PROP_FLAG_READWRITE,
SPA_PROP_ID_VIDEO_FRAMERATE, SPA_POD_TYPE_FRACTION,
-SPA_POD_TYPE_PROP, &f,
SPA_POD_TYPE_PROP, &f,
SPA_PROP_ID_VIDEO_FRAMERATE, SPA_POD_PROP_FLAG_READWRITE,
SPA_POD_TYPE_FRACTION, 1,
this->current_format.info.raw.framerate.num,
this->current_format.info.raw.framerate.denom,
SPA_POD_PROP_FLAG_READWRITE,
0), SpaFormat);
-SPA_POD_TYPE_PROP, &f, 0), SpaFormat);
return SPA_RESULT_OK;
}

View file

@ -119,6 +119,7 @@ spa_volume_node_get_props (SpaNode *node,
{
SpaVolume *this;
SpaPODBuilder b = { NULL, };
SpaPODFrame f;
if (node == NULL || props == NULL)
return SPA_RESULT_INVALID_ARGUMENTS;
@ -128,17 +129,20 @@ spa_volume_node_get_props (SpaNode *node,
spa_pod_builder_init (&b, this->props_buffer, sizeof (this->props_buffer));
*props = SPA_MEMBER (b.data, spa_pod_builder_props (&b,
PROP_ID_VOLUME, SPA_POD_TYPE_DOUBLE,
this->props.volume,
SPA_POD_PROP_FLAG_READWRITE |
SPA_POD_TYPE_PROP, &f,
PROP_ID_VOLUME, SPA_POD_PROP_FLAG_READWRITE |
SPA_POD_PROP_RANGE_MIN_MAX,
SPA_POD_TYPE_DOUBLE, 3,
this->props.volume,
0.0,
10.0,
PROP_ID_MUTE, SPA_POD_TYPE_BOOL,
this->props.mute,
SPA_POD_PROP_FLAG_READWRITE |
-SPA_POD_TYPE_PROP, &f,
SPA_POD_TYPE_PROP, &f,
PROP_ID_MUTE, SPA_POD_PROP_FLAG_READWRITE |
SPA_POD_PROP_RANGE_NONE,
0), SpaProps);
SPA_POD_TYPE_BOOL, 1,
this->props.mute,
-SPA_POD_TYPE_PROP, &f, 0), SpaProps);
return SPA_RESULT_OK;
}
@ -293,6 +297,7 @@ spa_volume_node_port_enum_formats (SpaNode *node,
SpaFormat *fmt;
uint8_t buffer[1024];
SpaPODBuilder b = { NULL, };
SpaPODFrame f;
if (node == NULL || format == NULL)
return SPA_RESULT_INVALID_ARGUMENTS;
@ -309,23 +314,28 @@ next:
case 0:
fmt = SPA_MEMBER (buffer, spa_pod_builder_format (&b,
SPA_MEDIA_TYPE_AUDIO, SPA_MEDIA_SUBTYPE_RAW,
SPA_PROP_ID_AUDIO_FORMAT, SPA_POD_TYPE_INT,
SPA_POD_TYPE_PROP, &f,
SPA_PROP_ID_AUDIO_FORMAT, SPA_POD_PROP_FLAG_UNSET | SPA_POD_PROP_FLAG_READWRITE |
SPA_POD_PROP_RANGE_ENUM,
SPA_POD_TYPE_INT, 3,
SPA_AUDIO_FORMAT_S16,
SPA_POD_PROP_FLAG_UNSET | SPA_POD_PROP_FLAG_READWRITE |
SPA_POD_PROP_RANGE_ENUM, 2,
SPA_AUDIO_FORMAT_S16,
SPA_AUDIO_FORMAT_S32,
SPA_PROP_ID_AUDIO_RATE, SPA_POD_TYPE_INT,
-SPA_POD_TYPE_PROP, &f,
SPA_POD_TYPE_PROP, &f,
SPA_PROP_ID_AUDIO_RATE, SPA_POD_PROP_FLAG_UNSET | SPA_POD_PROP_FLAG_READWRITE |
SPA_POD_PROP_RANGE_MIN_MAX,
SPA_POD_TYPE_INT, 3,
44100,
SPA_POD_PROP_FLAG_UNSET | SPA_POD_PROP_FLAG_READWRITE |
SPA_POD_PROP_RANGE_MIN_MAX,
1, INT32_MAX,
SPA_PROP_ID_AUDIO_CHANNELS, SPA_POD_TYPE_INT,
-SPA_POD_TYPE_PROP, &f,
SPA_POD_TYPE_PROP, &f,
SPA_PROP_ID_AUDIO_CHANNELS, SPA_POD_PROP_FLAG_UNSET | SPA_POD_PROP_FLAG_READWRITE |
SPA_POD_PROP_RANGE_MIN_MAX,
SPA_POD_TYPE_INT, 3,
2,
SPA_POD_PROP_FLAG_UNSET | SPA_POD_PROP_FLAG_READWRITE |
SPA_POD_PROP_RANGE_MIN_MAX,
1, INT32_MAX,
0), SpaFormat);
-SPA_POD_TYPE_PROP, &f, 0), SpaFormat);
break;
default:
return SPA_RESULT_ENUM_END;

View file

@ -120,6 +120,7 @@ spa_xv_sink_node_get_props (SpaNode *node,
{
SpaXvSink *this;
SpaPODBuilder b = { NULL, };
SpaPODFrame f;
if (node == NULL || props == NULL)
return SPA_RESULT_INVALID_ARGUMENTS;
@ -129,22 +130,24 @@ spa_xv_sink_node_get_props (SpaNode *node,
spa_pod_builder_init (&b, this->props_buffer, sizeof (this->props_buffer));
*props = SPA_MEMBER (b.data, spa_pod_builder_props (&b,
PROP_ID_DEVICE, SPA_POD_TYPE_STRING,
SPA_POD_TYPE_PROP, &f,
PROP_ID_DEVICE, SPA_POD_PROP_FLAG_READWRITE |
SPA_POD_PROP_RANGE_NONE,
-SPA_POD_TYPE_STRING, 1,
this->props.device, sizeof (this->props.device),
SPA_POD_PROP_FLAG_READWRITE |
-SPA_POD_TYPE_PROP, &f,
SPA_POD_TYPE_PROP, &f,
PROP_ID_DEVICE_NAME, SPA_POD_PROP_FLAG_READABLE |
SPA_POD_PROP_RANGE_NONE,
PROP_ID_DEVICE_NAME, SPA_POD_TYPE_STRING,
-SPA_POD_TYPE_STRING, 1,
this->props.device_name, sizeof (this->props.device_name),
SPA_POD_PROP_FLAG_READABLE |
-SPA_POD_TYPE_PROP, &f,
SPA_POD_TYPE_PROP, &f,
PROP_ID_DEVICE_FD, SPA_POD_PROP_FLAG_READABLE |
SPA_POD_PROP_RANGE_NONE,
PROP_ID_DEVICE_FD, SPA_POD_TYPE_INT,
SPA_POD_TYPE_INT, 1,
this->props.device_fd,
SPA_POD_PROP_FLAG_READABLE |
SPA_POD_PROP_RANGE_NONE,
0), SpaProps);
-SPA_POD_TYPE_PROP, &f, 0), SpaProps);
return SPA_RESULT_OK;
}