format: make formats as uri

This commit is contained in:
Wim Taymans 2017-03-21 13:36:22 +01:00
parent 6f0a12462b
commit ff62c1b9ce
11 changed files with 476 additions and 222 deletions

View file

@ -27,83 +27,222 @@ extern "C" {
typedef struct _SpaVideoInfoRaw SpaVideoInfoRaw;
#include <spa/props.h>
#include <spa/id-map.h>
#include <spa/video/chroma.h>
#include <spa/video/color.h>
#include <spa/video/multiview.h>
#include <endian.h>
#define SPA_VIDEO_MAX_PLANES 4
#define SPA_VIDEO_MAX_COMPONENTS 4
typedef enum {
SPA_VIDEO_FORMAT_UNKNOWN,
SPA_VIDEO_FORMAT_ENCODED,
SPA_VIDEO_FORMAT_I420,
SPA_VIDEO_FORMAT_YV12,
SPA_VIDEO_FORMAT_YUY2,
SPA_VIDEO_FORMAT_UYVY,
SPA_VIDEO_FORMAT_AYUV,
SPA_VIDEO_FORMAT_RGBx,
SPA_VIDEO_FORMAT_BGRx,
SPA_VIDEO_FORMAT_xRGB,
SPA_VIDEO_FORMAT_xBGR,
SPA_VIDEO_FORMAT_RGBA,
SPA_VIDEO_FORMAT_BGRA,
SPA_VIDEO_FORMAT_ARGB,
SPA_VIDEO_FORMAT_ABGR,
SPA_VIDEO_FORMAT_RGB,
SPA_VIDEO_FORMAT_BGR,
SPA_VIDEO_FORMAT_Y41B,
SPA_VIDEO_FORMAT_Y42B,
SPA_VIDEO_FORMAT_YVYU,
SPA_VIDEO_FORMAT_Y444,
SPA_VIDEO_FORMAT_v210,
SPA_VIDEO_FORMAT_v216,
SPA_VIDEO_FORMAT_NV12,
SPA_VIDEO_FORMAT_NV21,
SPA_VIDEO_FORMAT_GRAY8,
SPA_VIDEO_FORMAT_GRAY16_BE,
SPA_VIDEO_FORMAT_GRAY16_LE,
SPA_VIDEO_FORMAT_v308,
SPA_VIDEO_FORMAT_RGB16,
SPA_VIDEO_FORMAT_BGR16,
SPA_VIDEO_FORMAT_RGB15,
SPA_VIDEO_FORMAT_BGR15,
SPA_VIDEO_FORMAT_UYVP,
SPA_VIDEO_FORMAT_A420,
SPA_VIDEO_FORMAT_RGB8P,
SPA_VIDEO_FORMAT_YUV9,
SPA_VIDEO_FORMAT_YVU9,
SPA_VIDEO_FORMAT_IYU1,
SPA_VIDEO_FORMAT_ARGB64,
SPA_VIDEO_FORMAT_AYUV64,
SPA_VIDEO_FORMAT_r210,
SPA_VIDEO_FORMAT_I420_10BE,
SPA_VIDEO_FORMAT_I420_10LE,
SPA_VIDEO_FORMAT_I422_10BE,
SPA_VIDEO_FORMAT_I422_10LE,
SPA_VIDEO_FORMAT_Y444_10BE,
SPA_VIDEO_FORMAT_Y444_10LE,
SPA_VIDEO_FORMAT_GBR,
SPA_VIDEO_FORMAT_GBR_10BE,
SPA_VIDEO_FORMAT_GBR_10LE,
SPA_VIDEO_FORMAT_NV16,
SPA_VIDEO_FORMAT_NV24,
SPA_VIDEO_FORMAT_NV12_64Z32,
SPA_VIDEO_FORMAT_A420_10BE,
SPA_VIDEO_FORMAT_A420_10LE,
SPA_VIDEO_FORMAT_A422_10BE,
SPA_VIDEO_FORMAT_A422_10LE,
SPA_VIDEO_FORMAT_A444_10BE,
SPA_VIDEO_FORMAT_A444_10LE,
SPA_VIDEO_FORMAT_NV61,
SPA_VIDEO_FORMAT_P010_10BE,
SPA_VIDEO_FORMAT_P010_10LE,
SPA_VIDEO_FORMAT_IYU2,
SPA_VIDEO_FORMAT_VYUY,
} SpaVideoFormat;
#define SPA_VIDEO_FORMAT_URI "http://spaplug.in/ns/video-format"
#define SPA_VIDEO_FORMAT_PREFIX SPA_VIDEO_FORMAT_URI "#"
#define SPA_VIDEO_FORMAT__ENCODED SPA_VIDEO_FORMAT_PREFIX "encoded"
#define SPA_VIDEO_FORMAT__I420 SPA_VIDEO_FORMAT_PREFIX "I420"
#define SPA_VIDEO_FORMAT__YV12 SPA_VIDEO_FORMAT_PREFIX "YV12"
#define SPA_VIDEO_FORMAT__YUY2 SPA_VIDEO_FORMAT_PREFIX "YUY2"
#define SPA_VIDEO_FORMAT__UYVY SPA_VIDEO_FORMAT_PREFIX "UYVY"
#define SPA_VIDEO_FORMAT__AYUV SPA_VIDEO_FORMAT_PREFIX "AYUV"
#define SPA_VIDEO_FORMAT__RGBx SPA_VIDEO_FORMAT_PREFIX "RGBx"
#define SPA_VIDEO_FORMAT__BGRx SPA_VIDEO_FORMAT_PREFIX "BGRx"
#define SPA_VIDEO_FORMAT__xRGB SPA_VIDEO_FORMAT_PREFIX "xRGB"
#define SPA_VIDEO_FORMAT__xBGR SPA_VIDEO_FORMAT_PREFIX "xBGR"
#define SPA_VIDEO_FORMAT__RGBA SPA_VIDEO_FORMAT_PREFIX "RGBA"
#define SPA_VIDEO_FORMAT__BGRA SPA_VIDEO_FORMAT_PREFIX "BGRA"
#define SPA_VIDEO_FORMAT__ARGB SPA_VIDEO_FORMAT_PREFIX "ARGB"
#define SPA_VIDEO_FORMAT__ABGR SPA_VIDEO_FORMAT_PREFIX "ABGR"
#define SPA_VIDEO_FORMAT__RGB SPA_VIDEO_FORMAT_PREFIX "RGB"
#define SPA_VIDEO_FORMAT__BGR SPA_VIDEO_FORMAT_PREFIX "BGR"
#define SPA_VIDEO_FORMAT__Y41B SPA_VIDEO_FORMAT_PREFIX "Y41B"
#define SPA_VIDEO_FORMAT__Y42B SPA_VIDEO_FORMAT_PREFIX "Y42B"
#define SPA_VIDEO_FORMAT__YVYU SPA_VIDEO_FORMAT_PREFIX "YVYU"
#define SPA_VIDEO_FORMAT__Y444 SPA_VIDEO_FORMAT_PREFIX "Y444"
#define SPA_VIDEO_FORMAT__v210 SPA_VIDEO_FORMAT_PREFIX "v210"
#define SPA_VIDEO_FORMAT__v216 SPA_VIDEO_FORMAT_PREFIX "v216"
#define SPA_VIDEO_FORMAT__NV12 SPA_VIDEO_FORMAT_PREFIX "NV12"
#define SPA_VIDEO_FORMAT__NV21 SPA_VIDEO_FORMAT_PREFIX "NV21"
#define SPA_VIDEO_FORMAT__GRAY8 SPA_VIDEO_FORMAT_PREFIX "GRAY8"
#define SPA_VIDEO_FORMAT__GRAY16_BE SPA_VIDEO_FORMAT_PREFIX "GRAY16_BE"
#define SPA_VIDEO_FORMAT__GRAY16_LE SPA_VIDEO_FORMAT_PREFIX "GRAY16_LE"
#define SPA_VIDEO_FORMAT__v308 SPA_VIDEO_FORMAT_PREFIX "v308"
#define SPA_VIDEO_FORMAT__RGB16 SPA_VIDEO_FORMAT_PREFIX "RGB16"
#define SPA_VIDEO_FORMAT__BGR16 SPA_VIDEO_FORMAT_PREFIX "BGR16"
#define SPA_VIDEO_FORMAT__RGB15 SPA_VIDEO_FORMAT_PREFIX "RGB15"
#define SPA_VIDEO_FORMAT__BGR15 SPA_VIDEO_FORMAT_PREFIX "BGR15"
#define SPA_VIDEO_FORMAT__UYVP SPA_VIDEO_FORMAT_PREFIX "UYVP"
#define SPA_VIDEO_FORMAT__A420 SPA_VIDEO_FORMAT_PREFIX "A420"
#define SPA_VIDEO_FORMAT__RGB8P SPA_VIDEO_FORMAT_PREFIX "RGB8P"
#define SPA_VIDEO_FORMAT__YUV9 SPA_VIDEO_FORMAT_PREFIX "YUV9"
#define SPA_VIDEO_FORMAT__YVU9 SPA_VIDEO_FORMAT_PREFIX "YVU9"
#define SPA_VIDEO_FORMAT__IYU1 SPA_VIDEO_FORMAT_PREFIX "IYU1"
#define SPA_VIDEO_FORMAT__ARGB64 SPA_VIDEO_FORMAT_PREFIX "ARGB64"
#define SPA_VIDEO_FORMAT__AYUV64 SPA_VIDEO_FORMAT_PREFIX "AYUV64"
#define SPA_VIDEO_FORMAT__r210 SPA_VIDEO_FORMAT_PREFIX "r210"
#define SPA_VIDEO_FORMAT__I420_10BE SPA_VIDEO_FORMAT_PREFIX "I420_10BE"
#define SPA_VIDEO_FORMAT__I420_10LE SPA_VIDEO_FORMAT_PREFIX "I420_10LE"
#define SPA_VIDEO_FORMAT__I422_10BE SPA_VIDEO_FORMAT_PREFIX "I422_10BE"
#define SPA_VIDEO_FORMAT__I422_10LE SPA_VIDEO_FORMAT_PREFIX "I422_10LE"
#define SPA_VIDEO_FORMAT__Y444_10BE SPA_VIDEO_FORMAT_PREFIX "Y444_10BE"
#define SPA_VIDEO_FORMAT__Y444_10LE SPA_VIDEO_FORMAT_PREFIX "Y444_10LE"
#define SPA_VIDEO_FORMAT__GBR SPA_VIDEO_FORMAT_PREFIX "GBR"
#define SPA_VIDEO_FORMAT__GBR_10BE SPA_VIDEO_FORMAT_PREFIX "GBR_10BE"
#define SPA_VIDEO_FORMAT__GBR_10LE SPA_VIDEO_FORMAT_PREFIX "GBR_10LE"
#define SPA_VIDEO_FORMAT__NV16 SPA_VIDEO_FORMAT_PREFIX "NV16"
#define SPA_VIDEO_FORMAT__NV24 SPA_VIDEO_FORMAT_PREFIX "NV24"
#define SPA_VIDEO_FORMAT__NV12_64Z32 SPA_VIDEO_FORMAT_PREFIX "NV12_64Z32"
#define SPA_VIDEO_FORMAT__A420_10BE SPA_VIDEO_FORMAT_PREFIX "A420_10BE"
#define SPA_VIDEO_FORMAT__A420_10LE SPA_VIDEO_FORMAT_PREFIX "A420_10LE"
#define SPA_VIDEO_FORMAT__A422_10BE SPA_VIDEO_FORMAT_PREFIX "A422_10BE"
#define SPA_VIDEO_FORMAT__A422_10LE SPA_VIDEO_FORMAT_PREFIX "A422_10LE"
#define SPA_VIDEO_FORMAT__A444_10BE SPA_VIDEO_FORMAT_PREFIX "A444_10BE"
#define SPA_VIDEO_FORMAT__A444_10LE SPA_VIDEO_FORMAT_PREFIX "A444_10LE"
#define SPA_VIDEO_FORMAT__NV61 SPA_VIDEO_FORMAT_PREFIX "NV61"
#define SPA_VIDEO_FORMAT__P010_10BE SPA_VIDEO_FORMAT_PREFIX "P010_10BE"
#define SPA_VIDEO_FORMAT__P010_10LE SPA_VIDEO_FORMAT_PREFIX "P010_10LE"
#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:
@ -167,7 +306,7 @@ typedef enum {
* @color_primaries: color primaries. used to convert between R'G'B' and CIE XYZ
*/
struct _SpaVideoInfoRaw {
SpaVideoFormat format;
uint32_t format;
SpaRectangle size;
SpaFraction framerate;
SpaFraction max_framerate;