mirror of
				https://gitlab.freedesktop.org/pipewire/pipewire.git
				synced 2025-11-03 09:01:54 -05:00 
			
		
		
		
	spa: add mjpg and h264 format build helpers
This commit is contained in:
		
							parent
							
								
									cefcc2e874
								
							
						
					
					
						commit
						04344dad20
					
				
					 1 changed files with 50 additions and 0 deletions
				
			
		| 
						 | 
					@ -161,6 +161,34 @@ spa_format_video_h264_parse(const struct spa_pod *format,
 | 
				
			||||||
			SPA_FORMAT_VIDEO_H264_alignment,	SPA_POD_OPT_Id(&info->alignment));
 | 
								SPA_FORMAT_VIDEO_H264_alignment,	SPA_POD_OPT_Id(&info->alignment));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static inline struct spa_pod *
 | 
				
			||||||
 | 
					spa_format_video_h264_build(struct spa_pod_builder *builder, uint32_t id,
 | 
				
			||||||
 | 
								   struct spa_video_info_h264 *info)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						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_h264),
 | 
				
			||||||
 | 
								0);
 | 
				
			||||||
 | 
						if (info->size.width != 0 && info->size.height != 0)
 | 
				
			||||||
 | 
							spa_pod_builder_add(builder,
 | 
				
			||||||
 | 
								SPA_FORMAT_VIDEO_size,		SPA_POD_Rectangle(&info->size), 0);
 | 
				
			||||||
 | 
						if (info->framerate.denom != 0)
 | 
				
			||||||
 | 
							spa_pod_builder_add(builder,
 | 
				
			||||||
 | 
								SPA_FORMAT_VIDEO_framerate,	SPA_POD_Fraction(&info->framerate), 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->stream_format != 0)
 | 
				
			||||||
 | 
							spa_pod_builder_add(builder,
 | 
				
			||||||
 | 
								SPA_FORMAT_VIDEO_H264_streamFormat, SPA_POD_Id(info->stream_format), 0);
 | 
				
			||||||
 | 
						if (info->alignment != 0)
 | 
				
			||||||
 | 
							spa_pod_builder_add(builder,
 | 
				
			||||||
 | 
								SPA_FORMAT_VIDEO_H264_alignment, SPA_POD_Id(info->alignment), 0);
 | 
				
			||||||
 | 
						return (struct spa_pod*)spa_pod_builder_pop(builder, &f);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static inline int
 | 
					static inline int
 | 
				
			||||||
spa_format_video_mjpg_parse(const struct spa_pod *format,
 | 
					spa_format_video_mjpg_parse(const struct spa_pod *format,
 | 
				
			||||||
			    struct spa_video_info_mjpg *info)
 | 
								    struct spa_video_info_mjpg *info)
 | 
				
			||||||
| 
						 | 
					@ -172,6 +200,28 @@ spa_format_video_mjpg_parse(const struct spa_pod *format,
 | 
				
			||||||
			SPA_FORMAT_VIDEO_maxFramerate,	SPA_POD_OPT_Fraction(&info->max_framerate));
 | 
								SPA_FORMAT_VIDEO_maxFramerate,	SPA_POD_OPT_Fraction(&info->max_framerate));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static inline struct spa_pod *
 | 
				
			||||||
 | 
					spa_format_video_mjpg_build(struct spa_pod_builder *builder, uint32_t id,
 | 
				
			||||||
 | 
								   struct spa_video_info_mjpg *info)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						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_mjpg),
 | 
				
			||||||
 | 
								0);
 | 
				
			||||||
 | 
						if (info->size.width != 0 && info->size.height != 0)
 | 
				
			||||||
 | 
							spa_pod_builder_add(builder,
 | 
				
			||||||
 | 
								SPA_FORMAT_VIDEO_size,		SPA_POD_Rectangle(&info->size), 0);
 | 
				
			||||||
 | 
						if (info->framerate.denom != 0)
 | 
				
			||||||
 | 
							spa_pod_builder_add(builder,
 | 
				
			||||||
 | 
								SPA_FORMAT_VIDEO_framerate,	SPA_POD_Fraction(&info->framerate), 0);
 | 
				
			||||||
 | 
						if (info->max_framerate.denom != 0)
 | 
				
			||||||
 | 
							spa_pod_builder_add(builder,
 | 
				
			||||||
 | 
								SPA_FORMAT_VIDEO_maxFramerate,	SPA_POD_Fraction(info->max_framerate), 0);
 | 
				
			||||||
 | 
						return (struct spa_pod*)spa_pod_builder_pop(builder, &f);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * \}
 | 
					 * \}
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue