mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-03 09:01:54 -05:00
Port: Add tag param
The tag param has a list of arbitrary key/value pairs. Like the Latency param, it travels up and downstream. Mixers will append the info dictionaries or do some more fancy merging. The purpose is to transport arbirary metadata, out-of-band, through the graph and it's used for stream metadata and other stream properties.
This commit is contained in:
parent
6bf42e9bcd
commit
41dcac0ecd
20 changed files with 566 additions and 24 deletions
|
|
@ -14,8 +14,10 @@
|
|||
|
||||
#include <spa/utils/result.h>
|
||||
#include <spa/param/video/format-utils.h>
|
||||
#include <spa/param/tag-utils.h>
|
||||
#include <spa/param/props.h>
|
||||
#include <spa/debug/format.h>
|
||||
#include <spa/debug/pod.h>
|
||||
|
||||
#include <pipewire/pipewire.h>
|
||||
|
||||
|
|
@ -278,6 +280,10 @@ on_stream_param_changed(void *_data, uint32_t id, const struct spa_pod *param)
|
|||
void *d;
|
||||
int32_t mult, size;
|
||||
|
||||
if (param != NULL && id == SPA_PARAM_Tag) {
|
||||
spa_debug_pod(0, NULL, param);
|
||||
return;
|
||||
}
|
||||
/* NULL means to clear the format */
|
||||
if (param == NULL || id != SPA_PARAM_Format)
|
||||
return;
|
||||
|
|
@ -422,7 +428,7 @@ static void do_quit(void *userdata, int signal_number)
|
|||
int main(int argc, char *argv[])
|
||||
{
|
||||
struct data data = { 0, };
|
||||
const struct spa_pod *params[2];
|
||||
const struct spa_pod *params[3];
|
||||
uint8_t buffer[1024];
|
||||
struct spa_pod_builder b = SPA_POD_BUILDER_INIT(buffer, sizeof(buffer));
|
||||
struct pw_properties *props;
|
||||
|
|
@ -478,6 +484,16 @@ int main(int argc, char *argv[])
|
|||
* object to the stack. */
|
||||
n_params = build_format(&data, &b, params);
|
||||
|
||||
{
|
||||
struct spa_pod_frame f;
|
||||
struct spa_dict_item items[1];
|
||||
/* send a tag, input tags travel upstream */
|
||||
spa_tag_build_start(&b, &f, SPA_PARAM_Tag, SPA_DIRECTION_INPUT);
|
||||
items[0] = SPA_DICT_ITEM_INIT("my-tag-other-key", "my-special-other-tag-value");
|
||||
spa_tag_build_add_dict(&b, &SPA_DICT_INIT(items, 1));
|
||||
params[n_params++] = spa_tag_build_end(&b, &f);
|
||||
}
|
||||
|
||||
/* now connect the stream, we need a direction (input/output),
|
||||
* an optional target node to connect to, some flags and parameters
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -14,6 +14,8 @@
|
|||
#include <math.h>
|
||||
|
||||
#include <spa/param/video/format-utils.h>
|
||||
#include <spa/param/tag-utils.h>
|
||||
#include <spa/debug/pod.h>
|
||||
|
||||
#include <pipewire/pipewire.h>
|
||||
|
||||
|
|
@ -212,6 +214,10 @@ on_stream_param_changed(void *_data, uint32_t id, const struct spa_pod *param)
|
|||
struct spa_pod_builder b = SPA_POD_BUILDER_INIT(params_buffer, sizeof(params_buffer));
|
||||
const struct spa_pod *params[5];
|
||||
|
||||
if (param != NULL && id == SPA_PARAM_Tag) {
|
||||
spa_debug_pod(0, NULL, param);
|
||||
return;
|
||||
}
|
||||
if (param == NULL || id != SPA_PARAM_Format)
|
||||
return;
|
||||
|
||||
|
|
@ -276,7 +282,7 @@ static void do_quit(void *userdata, int signal_number)
|
|||
int main(int argc, char *argv[])
|
||||
{
|
||||
struct data data = { 0, };
|
||||
const struct spa_pod *params[1];
|
||||
const struct spa_pod *params[2];
|
||||
uint8_t buffer[1024];
|
||||
struct spa_pod_builder b = SPA_POD_BUILDER_INIT(buffer, sizeof(buffer));
|
||||
|
||||
|
|
@ -314,6 +320,16 @@ int main(int argc, char *argv[])
|
|||
&SPA_RECTANGLE(4096, 4096)),
|
||||
SPA_FORMAT_VIDEO_framerate, SPA_POD_Fraction(&SPA_FRACTION(25, 1)));
|
||||
|
||||
{
|
||||
struct spa_pod_frame f;
|
||||
struct spa_dict_item items[1];
|
||||
/* send a tag, output tags travel downstream */
|
||||
spa_tag_build_start(&b, &f, SPA_PARAM_Tag, SPA_DIRECTION_OUTPUT);
|
||||
items[0] = SPA_DICT_ITEM_INIT("my-tag-key", "my-special-tag-value");
|
||||
spa_tag_build_add_dict(&b, &SPA_DICT_INIT(items, 1));
|
||||
params[1] = spa_tag_build_end(&b, &f);
|
||||
}
|
||||
|
||||
pw_stream_add_listener(data.stream,
|
||||
&data.stream_listener,
|
||||
&stream_events,
|
||||
|
|
@ -324,7 +340,7 @@ int main(int argc, char *argv[])
|
|||
PW_ID_ANY,
|
||||
PW_STREAM_FLAG_DRIVER |
|
||||
PW_STREAM_FLAG_MAP_BUFFERS,
|
||||
params, 1);
|
||||
params, 2);
|
||||
|
||||
pw_main_loop_run(data.loop);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue