39spa_format_audio_raw_parse(
const struct spa_pod *format,
struct spa_audio_info_raw *info)
41 struct spa_pod *position = NULL;
44 res = spa_pod_parse_object(format,
45 SPA_TYPE_OBJECT_Format, NULL,
46 SPA_FORMAT_AUDIO_format, SPA_POD_OPT_Id(&info->format),
47 SPA_FORMAT_AUDIO_rate, SPA_POD_OPT_Int(&info->rate),
48 SPA_FORMAT_AUDIO_channels, SPA_POD_OPT_Int(&info->channels),
49 SPA_FORMAT_AUDIO_position, SPA_POD_OPT_Pod(&position));
50 if (position == NULL ||
51 !spa_pod_copy_array(position, SPA_TYPE_Id, info->position, SPA_AUDIO_MAX_CHANNELS))
52 SPA_FLAG_SET(info->flags, SPA_AUDIO_FLAG_UNPOSITIONED);
58spa_format_audio_raw_build(
struct spa_pod_builder *builder, uint32_t id,
59 const struct spa_audio_info_raw *info)
61 struct spa_pod_frame f;
62 spa_pod_builder_push_object(builder, &f, SPA_TYPE_OBJECT_Format, id);
63 spa_pod_builder_add(builder,
64 SPA_FORMAT_mediaType, SPA_POD_Id(SPA_MEDIA_TYPE_audio),
65 SPA_FORMAT_mediaSubtype, SPA_POD_Id(SPA_MEDIA_SUBTYPE_raw),
67 if (info->format != SPA_AUDIO_FORMAT_UNKNOWN)
68 spa_pod_builder_add(builder,
69 SPA_FORMAT_AUDIO_format, SPA_POD_Id(info->format), 0);
71 spa_pod_builder_add(builder,
72 SPA_FORMAT_AUDIO_rate, SPA_POD_Int(info->rate), 0);
73 if (info->channels != 0) {
74 spa_pod_builder_add(builder,
75 SPA_FORMAT_AUDIO_channels, SPA_POD_Int(info->channels), 0);
76 if (!SPA_FLAG_IS_SET(info->flags, SPA_AUDIO_FLAG_UNPOSITIONED)) {
77 spa_pod_builder_add(builder, SPA_FORMAT_AUDIO_position,
78 SPA_POD_Array(
sizeof(uint32_t), SPA_TYPE_Id,
79 info->channels, info->position), 0);
82 return (
struct spa_pod*)spa_pod_builder_pop(builder, &f);