mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-10-31 22:25:38 -04:00
rework props with pod
This commit is contained in:
parent
f02f93cda9
commit
dbae2e3f96
25 changed files with 232 additions and 472 deletions
|
|
@ -60,10 +60,13 @@ spa_format_audio_parse (const SpaFormat *format,
|
|||
SpaPODProp *prop;
|
||||
const ParseInfo *pinfo, *find;
|
||||
|
||||
if (format->body.media_type != SPA_MEDIA_TYPE_AUDIO)
|
||||
if (format->body.media_type.value != SPA_MEDIA_TYPE_AUDIO)
|
||||
return SPA_RESULT_INVALID_MEDIA_TYPE;
|
||||
|
||||
switch (format->body.media_subtype) {
|
||||
info->media_type = format->body.media_type.value;
|
||||
info->media_subtype = format->body.media_subtype.value;
|
||||
|
||||
switch (info->media_subtype) {
|
||||
case SPA_MEDIA_SUBTYPE_RAW:
|
||||
pinfo = raw_parse_info;
|
||||
break;
|
||||
|
|
@ -85,9 +88,6 @@ spa_format_audio_parse (const SpaFormat *format,
|
|||
return SPA_RESULT_INVALID_ARGUMENTS;
|
||||
}
|
||||
|
||||
info->media_type = format->body.media_type;
|
||||
info->media_subtype = format->body.media_subtype;
|
||||
|
||||
SPA_POD_FOREACH (format, prop) {
|
||||
if ((find = parse_info_find (pinfo, prop->body.key, prop->body.value.type))) {
|
||||
memcpy (SPA_MEMBER (info, find->offset, void),
|
||||
|
|
|
|||
|
|
@ -227,6 +227,7 @@ spa_debug_dump_mem (const void *mem, size_t size)
|
|||
SpaResult
|
||||
spa_debug_props (const SpaProps *props, bool print_ranges)
|
||||
{
|
||||
spa_debug_pod (&props->pod);
|
||||
return SPA_RESULT_OK;
|
||||
}
|
||||
|
||||
|
|
@ -352,7 +353,7 @@ print_pod_value (uint32_t size, uint32_t type, void *body, int prefix)
|
|||
printf ("%-*sDouble %g\n", prefix, "", *(double *) body);
|
||||
break;
|
||||
case SPA_POD_TYPE_STRING:
|
||||
printf ("%-*sString %s\n", prefix, "", (char *) body);
|
||||
printf ("%-*sString \"%s\"\n", prefix, "", (char *) body);
|
||||
break;
|
||||
case SPA_POD_TYPE_RECTANGLE:
|
||||
{
|
||||
|
|
@ -419,17 +420,6 @@ print_pod_value (uint32_t size, uint32_t type, void *body, int prefix)
|
|||
}
|
||||
break;
|
||||
}
|
||||
case SPA_POD_TYPE_FORMAT:
|
||||
{
|
||||
SpaFormatBody *b = body;
|
||||
SpaPODProp *p;
|
||||
|
||||
printf ("%-*sFormat: size %d\n", prefix, "", size);
|
||||
printf ("%-*s Media Type: %d / %d\n", prefix, "", b->media_type, b->media_subtype);
|
||||
SPA_FORMAT_BODY_FOREACH (b, size, p)
|
||||
print_pod_value (p->pod.size, p->pod.type, SPA_POD_BODY (p), prefix + 6);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -491,16 +481,20 @@ spa_debug_format (const SpaFormat *format)
|
|||
const char *media_subtype;
|
||||
const char **prop_names;
|
||||
SpaPODProp *prop;
|
||||
uint32_t mtype, mstype;
|
||||
|
||||
if (format == NULL)
|
||||
return SPA_RESULT_INVALID_ARGUMENTS;
|
||||
|
||||
if (format->body.media_type > 0 && format->body.media_type < SPA_N_ELEMENTS (media_type_names)) {
|
||||
media_type = media_type_names[format->body.media_type].name;
|
||||
first = media_type_names[format->body.media_type].first;
|
||||
last = media_type_names[format->body.media_type].last;
|
||||
idx = media_type_names[format->body.media_type].idx;
|
||||
prop_names = media_type_names[format->body.media_type].prop_names;
|
||||
mtype = format->body.media_type.value;
|
||||
mstype = format->body.media_subtype.value;
|
||||
|
||||
if (mtype > 0 && mtype < SPA_N_ELEMENTS (media_type_names)) {
|
||||
media_type = media_type_names[mtype].name;
|
||||
first = media_type_names[mtype].first;
|
||||
last = media_type_names[mtype].last;
|
||||
idx = media_type_names[mtype].idx;
|
||||
prop_names = media_type_names[mtype].prop_names;
|
||||
}
|
||||
else {
|
||||
media_type = "unknown";
|
||||
|
|
@ -508,11 +502,11 @@ spa_debug_format (const SpaFormat *format)
|
|||
prop_names = NULL;
|
||||
}
|
||||
|
||||
if (format->body.media_subtype >= SPA_MEDIA_SUBTYPE_ANY_FIRST &&
|
||||
format->body.media_subtype <= SPA_MEDIA_SUBTYPE_ANY_LAST) {
|
||||
media_subtype = media_subtype_names[format->body.media_subtype].name;
|
||||
} else if (format->body.media_subtype >= first && format->body.media_subtype <= last)
|
||||
media_subtype = media_subtype_names[format->body.media_subtype - first + idx].name;
|
||||
if (mstype >= SPA_MEDIA_SUBTYPE_ANY_FIRST &&
|
||||
mstype <= SPA_MEDIA_SUBTYPE_ANY_LAST) {
|
||||
media_subtype = media_subtype_names[mstype].name;
|
||||
} else if (mstype >= first && mstype <= last)
|
||||
media_subtype = media_subtype_names[mstype - first + idx].name;
|
||||
else
|
||||
media_subtype = "unknown";
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
spalib_sources = ['audio-raw.c',
|
||||
'debug.c',
|
||||
'mapper.c',
|
||||
'props.c',
|
||||
'video-raw.c']
|
||||
|
||||
spalib = shared_library('spa-lib',
|
||||
|
|
|
|||
|
|
@ -26,42 +26,6 @@ extern "C" {
|
|||
|
||||
#include <spa/props.h>
|
||||
|
||||
/**
|
||||
* spa_props_set_value:
|
||||
* @props: a #SpaProps
|
||||
* @index: the index of the property in the prop_info array
|
||||
* @value: the value to set
|
||||
*
|
||||
* Sets @value in @prop. type should match the type specified
|
||||
* in the #SpaPropInfo at @index or else #SPA_RESULT_WRONG_PROPERTY_TYPE
|
||||
* is returned.
|
||||
*
|
||||
* Returns: #SPA_RESULT_OK on success.
|
||||
* #SPA_RESULT_INVALID_PROPERTY_INDEX when @index is not valid
|
||||
* #SPA_RESULT_WRONG_PROPERTY_TYPE when type is not correct
|
||||
*/
|
||||
SpaResult spa_props_set_value (SpaProps *props,
|
||||
unsigned int index,
|
||||
const SpaPropValue *value);
|
||||
/**
|
||||
* spa_props_get_value:
|
||||
* @props: a #SpaProps
|
||||
* @index: the property index in the prop_info array
|
||||
* @value: a location for the type, size and value
|
||||
*
|
||||
* Get the size and value of the property at @index.
|
||||
*
|
||||
* Returns: #SPA_RESULT_OK on success.
|
||||
* #SPA_RESULT_INVALID_PROPERTY_INDEX when @index is not valid
|
||||
* #SPA_RESULT_PROPERTY_UNSET when no value has been set yet
|
||||
*/
|
||||
SpaResult spa_props_get_value (const SpaProps *props,
|
||||
unsigned int index,
|
||||
SpaPropValue *value);
|
||||
|
||||
SpaResult spa_props_copy_values (const SpaProps *src,
|
||||
SpaProps *dest);
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -85,10 +85,13 @@ spa_format_video_parse (const SpaFormat *format,
|
|||
SpaPODProp *prop;
|
||||
const ParseInfo *pinfo, *find;
|
||||
|
||||
if (format->body.media_type != SPA_MEDIA_TYPE_VIDEO)
|
||||
if (format->body.media_type.value != SPA_MEDIA_TYPE_VIDEO)
|
||||
return SPA_RESULT_INVALID_MEDIA_TYPE;
|
||||
|
||||
switch (format->body.media_subtype) {
|
||||
info->media_type = format->body.media_type.value;
|
||||
info->media_subtype = format->body.media_subtype.value;
|
||||
|
||||
switch (info->media_subtype) {
|
||||
case SPA_MEDIA_SUBTYPE_RAW:
|
||||
pinfo = raw_parse_info;
|
||||
break;
|
||||
|
|
@ -116,9 +119,6 @@ spa_format_video_parse (const SpaFormat *format,
|
|||
return SPA_RESULT_INVALID_ARGUMENTS;
|
||||
}
|
||||
|
||||
info->media_type = format->body.media_type;
|
||||
info->media_subtype = format->body.media_subtype;
|
||||
|
||||
SPA_POD_FOREACH (format, prop) {
|
||||
if ((find = parse_info_find (pinfo, prop->body.key, prop->body.value.type))) {
|
||||
memcpy (SPA_MEMBER (info, find->offset, void),
|
||||
|
|
@ -142,8 +142,8 @@ spa_format_filter (const SpaFormat *format,
|
|||
return SPA_RESULT_OK;
|
||||
}
|
||||
|
||||
if (filter->body.media_type != format->body.media_type ||
|
||||
filter->body.media_subtype != format->body.media_subtype)
|
||||
if (filter->body.media_type.value != format->body.media_type.value ||
|
||||
filter->body.media_subtype.value != format->body.media_subtype.value)
|
||||
return SPA_RESULT_INVALID_MEDIA_TYPE;
|
||||
|
||||
spa_pod_builder_raw (result, format, SPA_POD_SIZE (format), true);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue