mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-26 07:00:13 -05:00
format: make media types and properties dynamic
Use URI properties to dynamically register the media types/subtypes and property names. Add some helpers to set up the mappings.
This commit is contained in:
parent
ee470fc6c6
commit
3f5a3e215b
25 changed files with 769 additions and 685 deletions
|
|
@ -30,34 +30,80 @@ extern "C" {
|
|||
|
||||
typedef struct _SpaVideoInfo SpaVideoInfo;
|
||||
|
||||
typedef enum {
|
||||
SPA_PROP_ID_VIDEO_INFO = SPA_PROP_ID_MEDIA_CUSTOM_START,
|
||||
SPA_PROP_ID_VIDEO_FORMAT,
|
||||
SPA_PROP_ID_VIDEO_SIZE,
|
||||
SPA_PROP_ID_VIDEO_FRAMERATE,
|
||||
SPA_PROP_ID_VIDEO_MAX_FRAMERATE,
|
||||
SPA_PROP_ID_VIDEO_VIEWS,
|
||||
SPA_PROP_ID_VIDEO_INTERLACE_MODE,
|
||||
SPA_PROP_ID_VIDEO_PIXEL_ASPECT_RATIO,
|
||||
SPA_PROP_ID_VIDEO_MULTIVIEW_MODE,
|
||||
SPA_PROP_ID_VIDEO_MULTIVIEW_FLAGS,
|
||||
SPA_PROP_ID_VIDEO_CHROMA_SITE,
|
||||
SPA_PROP_ID_VIDEO_COLOR_RANGE,
|
||||
SPA_PROP_ID_VIDEO_COLOR_MATRIX,
|
||||
SPA_PROP_ID_VIDEO_TRANSFER_FUNCTION,
|
||||
SPA_PROP_ID_VIDEO_COLOR_PRIMARIES,
|
||||
SPA_PROP_ID_VIDEO_PROFILE,
|
||||
SPA_PROP_ID_VIDEO_LEVEL,
|
||||
SPA_PROP_ID_VIDEO_STREAM_FORMAT,
|
||||
SPA_PROP_ID_VIDEO_ALIGNMENT,
|
||||
} SpaPropIdVideo;
|
||||
#define SPA_PROP_VIDEO_URI "http://spaplug.in/ns/prop-video"
|
||||
#define SPA_PROP_VIDEO_PREFIX SPA_PROP_VIDEO_URI "#"
|
||||
|
||||
#define SPA_PROP_VIDEO__format SPA_PROP_VIDEO_PREFIX "format"
|
||||
#define SPA_PROP_VIDEO__size SPA_PROP_VIDEO_PREFIX "size"
|
||||
#define SPA_PROP_VIDEO__framerate SPA_PROP_VIDEO_PREFIX "framerate"
|
||||
#define SPA_PROP_VIDEO__maxFramerate SPA_PROP_VIDEO_PREFIX "max-framerate"
|
||||
#define SPA_PROP_VIDEO__views SPA_PROP_VIDEO_PREFIX "views"
|
||||
#define SPA_PROP_VIDEO__interlaceMode SPA_PROP_VIDEO_PREFIX "interlace-mode"
|
||||
#define SPA_PROP_VIDEO__pixelAspectRatio SPA_PROP_VIDEO_PREFIX "pixel-aspect-ratio"
|
||||
#define SPA_PROP_VIDEO__multiviewMode SPA_PROP_VIDEO_PREFIX "multiview-mode"
|
||||
#define SPA_PROP_VIDEO__multiviewFlags SPA_PROP_VIDEO_PREFIX "multiview-flags"
|
||||
#define SPA_PROP_VIDEO__chromaSite SPA_PROP_VIDEO_PREFIX "chroma-site"
|
||||
#define SPA_PROP_VIDEO__colorRange SPA_PROP_VIDEO_PREFIX "color-range"
|
||||
#define SPA_PROP_VIDEO__colorMatrix SPA_PROP_VIDEO_PREFIX "color-matrix"
|
||||
#define SPA_PROP_VIDEO__transferFunction SPA_PROP_VIDEO_PREFIX "transfer-function"
|
||||
#define SPA_PROP_VIDEO__colorPrimaries SPA_PROP_VIDEO_PREFIX "color-primaries"
|
||||
#define SPA_PROP_VIDEO__profile SPA_PROP_VIDEO_PREFIX "profile"
|
||||
#define SPA_PROP_VIDEO__level SPA_PROP_VIDEO_PREFIX "level"
|
||||
#define SPA_PROP_VIDEO__streamFormat SPA_PROP_VIDEO_PREFIX "stream-format"
|
||||
#define SPA_PROP_VIDEO__alignment SPA_PROP_VIDEO_PREFIX "alignment"
|
||||
|
||||
typedef struct {
|
||||
uint32_t format;
|
||||
uint32_t size;
|
||||
uint32_t framerate;
|
||||
uint32_t max_framerate;
|
||||
uint32_t views;
|
||||
uint32_t interlace_mode;
|
||||
uint32_t pixel_aspect_ratio;
|
||||
uint32_t multiview_mode;
|
||||
uint32_t multiview_flags;
|
||||
uint32_t chroma_site;
|
||||
uint32_t color_range;
|
||||
uint32_t color_matrix;
|
||||
uint32_t transfer_function;
|
||||
uint32_t color_primaries;
|
||||
uint32_t profile;
|
||||
uint32_t level;
|
||||
uint32_t stream_format;
|
||||
uint32_t alignment;
|
||||
} SpaPropVideo;
|
||||
|
||||
static inline void
|
||||
spa_prop_video_map (SpaIDMap *map, SpaPropVideo *types)
|
||||
{
|
||||
if (types->format == 0) {
|
||||
types->format = spa_id_map_get_id (map, SPA_PROP_VIDEO__format);
|
||||
types->size = spa_id_map_get_id (map, SPA_PROP_VIDEO__size);
|
||||
types->framerate = spa_id_map_get_id (map, SPA_PROP_VIDEO__framerate);
|
||||
types->max_framerate = spa_id_map_get_id (map, SPA_PROP_VIDEO__maxFramerate);
|
||||
types->views = spa_id_map_get_id (map, SPA_PROP_VIDEO__views);
|
||||
types->interlace_mode = spa_id_map_get_id (map, SPA_PROP_VIDEO__interlaceMode);
|
||||
types->pixel_aspect_ratio = spa_id_map_get_id (map, SPA_PROP_VIDEO__pixelAspectRatio);
|
||||
types->multiview_mode = spa_id_map_get_id (map, SPA_PROP_VIDEO__multiviewMode);
|
||||
types->multiview_flags = spa_id_map_get_id (map, SPA_PROP_VIDEO__multiviewFlags);
|
||||
types->chroma_site = spa_id_map_get_id (map, SPA_PROP_VIDEO__chromaSite);
|
||||
types->color_range = spa_id_map_get_id (map, SPA_PROP_VIDEO__colorRange);
|
||||
types->color_matrix = spa_id_map_get_id (map, SPA_PROP_VIDEO__colorMatrix);
|
||||
types->transfer_function = spa_id_map_get_id (map, SPA_PROP_VIDEO__transferFunction);
|
||||
types->color_primaries = spa_id_map_get_id (map, SPA_PROP_VIDEO__colorPrimaries);
|
||||
types->profile = spa_id_map_get_id (map, SPA_PROP_VIDEO__profile);
|
||||
types->level = spa_id_map_get_id (map, SPA_PROP_VIDEO__level);
|
||||
types->stream_format = spa_id_map_get_id (map, SPA_PROP_VIDEO__streamFormat);
|
||||
types->alignment = spa_id_map_get_id (map, SPA_PROP_VIDEO__alignment);
|
||||
}
|
||||
}
|
||||
|
||||
SpaResult spa_format_video_parse (const SpaFormat *format,
|
||||
SpaVideoInfo *info);
|
||||
|
||||
struct _SpaVideoInfo {
|
||||
SpaMediaType media_type;
|
||||
SpaMediaSubType media_subtype;
|
||||
uint32_t media_type;
|
||||
uint32_t media_subtype;
|
||||
union {
|
||||
SpaVideoInfoRaw raw;
|
||||
SpaVideoInfoH264 h264;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue