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_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_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 },
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -41,6 +41,7 @@ spa_format_video_raw_parse(const struct spa_pod *format,
 | 
			
		|||
	return spa_pod_parse_object(format,
 | 
			
		||||
		SPA_TYPE_OBJECT_Format, NULL,
 | 
			
		||||
		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_framerate,		SPA_POD_Fraction(&info->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,
 | 
			
		||||
			   struct spa_video_info_raw *info)
 | 
			
		||||
{
 | 
			
		||||
	return (struct spa_pod *) spa_pod_builder_add_object(builder,
 | 
			
		||||
			SPA_TYPE_OBJECT_Format, id,
 | 
			
		||||
	struct spa_pod_frame f;
 | 
			
		||||
	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_mediaSubtype,	SPA_POD_Id(SPA_MEDIA_SUBTYPE_raw),
 | 
			
		||||
			SPA_FORMAT_VIDEO_format,	SPA_POD_Id(info->format),
 | 
			
		||||
			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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -166,6 +166,7 @@ enum spa_video_interlace_mode {
 | 
			
		|||
/**
 | 
			
		||||
 * spa_video_info_raw:
 | 
			
		||||
 * @format: the format
 | 
			
		||||
 * @modifier: format modifier
 | 
			
		||||
 * @size: the frame size of the video
 | 
			
		||||
 * @framerate: the framerate of the video 0/1 means variable rate
 | 
			
		||||
 * @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 {
 | 
			
		||||
	enum spa_video_format format;
 | 
			
		||||
	int64_t modifier;
 | 
			
		||||
	struct spa_rectangle size;
 | 
			
		||||
	struct spa_fraction framerate;
 | 
			
		||||
	struct spa_fraction max_framerate;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue