mirror of
				https://gitlab.freedesktop.org/pipewire/pipewire.git
				synced 2025-11-03 09:01:54 -05:00 
			
		
		
		
	media-session: handle device events
The object config event should set props on the object.
This commit is contained in:
		
							parent
							
								
									ece8a95c29
								
							
						
					
					
						commit
						deb3fa1d9b
					
				
					 1 changed files with 31 additions and 1 deletions
				
			
		| 
						 | 
					@ -31,12 +31,14 @@
 | 
				
			||||||
#include "config.h"
 | 
					#include "config.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <spa/monitor/device.h>
 | 
					#include <spa/monitor/device.h>
 | 
				
			||||||
 | 
					#include <spa/monitor/event.h>
 | 
				
			||||||
#include <spa/node/node.h>
 | 
					#include <spa/node/node.h>
 | 
				
			||||||
#include <spa/utils/hook.h>
 | 
					#include <spa/utils/hook.h>
 | 
				
			||||||
#include <spa/utils/result.h>
 | 
					#include <spa/utils/result.h>
 | 
				
			||||||
#include <spa/utils/names.h>
 | 
					#include <spa/utils/names.h>
 | 
				
			||||||
#include <spa/utils/result.h>
 | 
					#include <spa/utils/result.h>
 | 
				
			||||||
#include <spa/pod/builder.h>
 | 
					#include <spa/pod/builder.h>
 | 
				
			||||||
 | 
					#include <spa/pod/parser.h>
 | 
				
			||||||
#include <spa/param/props.h>
 | 
					#include <spa/param/props.h>
 | 
				
			||||||
#include <spa/debug/dict.h>
 | 
					#include <spa/debug/dict.h>
 | 
				
			||||||
#include <spa/debug/pod.h>
 | 
					#include <spa/debug/pod.h>
 | 
				
			||||||
| 
						 | 
					@ -229,9 +231,37 @@ static void bluez5_device_object_info(void *data, uint32_t id,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void bluez_device_event(void *data, const struct spa_event *event)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						struct device *device = data;
 | 
				
			||||||
 | 
						struct node *node;
 | 
				
			||||||
 | 
						uint32_t id, type;
 | 
				
			||||||
 | 
						struct spa_pod *props = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (spa_pod_parse_object(&event->pod,
 | 
				
			||||||
 | 
								SPA_TYPE_EVENT_Device, &type,
 | 
				
			||||||
 | 
								SPA_EVENT_DEVICE_Object, SPA_POD_Int(&id),
 | 
				
			||||||
 | 
								SPA_EVENT_DEVICE_Props, SPA_POD_OPT_Pod(&props)) < 0)
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if ((node = bluez5_find_node(device, id)) == NULL)
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						switch (type) {
 | 
				
			||||||
 | 
						case SPA_DEVICE_EVENT_ObjectConfig:
 | 
				
			||||||
 | 
							if (props)
 | 
				
			||||||
 | 
								pw_node_set_param((struct pw_node*)node->snode->obj.proxy,
 | 
				
			||||||
 | 
									SPA_PARAM_Props, 0, props);
 | 
				
			||||||
 | 
							break;
 | 
				
			||||||
 | 
						default:
 | 
				
			||||||
 | 
							break;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static const struct spa_device_events bluez5_device_events = {
 | 
					static const struct spa_device_events bluez5_device_events = {
 | 
				
			||||||
	SPA_VERSION_DEVICE_EVENTS,
 | 
						SPA_VERSION_DEVICE_EVENTS,
 | 
				
			||||||
	.object_info = bluez5_device_object_info
 | 
						.object_info = bluez5_device_object_info,
 | 
				
			||||||
 | 
						.event = bluez_device_event,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static struct device *bluez5_find_device(struct impl *impl, uint32_t id)
 | 
					static struct device *bluez5_find_device(struct impl *impl, uint32_t id)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue