mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-01 22:58:50 -04: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