audio: make audio format an uri type

This commit is contained in:
Wim Taymans 2017-03-21 16:50:44 +01:00
parent ff62c1b9ce
commit 03292fd80f
24 changed files with 608 additions and 364 deletions

View file

@ -0,0 +1,60 @@
/* Simple Plugin API
* Copyright (C) 2016 Wim Taymans <wim.taymans@gmail.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
* Boston, MA 02110-1301, USA.
*/
#ifndef __SPA_AUDIO_FORMAT_UTILS_H__
#define __SPA_AUDIO_FORMAT_UTILS_H__
#ifdef __cplusplus
extern "C" {
#endif
#include <spa/format-utils.h>
#include <spa/audio/format.h>
#include <spa/audio/raw-utils.h>
typedef struct {
uint32_t format;
uint32_t flags;
uint32_t layout;
uint32_t rate;
uint32_t channels;
uint32_t channel_mask;
} SpaPropAudio;
static inline void
spa_prop_audio_map (SpaIDMap *map, SpaPropAudio *types)
{
if (types->format == 0) {
types->format = spa_id_map_get_id (map, SPA_PROP_AUDIO__format);
types->flags = spa_id_map_get_id (map, SPA_PROP_AUDIO__flags);
types->layout = spa_id_map_get_id (map, SPA_PROP_AUDIO__layout);
types->rate = spa_id_map_get_id (map, SPA_PROP_AUDIO__rate);
types->channels = spa_id_map_get_id (map, SPA_PROP_AUDIO__channels);
types->channel_mask = spa_id_map_get_id (map, SPA_PROP_AUDIO__channelMask);
}
}
SpaResult spa_format_audio_parse (const SpaFormat *format,
SpaAudioInfo *info);
#ifdef __cplusplus
} /* extern "C" */
#endif
#endif /* __SPA_AUDIO_FORMAT_UTILS */

View file

@ -24,7 +24,7 @@
extern "C" {
#endif
#include <spa/format-utils.h>
#include <spa/format.h>
#include <spa/audio/raw.h>
typedef struct _SpaAudioInfo SpaAudioInfo;
@ -39,28 +39,6 @@ typedef struct _SpaAudioInfo SpaAudioInfo;
#define SPA_PROP_AUDIO__channels SPA_PROP_AUDIO_PREFIX "channels"
#define SPA_PROP_AUDIO__channelMask SPA_PROP_AUDIO_PREFIX "channel-mask"
typedef struct {
uint32_t format;
uint32_t flags;
uint32_t layout;
uint32_t rate;
uint32_t channels;
uint32_t channel_mask;
} SpaPropAudio;
static inline void
spa_prop_audio_map (SpaIDMap *map, SpaPropAudio *types)
{
if (types->format == 0) {
types->format = spa_id_map_get_id (map, SPA_PROP_AUDIO__format);
types->flags = spa_id_map_get_id (map, SPA_PROP_AUDIO__flags);
types->layout = spa_id_map_get_id (map, SPA_PROP_AUDIO__layout);
types->rate = spa_id_map_get_id (map, SPA_PROP_AUDIO__rate);
types->channels = spa_id_map_get_id (map, SPA_PROP_AUDIO__channels);
types->channel_mask = spa_id_map_get_id (map, SPA_PROP_AUDIO__channelMask);
}
}
struct _SpaAudioInfo {
uint32_t media_type;
uint32_t media_subtype;
@ -69,9 +47,6 @@ struct _SpaAudioInfo {
} info;
};
SpaResult spa_format_audio_parse (const SpaFormat *format,
SpaAudioInfo *info);
#ifdef __cplusplus
} /* extern "C" */
#endif

View file

@ -0,0 +1,119 @@
/* Simple Plugin API
* Copyright (C) 2016 Wim Taymans <wim.taymans@gmail.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
* Boston, MA 02110-1301, USA.
*/
#ifndef __SPA_AUDIO_RAW_UTILS_H__
#define __SPA_AUDIO_RAW_UTILS_H__
#ifdef __cplusplus
extern "C" {
#endif
#include <spa/id-map.h>
#include <spa/audio/raw.h>
#if __BYTE_ORDER == __BIG_ENDIAN
#define _SPA_AUDIO_FORMAT_NE(fmt) SPA_AUDIO_FORMAT_PREFIX fmt "BE"
#define _SPA_AUDIO_FORMAT_OE(fmt) SPA_AUDIO_FORMAT_PREFIX fmt "LE"
#elif __BYTE_ORDER == __LITTLE_ENDIAN
#define _SPA_AUDIO_FORMAT_NE(fmt) SPA_AUDIO_FORMAT_PREFIX fmt "LE"
#define _SPA_AUDIO_FORMAT_OE(fmt) SPA_AUDIO_FORMAT_PREFIX fmt "BE"
#endif
typedef struct {
uint32_t UNKNOWN;
uint32_t ENCODED;
uint32_t S8;
uint32_t U8;
uint32_t S16;
uint32_t U16;
uint32_t S24_32;
uint32_t U24_32;
uint32_t S32;
uint32_t U32;
uint32_t S24;
uint32_t U24;
uint32_t S20;
uint32_t U20;
uint32_t S18;
uint32_t U18;
uint32_t F32;
uint32_t F64;
uint32_t S16_OE;
uint32_t U16_OE;
uint32_t S24_32_OE;
uint32_t U24_32_OE;
uint32_t S32_OE;
uint32_t U32_OE;
uint32_t S24_OE;
uint32_t U24_OE;
uint32_t S20_OE;
uint32_t U20_OE;
uint32_t S18_OE;
uint32_t U18_OE;
uint32_t F32_OE;
uint32_t F64_OE;
} SpaAudioFormats;
static inline void
spa_audio_formats_map (SpaIDMap *map, SpaAudioFormats *types)
{
if (types->ENCODED == 0) {
types->UNKNOWN = 0;
types->ENCODED = spa_id_map_get_id (map, SPA_AUDIO_FORMAT__ENCODED);
types->S8 = spa_id_map_get_id (map, SPA_AUDIO_FORMAT__S8);
types->U8 = spa_id_map_get_id (map, SPA_AUDIO_FORMAT__U8);
types->S16 = spa_id_map_get_id (map, _SPA_AUDIO_FORMAT_NE ("S16"));
types->U16 = spa_id_map_get_id (map, _SPA_AUDIO_FORMAT_NE ("U16"));
types->S24_32 = spa_id_map_get_id (map, _SPA_AUDIO_FORMAT_NE ("S24_32"));
types->U24_32 = spa_id_map_get_id (map, _SPA_AUDIO_FORMAT_NE ("U24_32"));
types->S32 = spa_id_map_get_id (map, _SPA_AUDIO_FORMAT_NE ("S32"));
types->U32 = spa_id_map_get_id (map, _SPA_AUDIO_FORMAT_NE ("U32"));
types->S24 = spa_id_map_get_id (map, _SPA_AUDIO_FORMAT_NE ("S24"));
types->U24 = spa_id_map_get_id (map, _SPA_AUDIO_FORMAT_NE ("U24"));
types->S20 = spa_id_map_get_id (map, _SPA_AUDIO_FORMAT_NE ("S20"));
types->U20 = spa_id_map_get_id (map, _SPA_AUDIO_FORMAT_NE ("U20"));
types->S18 = spa_id_map_get_id (map, _SPA_AUDIO_FORMAT_NE ("S18"));
types->U18 = spa_id_map_get_id (map, _SPA_AUDIO_FORMAT_NE ("U18"));
types->F32 = spa_id_map_get_id (map, _SPA_AUDIO_FORMAT_NE ("F32"));
types->F64 = spa_id_map_get_id (map, _SPA_AUDIO_FORMAT_NE ("F64"));
types->S16_OE = spa_id_map_get_id (map, _SPA_AUDIO_FORMAT_OE ("S16"));
types->U16_OE = spa_id_map_get_id (map, _SPA_AUDIO_FORMAT_OE ("U16"));
types->S24_32_OE = spa_id_map_get_id (map, _SPA_AUDIO_FORMAT_OE ("S24_32"));
types->U24_32_OE = spa_id_map_get_id (map, _SPA_AUDIO_FORMAT_OE ("U24_32"));
types->S32_OE = spa_id_map_get_id (map, _SPA_AUDIO_FORMAT_OE ("S32"));
types->U32_OE = spa_id_map_get_id (map, _SPA_AUDIO_FORMAT_OE ("U32"));
types->S24_OE = spa_id_map_get_id (map, _SPA_AUDIO_FORMAT_OE ("S24"));
types->U24_OE = spa_id_map_get_id (map, _SPA_AUDIO_FORMAT_OE ("U24"));
types->S20_OE = spa_id_map_get_id (map, _SPA_AUDIO_FORMAT_OE ("S20"));
types->U20_OE = spa_id_map_get_id (map, _SPA_AUDIO_FORMAT_OE ("U20"));
types->S18_OE = spa_id_map_get_id (map, _SPA_AUDIO_FORMAT_OE ("S18"));
types->U18_OE = spa_id_map_get_id (map, _SPA_AUDIO_FORMAT_OE ("U18"));
types->F32_OE = spa_id_map_get_id (map, _SPA_AUDIO_FORMAT_OE ("F32"));
types->F64_OE = spa_id_map_get_id (map, _SPA_AUDIO_FORMAT_OE ("F64"));
}
}
#ifdef __cplusplus
} /* extern "C" */
#endif
#endif /* __SPA_AUDIO_RAW_UTILS_H__ */

View file

@ -28,72 +28,41 @@ typedef struct _SpaAudioInfoRaw SpaAudioInfoRaw;
#include <endian.h>
#if __BYTE_ORDER == __BIG_ENDIAN
#define _SPA_AUDIO_FORMAT_NE(fmt) SPA_AUDIO_FORMAT_ ## fmt ## BE
#define _SPA_AUDIO_FORMAT_OE(fmt) SPA_AUDIO_FORMAT_ ## fmt ## LE
#elif __BYTE_ORDER == __LITTLE_ENDIAN
#define _SPA_AUDIO_FORMAT_NE(fmt) SPA_AUDIO_FORMAT_ ## fmt ## LE
#define _SPA_AUDIO_FORMAT_OE(fmt) SPA_AUDIO_FORMAT_ ## fmt ## BE
#endif
typedef enum {
SPA_AUDIO_FORMAT_UNKNOWN,
SPA_AUDIO_FORMAT_ENCODED,
/* 8 bit */
SPA_AUDIO_FORMAT_S8,
SPA_AUDIO_FORMAT_U8,
/* 16 bit */
SPA_AUDIO_FORMAT_S16LE,
SPA_AUDIO_FORMAT_S16BE,
SPA_AUDIO_FORMAT_U16LE,
SPA_AUDIO_FORMAT_U16BE,
/* 24 bit in low 3 bytes of 32 bits*/
SPA_AUDIO_FORMAT_S24_32LE,
SPA_AUDIO_FORMAT_S24_32BE,
SPA_AUDIO_FORMAT_U24_32LE,
SPA_AUDIO_FORMAT_U24_32BE,
/* 32 bit */
SPA_AUDIO_FORMAT_S32LE,
SPA_AUDIO_FORMAT_S32BE,
SPA_AUDIO_FORMAT_U32LE,
SPA_AUDIO_FORMAT_U32BE,
/* 24 bit in 3 bytes*/
SPA_AUDIO_FORMAT_S24LE,
SPA_AUDIO_FORMAT_S24BE,
SPA_AUDIO_FORMAT_U24LE,
SPA_AUDIO_FORMAT_U24BE,
/* 20 bit in 3 bytes*/
SPA_AUDIO_FORMAT_S20LE,
SPA_AUDIO_FORMAT_S20BE,
SPA_AUDIO_FORMAT_U20LE,
SPA_AUDIO_FORMAT_U20BE,
/* 18 bit in 3 bytes*/
SPA_AUDIO_FORMAT_S18LE,
SPA_AUDIO_FORMAT_S18BE,
SPA_AUDIO_FORMAT_U18LE,
SPA_AUDIO_FORMAT_U18BE,
/* float */
SPA_AUDIO_FORMAT_F32LE,
SPA_AUDIO_FORMAT_F32BE,
SPA_AUDIO_FORMAT_F64LE,
SPA_AUDIO_FORMAT_F64BE,
/* native endianness equivalents */
SPA_AUDIO_FORMAT_S16 = _SPA_AUDIO_FORMAT_NE(S16),
SPA_AUDIO_FORMAT_U16 = _SPA_AUDIO_FORMAT_NE(U16),
SPA_AUDIO_FORMAT_S24_32 = _SPA_AUDIO_FORMAT_NE(S24_32),
SPA_AUDIO_FORMAT_U24_32 = _SPA_AUDIO_FORMAT_NE(U24_32),
SPA_AUDIO_FORMAT_S32 = _SPA_AUDIO_FORMAT_NE(S32),
SPA_AUDIO_FORMAT_U32 = _SPA_AUDIO_FORMAT_NE(U32),
SPA_AUDIO_FORMAT_S24 = _SPA_AUDIO_FORMAT_NE(S24),
SPA_AUDIO_FORMAT_U24 = _SPA_AUDIO_FORMAT_NE(U24),
SPA_AUDIO_FORMAT_S20 = _SPA_AUDIO_FORMAT_NE(S20),
SPA_AUDIO_FORMAT_U20 = _SPA_AUDIO_FORMAT_NE(U20),
SPA_AUDIO_FORMAT_S18 = _SPA_AUDIO_FORMAT_NE(S18),
SPA_AUDIO_FORMAT_U18 = _SPA_AUDIO_FORMAT_NE(U18),
SPA_AUDIO_FORMAT_F32 = _SPA_AUDIO_FORMAT_NE(F32),
SPA_AUDIO_FORMAT_F64 = _SPA_AUDIO_FORMAT_NE(F64)
} SpaAudioFormat;
#define SPA_AUDIO_FORMAT_URI "http://spaplug.in/ns/audio-format"
#define SPA_AUDIO_FORMAT_PREFIX SPA_AUDIO_FORMAT_URI "#"
#define SPA_AUDIO_FORMAT__UNKNOWN SPA_AUDIO_FORMAT_PREFIX "UNKNOWN"
#define SPA_AUDIO_FORMAT__ENCODED SPA_AUDIO_FORMAT_PREFIX "ENCODED"
#define SPA_AUDIO_FORMAT__S8 SPA_AUDIO_FORMAT_PREFIX "S8"
#define SPA_AUDIO_FORMAT__U8 SPA_AUDIO_FORMAT_PREFIX "U8"
#define SPA_AUDIO_FORMAT__S16LE SPA_AUDIO_FORMAT_PREFIX "S16LE"
#define SPA_AUDIO_FORMAT__S16BE SPA_AUDIO_FORMAT_PREFIX "S16BE"
#define SPA_AUDIO_FORMAT__U16LE SPA_AUDIO_FORMAT_PREFIX "U16LE"
#define SPA_AUDIO_FORMAT__U16BE SPA_AUDIO_FORMAT_PREFIX "U16BE"
#define SPA_AUDIO_FORMAT__S24_32LE SPA_AUDIO_FORMAT_PREFIX "S24_32LE"
#define SPA_AUDIO_FORMAT__S24_32BE SPA_AUDIO_FORMAT_PREFIX "S24_32BE"
#define SPA_AUDIO_FORMAT__U24_32LE SPA_AUDIO_FORMAT_PREFIX "U24_32LE"
#define SPA_AUDIO_FORMAT__U24_32BE SPA_AUDIO_FORMAT_PREFIX "U24_32BE"
#define SPA_AUDIO_FORMAT__S32LE SPA_AUDIO_FORMAT_PREFIX "S32LE"
#define SPA_AUDIO_FORMAT__S32BE SPA_AUDIO_FORMAT_PREFIX "S32BE"
#define SPA_AUDIO_FORMAT__U32LE SPA_AUDIO_FORMAT_PREFIX "U32LE"
#define SPA_AUDIO_FORMAT__U32BE SPA_AUDIO_FORMAT_PREFIX "U32BE"
#define SPA_AUDIO_FORMAT__S24LE SPA_AUDIO_FORMAT_PREFIX "S24LE"
#define SPA_AUDIO_FORMAT__S24BE SPA_AUDIO_FORMAT_PREFIX "S24BE"
#define SPA_AUDIO_FORMAT__U24LE SPA_AUDIO_FORMAT_PREFIX "U24LE"
#define SPA_AUDIO_FORMAT__U24BE SPA_AUDIO_FORMAT_PREFIX "U24BE"
#define SPA_AUDIO_FORMAT__S20LE SPA_AUDIO_FORMAT_PREFIX "S20LE"
#define SPA_AUDIO_FORMAT__S20BE SPA_AUDIO_FORMAT_PREFIX "S20BE"
#define SPA_AUDIO_FORMAT__U20LE SPA_AUDIO_FORMAT_PREFIX "U20LE"
#define SPA_AUDIO_FORMAT__U20BE SPA_AUDIO_FORMAT_PREFIX "U20BE"
#define SPA_AUDIO_FORMAT__S18LE SPA_AUDIO_FORMAT_PREFIX "S18LE"
#define SPA_AUDIO_FORMAT__S18BE SPA_AUDIO_FORMAT_PREFIX "S18BE"
#define SPA_AUDIO_FORMAT__U18LE SPA_AUDIO_FORMAT_PREFIX "U18LE"
#define SPA_AUDIO_FORMAT__U18BE SPA_AUDIO_FORMAT_PREFIX "U18BE"
#define SPA_AUDIO_FORMAT__F32LE SPA_AUDIO_FORMAT_PREFIX "F32LE"
#define SPA_AUDIO_FORMAT__F32BE SPA_AUDIO_FORMAT_PREFIX "F32BE"
#define SPA_AUDIO_FORMAT__F64LE SPA_AUDIO_FORMAT_PREFIX "F64LE"
#define SPA_AUDIO_FORMAT__F64BE SPA_AUDIO_FORMAT_PREFIX "F64BE"
/**
* SpaAudioFlags:
@ -130,7 +99,7 @@ typedef enum {
* @channel_mask: the channel mask
*/
struct _SpaAudioInfoRaw {
SpaAudioFormat format;
uint32_t format;
SpaAudioFlags flags;
SpaAudioLayout layout;
uint32_t rate;

View file

@ -0,0 +1,84 @@
/* Simple Plugin API
* Copyright (C) 2016 Wim Taymans <wim.taymans@gmail.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
* Boston, MA 02110-1301, USA.
*/
#ifndef __SPA_VIDEO_FORMAT_UTILS_H__
#define __SPA_VIDEO_FORMAT_UTILS_H__
#ifdef __cplusplus
extern "C" {
#endif
#include <spa/format-utils.h>
#include <spa/video/format.h>
#include <spa/video/raw-utils.h>
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);
#ifdef __cplusplus
} /* extern "C" */
#endif
#endif /* __SPA_VIDEO_FORMAT_UTILS */

View file

@ -52,55 +52,6 @@ typedef struct _SpaVideoInfo SpaVideoInfo;
#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 {
uint32_t media_type;
uint32_t media_subtype;

View file

@ -0,0 +1,177 @@
/* Simple Plugin API
* Copyright (C) 2016 Wim Taymans <wim.taymans@gmail.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
* Boston, MA 02110-1301, USA.
*/
#ifndef __SPA_VIDEO_RAW_UTILS_H__
#define __SPA_VIDEO_RAW_UTILS_H__
#ifdef __cplusplus
extern "C" {
#endif
typedef struct _SpaVideoInfoRaw SpaVideoInfoRaw;
#include <spa/id-map.h>
#include <spa/video/raw.h>
typedef struct
{
uint32_t UNKNOWN;
uint32_t ENCODED;
uint32_t I420;
uint32_t YV12;
uint32_t YUY2;
uint32_t UYVY;
uint32_t AYUV;
uint32_t RGBx;
uint32_t BGRx;
uint32_t xRGB;
uint32_t xBGR;
uint32_t RGBA;
uint32_t BGRA;
uint32_t ARGB;
uint32_t ABGR;
uint32_t RGB;
uint32_t BGR;
uint32_t Y41B;
uint32_t Y42B;
uint32_t YVYU;
uint32_t Y444;
uint32_t v210;
uint32_t v216;
uint32_t NV12;
uint32_t NV21;
uint32_t GRAY8;
uint32_t GRAY16_BE;
uint32_t GRAY16_LE;
uint32_t v308;
uint32_t RGB16;
uint32_t BGR16;
uint32_t RGB15;
uint32_t BGR15;
uint32_t UYVP;
uint32_t A420;
uint32_t RGB8P;
uint32_t YUV9;
uint32_t YVU9;
uint32_t IYU1;
uint32_t ARGB64;
uint32_t AYUV64;
uint32_t r210;
uint32_t I420_10BE;
uint32_t I420_10LE;
uint32_t I422_10BE;
uint32_t I422_10LE;
uint32_t Y444_10BE;
uint32_t Y444_10LE;
uint32_t GBR;
uint32_t GBR_10BE;
uint32_t GBR_10LE;
uint32_t NV16;
uint32_t NV24;
uint32_t NV12_64Z32;
uint32_t A420_10BE;
uint32_t A420_10LE;
uint32_t A422_10BE;
uint32_t A422_10LE;
uint32_t A444_10BE;
uint32_t A444_10LE;
uint32_t NV61;
uint32_t P010_10BE;
uint32_t P010_10LE;
uint32_t IYU2;
uint32_t VYUY;
} SpaVideoFormats;
static inline void
spa_video_formats_map (SpaIDMap *map, SpaVideoFormats *types)
{
if (types->ENCODED == 0) {
types->UNKNOWN = 0;
types->ENCODED = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__ENCODED);
types->I420 = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__I420);
types->YV12 = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__YV12);
types->YUY2 = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__YUY2);
types->UYVY = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__UYVY);
types->AYUV = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__AYUV);
types->RGBx = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__RGBx);
types->BGRx = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__BGRx);
types->xRGB = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__xRGB);
types->xBGR = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__xBGR);
types->RGBA = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__RGBA);
types->BGRA = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__BGRA);
types->ARGB = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__ARGB);
types->ABGR = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__ABGR);
types->RGB = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__RGB);
types->BGR = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__BGR);
types->Y41B = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__Y41B);
types->Y42B = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__Y42B);
types->YVYU = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__YVYU);
types->Y444 = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__Y444);
types->v210 = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__v210);
types->v216 = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__v216);
types->NV12 = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__NV12);
types->NV21 = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__NV21);
types->GRAY8 = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__GRAY8);
types->GRAY16_BE = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__GRAY16_BE);
types->GRAY16_LE = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__GRAY16_LE);
types->v308 = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__v308);
types->RGB16 = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__RGB16);
types->BGR16 = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__BGR16);
types->RGB15 = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__RGB15);
types->BGR15 = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__BGR15);
types->UYVP = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__UYVP);
types->A420 = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__A420);
types->RGB8P = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__RGB8P);
types->YUV9 = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__YUV9);
types->YVU9 = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__YVU9);
types->IYU1 = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__IYU1);
types->ARGB64 = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__ARGB64);
types->AYUV64 = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__AYUV64);
types->r210 = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__r210);
types->I420_10BE = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__I420_10BE);
types->I420_10LE = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__I420_10LE);
types->I422_10BE = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__I422_10BE);
types->I422_10LE = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__I422_10LE);
types->Y444_10BE = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__Y444_10BE);
types->Y444_10LE = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__Y444_10LE);
types->GBR = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__GBR);
types->GBR_10BE = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__GBR_10BE);
types->GBR_10LE = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__GBR_10LE);
types->NV16 = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__NV16);
types->NV24 = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__NV24);
types->NV12_64Z32 = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__NV12_64Z32);
types->A420_10BE = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__A420_10BE);
types->A420_10LE = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__A420_10LE);
types->A422_10BE = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__A422_10BE);
types->A422_10LE = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__A422_10LE);
types->A444_10BE = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__A444_10BE);
types->A444_10LE = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__A444_10LE);
types->NV61 = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__NV61);
types->P010_10BE = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__P010_10BE);
types->P010_10LE = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__P010_10LE);
types->IYU2 = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__IYU2);
types->VYUY = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__VYUY);
}
}
#ifdef __cplusplus
} /* extern "C" */
#endif
#endif /* __SPA_VIDEO_RAW_UTILS_H__ */

View file

@ -103,147 +103,6 @@ typedef struct _SpaVideoInfoRaw SpaVideoInfoRaw;
#define SPA_VIDEO_FORMAT__IYU2 SPA_VIDEO_FORMAT_PREFIX "IYU2"
#define SPA_VIDEO_FORMAT__VYUY SPA_VIDEO_FORMAT_PREFIX "VYUY"
typedef struct
{
uint32_t UNKNOWN;
uint32_t ENCODED;
uint32_t I420;
uint32_t YV12;
uint32_t YUY2;
uint32_t UYVY;
uint32_t AYUV;
uint32_t RGBx;
uint32_t BGRx;
uint32_t xRGB;
uint32_t xBGR;
uint32_t RGBA;
uint32_t BGRA;
uint32_t ARGB;
uint32_t ABGR;
uint32_t RGB;
uint32_t BGR;
uint32_t Y41B;
uint32_t Y42B;
uint32_t YVYU;
uint32_t Y444;
uint32_t v210;
uint32_t v216;
uint32_t NV12;
uint32_t NV21;
uint32_t GRAY8;
uint32_t GRAY16_BE;
uint32_t GRAY16_LE;
uint32_t v308;
uint32_t RGB16;
uint32_t BGR16;
uint32_t RGB15;
uint32_t BGR15;
uint32_t UYVP;
uint32_t A420;
uint32_t RGB8P;
uint32_t YUV9;
uint32_t YVU9;
uint32_t IYU1;
uint32_t ARGB64;
uint32_t AYUV64;
uint32_t r210;
uint32_t I420_10BE;
uint32_t I420_10LE;
uint32_t I422_10BE;
uint32_t I422_10LE;
uint32_t Y444_10BE;
uint32_t Y444_10LE;
uint32_t GBR;
uint32_t GBR_10BE;
uint32_t GBR_10LE;
uint32_t NV16;
uint32_t NV24;
uint32_t NV12_64Z32;
uint32_t A420_10BE;
uint32_t A420_10LE;
uint32_t A422_10BE;
uint32_t A422_10LE;
uint32_t A444_10BE;
uint32_t A444_10LE;
uint32_t NV61;
uint32_t P010_10BE;
uint32_t P010_10LE;
uint32_t IYU2;
uint32_t VYUY;
} SpaVideoFormats;
static inline void
spa_video_formats_map (SpaIDMap *map, SpaVideoFormats *types)
{
if (types->ENCODED == 0) {
types->UNKNOWN = 0;
types->ENCODED = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__ENCODED);
types->I420 = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__I420);
types->YV12 = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__YV12);
types->YUY2 = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__YUY2);
types->UYVY = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__UYVY);
types->AYUV = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__AYUV);
types->RGBx = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__RGBx);
types->BGRx = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__BGRx);
types->xRGB = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__xRGB);
types->xBGR = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__xBGR);
types->RGBA = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__RGBA);
types->BGRA = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__BGRA);
types->ARGB = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__ARGB);
types->ABGR = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__ABGR);
types->RGB = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__RGB);
types->BGR = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__BGR);
types->Y41B = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__Y41B);
types->Y42B = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__Y42B);
types->YVYU = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__YVYU);
types->Y444 = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__Y444);
types->v210 = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__v210);
types->v216 = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__v216);
types->NV12 = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__NV12);
types->NV21 = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__NV21);
types->GRAY8 = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__GRAY8);
types->GRAY16_BE = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__GRAY16_BE);
types->GRAY16_LE = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__GRAY16_LE);
types->v308 = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__v308);
types->RGB16 = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__RGB16);
types->BGR16 = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__BGR16);
types->RGB15 = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__RGB15);
types->BGR15 = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__BGR15);
types->UYVP = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__UYVP);
types->A420 = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__A420);
types->RGB8P = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__RGB8P);
types->YUV9 = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__YUV9);
types->YVU9 = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__YVU9);
types->IYU1 = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__IYU1);
types->ARGB64 = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__ARGB64);
types->AYUV64 = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__AYUV64);
types->r210 = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__r210);
types->I420_10BE = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__I420_10BE);
types->I420_10LE = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__I420_10LE);
types->I422_10BE = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__I422_10BE);
types->I422_10LE = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__I422_10LE);
types->Y444_10BE = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__Y444_10BE);
types->Y444_10LE = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__Y444_10LE);
types->GBR = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__GBR);
types->GBR_10BE = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__GBR_10BE);
types->GBR_10LE = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__GBR_10LE);
types->NV16 = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__NV16);
types->NV24 = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__NV24);
types->NV12_64Z32 = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__NV12_64Z32);
types->A420_10BE = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__A420_10BE);
types->A420_10LE = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__A420_10LE);
types->A422_10BE = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__A422_10BE);
types->A422_10LE = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__A422_10LE);
types->A444_10BE = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__A444_10BE);
types->A444_10LE = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__A444_10LE);
types->NV61 = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__NV61);
types->P010_10BE = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__P010_10BE);
types->P010_10LE = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__P010_10LE);
types->IYU2 = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__IYU2);
types->VYUY = spa_id_map_get_id (map, SPA_VIDEO_FORMAT__VYUY);
}
}
/**
* SpaVideoFlags:
* @SPA_VIDEO_FLAG_NONE: no flags