mirror of
				https://gitlab.freedesktop.org/pipewire/pipewire.git
				synced 2025-11-03 09:01:54 -05:00 
			
		
		
		
	video: add and parse modifier as well
This commit is contained in:
		
							parent
							
								
									f42ca8b52e
								
							
						
					
					
						commit
						5a6da7d5e1
					
				
					 3 changed files with 46 additions and 3 deletions
				
			
		| 
						 | 
					@ -225,6 +225,7 @@ static const struct spa_type_info spa_type_format[] = {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	{ SPA_FORMAT_VIDEO_format, SPA_TYPE_Id, SPA_TYPE_INFO_FORMAT_VIDEO_BASE "format",
 | 
						{ SPA_FORMAT_VIDEO_format, SPA_TYPE_Id, SPA_TYPE_INFO_FORMAT_VIDEO_BASE "format",
 | 
				
			||||||
		spa_type_video_format, },
 | 
							spa_type_video_format, },
 | 
				
			||||||
 | 
						{ SPA_FORMAT_VIDEO_modifier, SPA_TYPE_Long, SPA_TYPE_INFO_FORMAT_VIDEO_BASE "modifier", NULL },
 | 
				
			||||||
	{ SPA_FORMAT_VIDEO_size,  SPA_TYPE_Rectangle, SPA_TYPE_INFO_FORMAT_VIDEO_BASE "size", NULL },
 | 
						{ SPA_FORMAT_VIDEO_size,  SPA_TYPE_Rectangle, SPA_TYPE_INFO_FORMAT_VIDEO_BASE "size", NULL },
 | 
				
			||||||
	{ SPA_FORMAT_VIDEO_framerate, SPA_TYPE_Fraction, SPA_TYPE_INFO_FORMAT_VIDEO_BASE "framerate", NULL },
 | 
						{ SPA_FORMAT_VIDEO_framerate, SPA_TYPE_Fraction, SPA_TYPE_INFO_FORMAT_VIDEO_BASE "framerate", NULL },
 | 
				
			||||||
	{ SPA_FORMAT_VIDEO_maxFramerate, SPA_TYPE_Fraction, SPA_TYPE_INFO_FORMAT_VIDEO_BASE "maxFramerate", NULL },
 | 
						{ SPA_FORMAT_VIDEO_maxFramerate, SPA_TYPE_Fraction, SPA_TYPE_INFO_FORMAT_VIDEO_BASE "maxFramerate", NULL },
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -41,6 +41,7 @@ spa_format_video_raw_parse(const struct spa_pod *format,
 | 
				
			||||||
	return spa_pod_parse_object(format,
 | 
						return spa_pod_parse_object(format,
 | 
				
			||||||
		SPA_TYPE_OBJECT_Format, NULL,
 | 
							SPA_TYPE_OBJECT_Format, NULL,
 | 
				
			||||||
		SPA_FORMAT_VIDEO_format,		SPA_POD_Id(&info->format),
 | 
							SPA_FORMAT_VIDEO_format,		SPA_POD_Id(&info->format),
 | 
				
			||||||
 | 
							SPA_FORMAT_VIDEO_modifier,		SPA_POD_OPT_Long(&info->modifier),
 | 
				
			||||||
		SPA_FORMAT_VIDEO_size,			SPA_POD_Rectangle(&info->size),
 | 
							SPA_FORMAT_VIDEO_size,			SPA_POD_Rectangle(&info->size),
 | 
				
			||||||
		SPA_FORMAT_VIDEO_framerate,		SPA_POD_Fraction(&info->framerate),
 | 
							SPA_FORMAT_VIDEO_framerate,		SPA_POD_Fraction(&info->framerate),
 | 
				
			||||||
		SPA_FORMAT_VIDEO_maxFramerate,		SPA_POD_OPT_Fraction(&info->max_framerate),
 | 
							SPA_FORMAT_VIDEO_maxFramerate,		SPA_POD_OPT_Fraction(&info->max_framerate),
 | 
				
			||||||
| 
						 | 
					@ -60,13 +61,52 @@ static inline struct spa_pod *
 | 
				
			||||||
spa_format_video_raw_build(struct spa_pod_builder *builder, uint32_t id,
 | 
					spa_format_video_raw_build(struct spa_pod_builder *builder, uint32_t id,
 | 
				
			||||||
			   struct spa_video_info_raw *info)
 | 
								   struct spa_video_info_raw *info)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return (struct spa_pod *) spa_pod_builder_add_object(builder,
 | 
						struct spa_pod_frame f;
 | 
				
			||||||
			SPA_TYPE_OBJECT_Format, id,
 | 
						spa_pod_builder_push_object(builder, &f, SPA_TYPE_OBJECT_Format, id);
 | 
				
			||||||
 | 
						spa_pod_builder_add(builder,
 | 
				
			||||||
			SPA_FORMAT_mediaType,		SPA_POD_Id(SPA_MEDIA_TYPE_video),
 | 
								SPA_FORMAT_mediaType,		SPA_POD_Id(SPA_MEDIA_TYPE_video),
 | 
				
			||||||
			SPA_FORMAT_mediaSubtype,	SPA_POD_Id(SPA_MEDIA_SUBTYPE_raw),
 | 
								SPA_FORMAT_mediaSubtype,	SPA_POD_Id(SPA_MEDIA_SUBTYPE_raw),
 | 
				
			||||||
			SPA_FORMAT_VIDEO_format,	SPA_POD_Id(info->format),
 | 
								SPA_FORMAT_VIDEO_format,	SPA_POD_Id(info->format),
 | 
				
			||||||
			SPA_FORMAT_VIDEO_size,		SPA_POD_Rectangle(&info->size),
 | 
								SPA_FORMAT_VIDEO_size,		SPA_POD_Rectangle(&info->size),
 | 
				
			||||||
			SPA_FORMAT_VIDEO_framerate,	SPA_POD_Fraction(&info->framerate));
 | 
								SPA_FORMAT_VIDEO_framerate,	SPA_POD_Fraction(&info->framerate),
 | 
				
			||||||
 | 
								0);
 | 
				
			||||||
 | 
						if (info->modifier != 0)
 | 
				
			||||||
 | 
							spa_pod_builder_add(builder,
 | 
				
			||||||
 | 
								SPA_FORMAT_VIDEO_modifier,	SPA_POD_Long(info->modifier), 0);
 | 
				
			||||||
 | 
						if (info->max_framerate.denom != 0)
 | 
				
			||||||
 | 
							spa_pod_builder_add(builder,
 | 
				
			||||||
 | 
								SPA_FORMAT_VIDEO_maxFramerate,	SPA_POD_Fraction(info->max_framerate), 0);
 | 
				
			||||||
 | 
						if (info->views != 0)
 | 
				
			||||||
 | 
							spa_pod_builder_add(builder,
 | 
				
			||||||
 | 
								SPA_FORMAT_VIDEO_views,		SPA_POD_Int(info->views), 0);
 | 
				
			||||||
 | 
						if (info->interlace_mode != 0)
 | 
				
			||||||
 | 
							spa_pod_builder_add(builder,
 | 
				
			||||||
 | 
								SPA_FORMAT_VIDEO_interlaceMode,	SPA_POD_Id(info->interlace_mode), 0);
 | 
				
			||||||
 | 
						if (info->pixel_aspect_ratio.denom != 0)
 | 
				
			||||||
 | 
							spa_pod_builder_add(builder,
 | 
				
			||||||
 | 
								SPA_FORMAT_VIDEO_pixelAspectRatio,SPA_POD_Fraction(info->pixel_aspect_ratio), 0);
 | 
				
			||||||
 | 
						if (info->multiview_mode != 0)
 | 
				
			||||||
 | 
							spa_pod_builder_add(builder,
 | 
				
			||||||
 | 
								SPA_FORMAT_VIDEO_multiviewMode,	SPA_POD_Id(info->multiview_mode), 0);
 | 
				
			||||||
 | 
						if (info->multiview_flags != 0)
 | 
				
			||||||
 | 
							spa_pod_builder_add(builder,
 | 
				
			||||||
 | 
								SPA_FORMAT_VIDEO_multiviewFlags,SPA_POD_Id(info->multiview_flags), 0);
 | 
				
			||||||
 | 
						if (info->chroma_site != 0)
 | 
				
			||||||
 | 
							spa_pod_builder_add(builder,
 | 
				
			||||||
 | 
								SPA_FORMAT_VIDEO_chromaSite,	SPA_POD_Id(info->chroma_site), 0);
 | 
				
			||||||
 | 
						if (info->color_range != 0)
 | 
				
			||||||
 | 
							spa_pod_builder_add(builder,
 | 
				
			||||||
 | 
								SPA_FORMAT_VIDEO_colorRange,	SPA_POD_Id(info->color_range), 0);
 | 
				
			||||||
 | 
						if (info->color_matrix != 0)
 | 
				
			||||||
 | 
							spa_pod_builder_add(builder,
 | 
				
			||||||
 | 
								SPA_FORMAT_VIDEO_colorMatrix,	SPA_POD_Id(info->color_matrix), 0);
 | 
				
			||||||
 | 
						if (info->transfer_function != 0)
 | 
				
			||||||
 | 
							spa_pod_builder_add(builder,
 | 
				
			||||||
 | 
								SPA_FORMAT_VIDEO_transferFunction,SPA_POD_Id(info->transfer_function), 0);
 | 
				
			||||||
 | 
						if (info->color_primaries != 0)
 | 
				
			||||||
 | 
							spa_pod_builder_add(builder,
 | 
				
			||||||
 | 
								SPA_FORMAT_VIDEO_colorPrimaries,SPA_POD_Id(info->color_primaries), 0);
 | 
				
			||||||
 | 
						return (struct spa_pod*)spa_pod_builder_pop(builder, &f);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static inline int
 | 
					static inline int
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -166,6 +166,7 @@ enum spa_video_interlace_mode {
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * spa_video_info_raw:
 | 
					 * spa_video_info_raw:
 | 
				
			||||||
 * @format: the format
 | 
					 * @format: the format
 | 
				
			||||||
 | 
					 * @modifier: format modifier
 | 
				
			||||||
 * @size: the frame size of the video
 | 
					 * @size: the frame size of the video
 | 
				
			||||||
 * @framerate: the framerate of the video 0/1 means variable rate
 | 
					 * @framerate: the framerate of the video 0/1 means variable rate
 | 
				
			||||||
 * @max_framerate: the maximum framerate of the video. This is only valid when
 | 
					 * @max_framerate: the maximum framerate of the video. This is only valid when
 | 
				
			||||||
| 
						 | 
					@ -185,6 +186,7 @@ enum spa_video_interlace_mode {
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
struct spa_video_info_raw {
 | 
					struct spa_video_info_raw {
 | 
				
			||||||
	enum spa_video_format format;
 | 
						enum spa_video_format format;
 | 
				
			||||||
 | 
						int64_t modifier;
 | 
				
			||||||
	struct spa_rectangle size;
 | 
						struct spa_rectangle size;
 | 
				
			||||||
	struct spa_fraction framerate;
 | 
						struct spa_fraction framerate;
 | 
				
			||||||
	struct spa_fraction max_framerate;
 | 
						struct spa_fraction max_framerate;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue