mirror of
				https://gitlab.freedesktop.org/pipewire/pipewire.git
				synced 2025-10-29 05:40:27 -04:00 
			
		
		
		
	spa: support props flags building and parsing
Add an option to make a property with specific flags. Do this by changing the parser and builder to see the invalid property as an escape sequence followed by the property key and the flags.
This commit is contained in:
		
							parent
							
								
									41e6e875e5
								
							
						
					
					
						commit
						9df770eb16
					
				
					 3 changed files with 17 additions and 5 deletions
				
			
		|  | @ -625,10 +625,14 @@ spa_pod_builder_addv(struct spa_pod_builder *builder, va_list args) | ||||||
| 		switch (ftype) { | 		switch (ftype) { | ||||||
| 		case SPA_TYPE_Object: | 		case SPA_TYPE_Object: | ||||||
| 		{ | 		{ | ||||||
| 			uint32_t key = va_arg(args, uint32_t); | 			uint32_t key = va_arg(args, uint32_t), flags = 0; | ||||||
| 			if (key == 0) | 			if (key == 0) | ||||||
| 				goto exit; | 				goto exit; | ||||||
| 			spa_pod_builder_prop(builder, key, 0); | 			if (key == SPA_ID_INVALID) { | ||||||
|  | 				key = va_arg(args, uint32_t); | ||||||
|  | 				flags = va_arg(args, uint32_t); | ||||||
|  | 			} | ||||||
|  | 			spa_pod_builder_prop(builder, key, flags); | ||||||
| 			break; | 			break; | ||||||
| 		} | 		} | ||||||
| 		case SPA_TYPE_Sequence: | 		case SPA_TYPE_Sequence: | ||||||
|  |  | ||||||
|  | @ -800,13 +800,19 @@ SPA_API_POD_PARSER int spa_pod_parser_getv(struct spa_pod_parser *parser, va_lis | ||||||
| 		struct spa_pod_prop prop; | 		struct spa_pod_prop prop; | ||||||
| 
 | 
 | ||||||
| 		if (f->pod.type == SPA_TYPE_Object) { | 		if (f->pod.type == SPA_TYPE_Object) { | ||||||
| 			uint32_t key = va_arg(args, uint32_t); | 			uint32_t key = va_arg(args, uint32_t), *flags = NULL; | ||||||
| 
 | 
 | ||||||
| 			if (key == 0) | 			if (key == 0) | ||||||
| 				break; | 				break; | ||||||
| 
 | 			if (key == SPA_ID_INVALID) { | ||||||
| 			if (spa_pod_parser_object_find_prop(parser, key, &prop, &body) >= 0) | 				key = va_arg(args, uint32_t); | ||||||
|  | 				flags = va_arg(args, uint32_t*); | ||||||
|  | 			} | ||||||
|  | 			if (spa_pod_parser_object_find_prop(parser, key, &prop, &body) >= 0) { | ||||||
| 				pod = prop.value; | 				pod = prop.value; | ||||||
|  | 				if (flags) | ||||||
|  | 					*flags = prop.flags; | ||||||
|  | 			} | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		if ((format = va_arg(args, char *)) == NULL) | 		if ((format = va_arg(args, char *)) == NULL) | ||||||
|  |  | ||||||
|  | @ -20,6 +20,8 @@ extern "C" { | ||||||
| 
 | 
 | ||||||
| #define SPA_POD_Prop(key,...)				\ | #define SPA_POD_Prop(key,...)				\ | ||||||
| 	key, ##__VA_ARGS__ | 	key, ##__VA_ARGS__ | ||||||
|  | #define SPA_POD_Propf(key,flags,...)			\ | ||||||
|  | 	SPA_ID_INVALID, key, flags, ##__VA_ARGS__ | ||||||
| 
 | 
 | ||||||
| #define SPA_POD_Control(offset,type,...)		\ | #define SPA_POD_Control(offset,type,...)		\ | ||||||
| 	offset, type, ##__VA_ARGS__ | 	offset, type, ##__VA_ARGS__ | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Wim Taymans
						Wim Taymans