mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-25 09:40:37 +00:00
videotestsrc: convert from liboil to orc
This commit is contained in:
parent
dbfd5a5af8
commit
dbcf70eaae
6 changed files with 510 additions and 58 deletions
|
@ -1,12 +1,18 @@
|
|||
plugin_LTLIBRARIES = libgstvideotestsrc.la
|
||||
|
||||
ORC_SOURCE=gstvideotestsrcorc
|
||||
include $(top_srcdir)/common/orc.mak
|
||||
|
||||
libgstvideotestsrc_la_SOURCES = \
|
||||
gstvideotestsrc.c \
|
||||
videotestsrc.c
|
||||
nodist_libgstvideotestsrc_la_SOURCES = $(ORC_NODIST_SOURCES)
|
||||
|
||||
libgstvideotestsrc_la_CFLAGS = $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(LIBOIL_CFLAGS)
|
||||
libgstvideotestsrc_la_CFLAGS = $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(ORC_CFLAGS)
|
||||
libgstvideotestsrc_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
|
||||
libgstvideotestsrc_la_LIBADD = $(GST_BASE_LIBS) $(GST_LIBS) $(LIBOIL_LIBS)
|
||||
libgstvideotestsrc_la_LIBADD = $(GST_BASE_LIBS) $(GST_LIBS) $(ORC_LIBS)
|
||||
libgstvideotestsrc_la_LIBTOOLFLAGS = --tag=disable-static
|
||||
|
||||
noinst_HEADERS = gstvideotestsrc.h videotestsrc.h
|
||||
|
||||
|
||||
|
|
|
@ -41,7 +41,6 @@
|
|||
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <liboil/liboil.h>
|
||||
|
||||
GST_DEBUG_CATEGORY_STATIC (video_test_src_debug);
|
||||
#define GST_CAT_DEFAULT video_test_src_debug
|
||||
|
@ -868,8 +867,6 @@ gst_video_test_src_start (GstBaseSrc * basesrc)
|
|||
static gboolean
|
||||
plugin_init (GstPlugin * plugin)
|
||||
{
|
||||
oil_init ();
|
||||
|
||||
GST_DEBUG_CATEGORY_INIT (video_test_src_debug, "videotestsrc", 0,
|
||||
"Video Test Source");
|
||||
|
||||
|
|
378
gst/videotestsrc/gstvideotestsrcorc-dist.c
Normal file
378
gst/videotestsrc/gstvideotestsrcorc-dist.c
Normal file
|
@ -0,0 +1,378 @@
|
|||
|
||||
/* autogenerated from gstvideotestsrcorc.orc */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
#ifndef DISABLE_ORC
|
||||
#include <orc/orc.h>
|
||||
#else
|
||||
#include <stdint.h>
|
||||
#endif
|
||||
#include <glib.h>
|
||||
|
||||
void gst_orc_splat_u8 (guint8 * d1, int p1, int n);
|
||||
void gst_orc_splat_s16 (gint8 * d1, int p1, int n);
|
||||
void gst_orc_splat_u16 (guint8 * d1, int p1, int n);
|
||||
void gst_orc_splat_u32 (guint8 * d1, int p1, int n);
|
||||
|
||||
|
||||
/* begin Orc C target preamble */
|
||||
#define ORC_CLAMP(x,a,b) ((x)<(a) ? (a) : ((x)>(b) ? (b) : (x)))
|
||||
#define ORC_ABS(a) ((a)<0 ? -(a) : (a))
|
||||
#define ORC_MIN(a,b) ((a)<(b) ? (a) : (b))
|
||||
#define ORC_MAX(a,b) ((a)>(b) ? (a) : (b))
|
||||
#define ORC_SB_MAX 127
|
||||
#define ORC_SB_MIN (-1-ORC_SB_MAX)
|
||||
#define ORC_UB_MAX 255
|
||||
#define ORC_UB_MIN 0
|
||||
#define ORC_SW_MAX 32767
|
||||
#define ORC_SW_MIN (-1-ORC_SW_MAX)
|
||||
#define ORC_UW_MAX 65535
|
||||
#define ORC_UW_MIN 0
|
||||
#define ORC_SL_MAX 2147483647
|
||||
#define ORC_SL_MIN (-1-ORC_SL_MAX)
|
||||
#define ORC_UL_MAX 4294967295U
|
||||
#define ORC_UL_MIN 0
|
||||
#define ORC_CLAMP_SB(x) ORC_CLAMP(x,ORC_SB_MIN,ORC_SB_MAX)
|
||||
#define ORC_CLAMP_UB(x) ORC_CLAMP(x,ORC_UB_MIN,ORC_UB_MAX)
|
||||
#define ORC_CLAMP_SW(x) ORC_CLAMP(x,ORC_SW_MIN,ORC_SW_MAX)
|
||||
#define ORC_CLAMP_UW(x) ORC_CLAMP(x,ORC_UW_MIN,ORC_UW_MAX)
|
||||
#define ORC_CLAMP_SL(x) ORC_CLAMP(x,ORC_SL_MIN,ORC_SL_MAX)
|
||||
#define ORC_CLAMP_UL(x) ORC_CLAMP(x,ORC_UL_MIN,ORC_UL_MAX)
|
||||
#define ORC_SWAP_W(x) ((((x)&0xff)<<8) | (((x)&0xff00)>>8))
|
||||
#define ORC_SWAP_L(x) ((((x)&0xff)<<24) | (((x)&0xff00)<<8) | (((x)&0xff0000)>>8) | (((x)&0xff000000)>>24))
|
||||
#define ORC_PTR_OFFSET(ptr,offset) ((void *)(((unsigned char *)(ptr)) + (offset)))
|
||||
#define ORC_AS_FLOAT(x) (((union { int i; float f; } *)(&x))->f)
|
||||
typedef union
|
||||
{
|
||||
int32_t i;
|
||||
float f;
|
||||
} orc_union32;
|
||||
typedef union
|
||||
{
|
||||
int64_t i;
|
||||
double f;
|
||||
} orc_union64;
|
||||
/* end Orc C target preamble */
|
||||
|
||||
|
||||
|
||||
/* gst_orc_splat_u8 */
|
||||
#ifdef DISABLE_ORC
|
||||
void
|
||||
gst_orc_splat_u8 (guint8 * d1, int p1, int n)
|
||||
{
|
||||
int i;
|
||||
int8_t var0;
|
||||
int8_t *ptr0;
|
||||
const int8_t var24 = p1;
|
||||
|
||||
ptr0 = (int8_t *) d1;
|
||||
|
||||
for (i = 0; i < n; i++) {
|
||||
/* 0: copyb */
|
||||
var0 = var24;
|
||||
*ptr0 = var0;
|
||||
ptr0++;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#else
|
||||
static void
|
||||
_backup_gst_orc_splat_u8 (OrcExecutor * ex)
|
||||
{
|
||||
int i;
|
||||
int n = ex->n;
|
||||
int8_t var0;
|
||||
int8_t *ptr0;
|
||||
const int8_t var24 = ex->params[24];
|
||||
|
||||
ptr0 = (int8_t *) ex->arrays[0];
|
||||
|
||||
for (i = 0; i < n; i++) {
|
||||
/* 0: copyb */
|
||||
var0 = var24;
|
||||
*ptr0 = var0;
|
||||
ptr0++;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
gst_orc_splat_u8 (guint8 * d1, int p1, int n)
|
||||
{
|
||||
OrcExecutor _ex, *ex = &_ex;
|
||||
static int p_inited = 0;
|
||||
static OrcProgram *p = 0;
|
||||
void (*func) (OrcExecutor *);
|
||||
|
||||
if (!p_inited) {
|
||||
orc_once_mutex_lock ();
|
||||
if (!p_inited) {
|
||||
OrcCompileResult result;
|
||||
|
||||
p = orc_program_new ();
|
||||
orc_program_set_name (p, "gst_orc_splat_u8");
|
||||
orc_program_set_backup_function (p, _backup_gst_orc_splat_u8);
|
||||
orc_program_add_destination (p, 1, "d1");
|
||||
orc_program_add_parameter (p, 1, "p1");
|
||||
|
||||
orc_program_append (p, "copyb", ORC_VAR_D1, ORC_VAR_P1, ORC_VAR_D1);
|
||||
|
||||
result = orc_program_compile (p);
|
||||
}
|
||||
p_inited = TRUE;
|
||||
orc_once_mutex_unlock ();
|
||||
}
|
||||
ex->program = p;
|
||||
|
||||
ex->n = n;
|
||||
ex->arrays[ORC_VAR_D1] = d1;
|
||||
ex->params[ORC_VAR_P1] = p1;
|
||||
|
||||
func = p->code_exec;
|
||||
func (ex);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/* gst_orc_splat_s16 */
|
||||
#ifdef DISABLE_ORC
|
||||
void
|
||||
gst_orc_splat_s16 (gint8 * d1, int p1, int n)
|
||||
{
|
||||
int i;
|
||||
int16_t var0;
|
||||
int16_t *ptr0;
|
||||
const int16_t var24 = p1;
|
||||
|
||||
ptr0 = (int16_t *) d1;
|
||||
|
||||
for (i = 0; i < n; i++) {
|
||||
/* 0: copyw */
|
||||
var0 = var24;
|
||||
*ptr0 = var0;
|
||||
ptr0++;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#else
|
||||
static void
|
||||
_backup_gst_orc_splat_s16 (OrcExecutor * ex)
|
||||
{
|
||||
int i;
|
||||
int n = ex->n;
|
||||
int16_t var0;
|
||||
int16_t *ptr0;
|
||||
const int16_t var24 = ex->params[24];
|
||||
|
||||
ptr0 = (int16_t *) ex->arrays[0];
|
||||
|
||||
for (i = 0; i < n; i++) {
|
||||
/* 0: copyw */
|
||||
var0 = var24;
|
||||
*ptr0 = var0;
|
||||
ptr0++;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
gst_orc_splat_s16 (gint8 * d1, int p1, int n)
|
||||
{
|
||||
OrcExecutor _ex, *ex = &_ex;
|
||||
static int p_inited = 0;
|
||||
static OrcProgram *p = 0;
|
||||
void (*func) (OrcExecutor *);
|
||||
|
||||
if (!p_inited) {
|
||||
orc_once_mutex_lock ();
|
||||
if (!p_inited) {
|
||||
OrcCompileResult result;
|
||||
|
||||
p = orc_program_new ();
|
||||
orc_program_set_name (p, "gst_orc_splat_s16");
|
||||
orc_program_set_backup_function (p, _backup_gst_orc_splat_s16);
|
||||
orc_program_add_destination (p, 2, "d1");
|
||||
orc_program_add_parameter (p, 2, "p1");
|
||||
|
||||
orc_program_append (p, "copyw", ORC_VAR_D1, ORC_VAR_P1, ORC_VAR_D1);
|
||||
|
||||
result = orc_program_compile (p);
|
||||
}
|
||||
p_inited = TRUE;
|
||||
orc_once_mutex_unlock ();
|
||||
}
|
||||
ex->program = p;
|
||||
|
||||
ex->n = n;
|
||||
ex->arrays[ORC_VAR_D1] = d1;
|
||||
ex->params[ORC_VAR_P1] = p1;
|
||||
|
||||
func = p->code_exec;
|
||||
func (ex);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/* gst_orc_splat_u16 */
|
||||
#ifdef DISABLE_ORC
|
||||
void
|
||||
gst_orc_splat_u16 (guint8 * d1, int p1, int n)
|
||||
{
|
||||
int i;
|
||||
int16_t var0;
|
||||
int16_t *ptr0;
|
||||
const int16_t var24 = p1;
|
||||
|
||||
ptr0 = (int16_t *) d1;
|
||||
|
||||
for (i = 0; i < n; i++) {
|
||||
/* 0: copyw */
|
||||
var0 = var24;
|
||||
*ptr0 = var0;
|
||||
ptr0++;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#else
|
||||
static void
|
||||
_backup_gst_orc_splat_u16 (OrcExecutor * ex)
|
||||
{
|
||||
int i;
|
||||
int n = ex->n;
|
||||
int16_t var0;
|
||||
int16_t *ptr0;
|
||||
const int16_t var24 = ex->params[24];
|
||||
|
||||
ptr0 = (int16_t *) ex->arrays[0];
|
||||
|
||||
for (i = 0; i < n; i++) {
|
||||
/* 0: copyw */
|
||||
var0 = var24;
|
||||
*ptr0 = var0;
|
||||
ptr0++;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
gst_orc_splat_u16 (guint8 * d1, int p1, int n)
|
||||
{
|
||||
OrcExecutor _ex, *ex = &_ex;
|
||||
static int p_inited = 0;
|
||||
static OrcProgram *p = 0;
|
||||
void (*func) (OrcExecutor *);
|
||||
|
||||
if (!p_inited) {
|
||||
orc_once_mutex_lock ();
|
||||
if (!p_inited) {
|
||||
OrcCompileResult result;
|
||||
|
||||
p = orc_program_new ();
|
||||
orc_program_set_name (p, "gst_orc_splat_u16");
|
||||
orc_program_set_backup_function (p, _backup_gst_orc_splat_u16);
|
||||
orc_program_add_destination (p, 2, "d1");
|
||||
orc_program_add_parameter (p, 2, "p1");
|
||||
|
||||
orc_program_append (p, "copyw", ORC_VAR_D1, ORC_VAR_P1, ORC_VAR_D1);
|
||||
|
||||
result = orc_program_compile (p);
|
||||
}
|
||||
p_inited = TRUE;
|
||||
orc_once_mutex_unlock ();
|
||||
}
|
||||
ex->program = p;
|
||||
|
||||
ex->n = n;
|
||||
ex->arrays[ORC_VAR_D1] = d1;
|
||||
ex->params[ORC_VAR_P1] = p1;
|
||||
|
||||
func = p->code_exec;
|
||||
func (ex);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/* gst_orc_splat_u32 */
|
||||
#ifdef DISABLE_ORC
|
||||
void
|
||||
gst_orc_splat_u32 (guint8 * d1, int p1, int n)
|
||||
{
|
||||
int i;
|
||||
orc_union32 var0;
|
||||
orc_union32 *ptr0;
|
||||
const orc_union32 var24 = p1;
|
||||
|
||||
ptr0 = (orc_union32 *) d1;
|
||||
|
||||
for (i = 0; i < n; i++) {
|
||||
/* 0: copyl */
|
||||
var0.i = var24.i;
|
||||
*ptr0 = var0;
|
||||
ptr0++;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#else
|
||||
static void
|
||||
_backup_gst_orc_splat_u32 (OrcExecutor * ex)
|
||||
{
|
||||
int i;
|
||||
int n = ex->n;
|
||||
orc_union32 var0;
|
||||
orc_union32 *ptr0;
|
||||
const orc_union32 var24 = *(orc_union32 *) (ex->params + 24);
|
||||
|
||||
ptr0 = (orc_union32 *) ex->arrays[0];
|
||||
|
||||
for (i = 0; i < n; i++) {
|
||||
/* 0: copyl */
|
||||
var0.i = var24.i;
|
||||
*ptr0 = var0;
|
||||
ptr0++;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
gst_orc_splat_u32 (guint8 * d1, int p1, int n)
|
||||
{
|
||||
OrcExecutor _ex, *ex = &_ex;
|
||||
static int p_inited = 0;
|
||||
static OrcProgram *p = 0;
|
||||
void (*func) (OrcExecutor *);
|
||||
|
||||
if (!p_inited) {
|
||||
orc_once_mutex_lock ();
|
||||
if (!p_inited) {
|
||||
OrcCompileResult result;
|
||||
|
||||
p = orc_program_new ();
|
||||
orc_program_set_name (p, "gst_orc_splat_u32");
|
||||
orc_program_set_backup_function (p, _backup_gst_orc_splat_u32);
|
||||
orc_program_add_destination (p, 4, "d1");
|
||||
orc_program_add_parameter (p, 4, "p1");
|
||||
|
||||
orc_program_append (p, "copyl", ORC_VAR_D1, ORC_VAR_P1, ORC_VAR_D1);
|
||||
|
||||
result = orc_program_compile (p);
|
||||
}
|
||||
p_inited = TRUE;
|
||||
orc_once_mutex_unlock ();
|
||||
}
|
||||
ex->program = p;
|
||||
|
||||
ex->n = n;
|
||||
ex->arrays[ORC_VAR_D1] = d1;
|
||||
ex->params[ORC_VAR_P1] = p1;
|
||||
|
||||
func = p->code_exec;
|
||||
func (ex);
|
||||
}
|
||||
#endif
|
23
gst/videotestsrc/gstvideotestsrcorc-dist.h
Normal file
23
gst/videotestsrc/gstvideotestsrcorc-dist.h
Normal file
|
@ -0,0 +1,23 @@
|
|||
|
||||
/* autogenerated from gstvideotestsrcorc.orc */
|
||||
|
||||
#ifndef _GSTVIDEOTESTSRCORC_H_
|
||||
#define _GSTVIDEOTESTSRCORC_H_
|
||||
|
||||
#include <glib.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
void gst_orc_splat_u8 (guint8 * d1, int p1, int n);
|
||||
void gst_orc_splat_s16 (gint8 * d1, int p1, int n);
|
||||
void gst_orc_splat_u16 (guint8 * d1, int p1, int n);
|
||||
void gst_orc_splat_u32 (guint8 * d1, int p1, int n);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
29
gst/videotestsrc/gstvideotestsrcorc.orc
Normal file
29
gst/videotestsrc/gstvideotestsrcorc.orc
Normal file
|
@ -0,0 +1,29 @@
|
|||
|
||||
.function gst_orc_splat_u8
|
||||
.dest 1 d1 guint8
|
||||
.param 1 p1
|
||||
|
||||
copyb d1, p1
|
||||
|
||||
|
||||
.function gst_orc_splat_s16
|
||||
.dest 2 d1 gint8
|
||||
.param 2 p1
|
||||
|
||||
copyw d1, p1
|
||||
|
||||
|
||||
.function gst_orc_splat_u16
|
||||
.dest 2 d1 guint8
|
||||
.param 2 p1
|
||||
|
||||
copyw d1, p1
|
||||
|
||||
|
||||
.function gst_orc_splat_u32
|
||||
.dest 4 d1 guint8
|
||||
.param 4 p1
|
||||
|
||||
copyl d1, p1
|
||||
|
||||
|
|
@ -25,7 +25,7 @@
|
|||
|
||||
#include "gstvideotestsrc.h"
|
||||
#include "videotestsrc.h"
|
||||
#include <liboil/liboil.h>
|
||||
#include "gstvideotestsrcorc.h"
|
||||
|
||||
|
||||
#include <string.h>
|
||||
|
@ -46,6 +46,16 @@ random_char (void)
|
|||
return (state >> 16) & 0xff;
|
||||
}
|
||||
|
||||
static void
|
||||
oil_splat_u8 (guint8 * dest, int stride, const guint8 * value, int n)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < n; i++) {
|
||||
*dest = *value;
|
||||
dest += stride;
|
||||
}
|
||||
}
|
||||
|
||||
#if 0
|
||||
static void
|
||||
random_chars (unsigned char *dest, int nbytes)
|
||||
|
@ -84,7 +94,7 @@ paint_rect (unsigned char *dest, int stride, int x, int y, int w, int h,
|
|||
int i;
|
||||
|
||||
for (i = 0; i < h; i++) {
|
||||
oil_splat_u8_ns (d, &color, w);
|
||||
gst_orc_splat_u8 (d, &color, w);
|
||||
d += stride;
|
||||
}
|
||||
}
|
||||
|
@ -1217,7 +1227,7 @@ gst_video_test_src_zoneplate (GstVideoTestSrc * v, unsigned char *dest,
|
|||
struct vts_color_struct_rgb rgb_color;
|
||||
struct vts_color_struct_yuv yuv_color;
|
||||
struct vts_color_struct_gray gray_color;
|
||||
static uint8_t sine_array[256];
|
||||
static guint8 sine_array[256];
|
||||
static int sine_array_inited = FALSE;
|
||||
|
||||
static int t = 0; /* time - increment phase vs time by 1 for each generated frame */
|
||||
|
@ -1375,7 +1385,7 @@ gst_video_test_src_chromazoneplate (GstVideoTestSrc * v, unsigned char *dest,
|
|||
struct vts_color_struct_rgb rgb_color;
|
||||
struct vts_color_struct_yuv yuv_color;
|
||||
struct vts_color_struct_gray gray_color;
|
||||
static uint8_t sine_array[256];
|
||||
static guint8 sine_array[256];
|
||||
static int sine_array_inited = FALSE;
|
||||
|
||||
static int t = 0; /* time - increment phase vs time by 1 for each generated frame */
|
||||
|
@ -1507,7 +1517,7 @@ gst_video_test_src_circular (GstVideoTestSrc * v, unsigned char *dest,
|
|||
struct vts_color_struct_rgb rgb_color;
|
||||
struct vts_color_struct_yuv yuv_color;
|
||||
struct vts_color_struct_gray gray_color;
|
||||
static uint8_t sine_array[256];
|
||||
static guint8 sine_array[256];
|
||||
static int sine_array_inited = FALSE;
|
||||
double freq[8];
|
||||
|
||||
|
@ -1730,9 +1740,9 @@ paint_hline_I420 (paintinfo * p, int x, int y, int w)
|
|||
|
||||
if (x + w == p->width && p->width % 2 != 0)
|
||||
w1++;
|
||||
oil_splat_u8_ns (p->yp + offset + x, &p->yuv_color->Y, w);
|
||||
oil_splat_u8_ns (p->up + offset1 + x1, &p->yuv_color->U, w1);
|
||||
oil_splat_u8_ns (p->vp + offset1 + x1, &p->yuv_color->V, w1);
|
||||
gst_orc_splat_u8 (p->yp + offset + x, p->yuv_color->Y, w);
|
||||
gst_orc_splat_u8 (p->up + offset1 + x1, p->yuv_color->U, w1);
|
||||
gst_orc_splat_u8 (p->vp + offset1 + x1, p->yuv_color->V, w1);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -1743,11 +1753,17 @@ paint_hline_NV12_NV21 (paintinfo * p, int x, int y, int w)
|
|||
int offset = y * p->ystride;
|
||||
int offsetuv = (y / 2) * p->ustride + (x & ~0x01);
|
||||
int uvlength = x2 - x1 + 1;
|
||||
guint16 value;
|
||||
|
||||
gst_orc_splat_u8 (p->yp + offset + x, p->yuv_color->Y, w);
|
||||
#if G_BYTE_ORDER == G_LITTLE_ENDIAN
|
||||
value = (p->yuv_color->U << 0) | (p->yuv_color->V << 8);
|
||||
#else
|
||||
value = (p->yuv_color->U << 8) | (p->yuv_color->V << 0);
|
||||
#endif
|
||||
|
||||
oil_splat_u8_ns (p->yp + offset + x, &p->yuv_color->Y, w);
|
||||
if (uvlength) {
|
||||
oil_splat_u8 (p->up + offsetuv, 2, &p->yuv_color->U, uvlength);
|
||||
oil_splat_u8 (p->vp + offsetuv, 2, &p->yuv_color->V, uvlength);
|
||||
gst_orc_splat_u16 (p->up + offsetuv, value, uvlength);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1850,11 +1866,14 @@ static void
|
|||
paint_hline_v308 (paintinfo * p, int x, int y, int w)
|
||||
{
|
||||
int offset;
|
||||
int i;
|
||||
|
||||
offset = (y * p->ystride) + (x * 3);
|
||||
oil_splat_u8 (p->yp + offset, 3, &p->yuv_color->Y, w);
|
||||
oil_splat_u8 (p->up + offset, 3, &p->yuv_color->U, w);
|
||||
oil_splat_u8 (p->vp + offset, 3, &p->yuv_color->V, w);
|
||||
for (i = 0; i < w; i++) {
|
||||
p->yp[offset + 3 * i] = p->yuv_color->Y;
|
||||
p->up[offset + 3 * i] = p->yuv_color->U;
|
||||
p->vp[offset + 3 * i] = p->yuv_color->V;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -1862,12 +1881,18 @@ paint_hline_AYUV (paintinfo * p, int x, int y, int w)
|
|||
{
|
||||
int offset;
|
||||
guint8 alpha = 255;
|
||||
guint32 value;
|
||||
|
||||
#if G_BYTE_ORDER == G_LITTLE_ENDIAN
|
||||
value = (alpha << 0) | (p->yuv_color->Y << 8) |
|
||||
(p->yuv_color->U << 16) | (p->yuv_color->V << 24);
|
||||
#else
|
||||
value = (alpha << 24) | (p->yuv_color->Y << 16) |
|
||||
(p->yuv_color->U << 8) | (p->yuv_color->V << 0);
|
||||
#endif
|
||||
|
||||
offset = (y * p->ystride) + (x * 4);
|
||||
oil_splat_u8 (p->yp + offset, 4, &p->yuv_color->Y, w);
|
||||
oil_splat_u8 (p->up + offset, 4, &p->yuv_color->U, w);
|
||||
oil_splat_u8 (p->vp + offset, 4, &p->yuv_color->V, w);
|
||||
oil_splat_u8 (p->ap + offset, 4, &alpha, w);
|
||||
gst_orc_splat_u32 (p->ap + offset, value, w);
|
||||
}
|
||||
|
||||
#define TO_16(x) (((x)<<8) | (x))
|
||||
|
@ -1878,7 +1903,7 @@ paint_hline_v216 (paintinfo * p, int x, int y, int w)
|
|||
{
|
||||
int x1 = x / 2;
|
||||
int x2 = (x + w) / 2;
|
||||
uint16_t Y, U, V;
|
||||
guint16 Y, U, V;
|
||||
int i;
|
||||
int offset;
|
||||
|
||||
|
@ -1898,8 +1923,8 @@ paint_hline_v216 (paintinfo * p, int x, int y, int w)
|
|||
static void
|
||||
paint_hline_v410 (paintinfo * p, int x, int y, int w)
|
||||
{
|
||||
uint32_t a;
|
||||
uint8_t *data;
|
||||
guint32 a;
|
||||
guint8 *data;
|
||||
int i;
|
||||
|
||||
a = (TO_10 (p->yuv_color->U) << 22) |
|
||||
|
@ -1914,8 +1939,8 @@ paint_hline_v410 (paintinfo * p, int x, int y, int w)
|
|||
static void
|
||||
paint_hline_v210 (paintinfo * p, int x, int y, int w)
|
||||
{
|
||||
uint32_t a0, a1, a2, a3;
|
||||
uint8_t *data;
|
||||
guint32 a0, a1, a2, a3;
|
||||
guint8 *data;
|
||||
int i;
|
||||
|
||||
/* FIXME this is kinda gross. it only handles x values in
|
||||
|
@ -1997,9 +2022,9 @@ paint_hline_Y41B (paintinfo * p, int x, int y, int w)
|
|||
|
||||
if (x + w == p->width && p->width % 4 != 0)
|
||||
w1++;
|
||||
oil_splat_u8_ns (p->yp + offset + x, &p->yuv_color->Y, w);
|
||||
oil_splat_u8_ns (p->up + offset1 + x1, &p->yuv_color->U, w1);
|
||||
oil_splat_u8_ns (p->vp + offset1 + x1, &p->yuv_color->V, w1);
|
||||
gst_orc_splat_u8 (p->yp + offset + x, p->yuv_color->Y, w);
|
||||
gst_orc_splat_u8 (p->up + offset1 + x1, p->yuv_color->U, w1);
|
||||
gst_orc_splat_u8 (p->vp + offset1 + x1, p->yuv_color->V, w1);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -2024,9 +2049,9 @@ paint_hline_Y42B (paintinfo * p, int x, int y, int w)
|
|||
|
||||
if (x + w == p->width && p->width % 2 != 0)
|
||||
w1++;
|
||||
oil_splat_u8_ns (p->yp + offset + x, &p->yuv_color->Y, w);
|
||||
oil_splat_u8_ns (p->up + offset1 + x1, &p->yuv_color->U, w1);
|
||||
oil_splat_u8_ns (p->vp + offset1 + x1, &p->yuv_color->V, w1);
|
||||
gst_orc_splat_u8 (p->yp + offset + x, p->yuv_color->Y, w);
|
||||
gst_orc_splat_u8 (p->up + offset1 + x1, p->yuv_color->U, w1);
|
||||
gst_orc_splat_u8 (p->vp + offset1 + x1, p->yuv_color->V, w1);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -2044,9 +2069,9 @@ paint_hline_Y444 (paintinfo * p, int x, int y, int w)
|
|||
{
|
||||
int offset = y * p->ystride;
|
||||
|
||||
oil_splat_u8_ns (p->yp + offset + x, &p->yuv_color->Y, w);
|
||||
oil_splat_u8_ns (p->up + offset + x, &p->yuv_color->U, w);
|
||||
oil_splat_u8_ns (p->vp + offset + x, &p->yuv_color->V, w);
|
||||
gst_orc_splat_u8 (p->yp + offset + x, p->yuv_color->Y, w);
|
||||
gst_orc_splat_u8 (p->up + offset + x, p->yuv_color->U, w);
|
||||
gst_orc_splat_u8 (p->vp + offset + x, p->yuv_color->V, w);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -2063,7 +2088,7 @@ paint_hline_Y800 (paintinfo * p, int x, int y, int w)
|
|||
{
|
||||
int offset = y * p->ystride;
|
||||
|
||||
oil_splat_u8_ns (p->yp + offset + x, &p->yuv_color->Y, w);
|
||||
gst_orc_splat_u8 (p->yp + offset + x, p->yuv_color->Y, w);
|
||||
}
|
||||
|
||||
#if 0
|
||||
|
@ -2107,9 +2132,9 @@ paint_hline_IMC1 (paintinfo * p, int x, int y, int w)
|
|||
int offset = y * p->width;
|
||||
int offset1 = (y / 2) * p->width;
|
||||
|
||||
oil_splat_u8_ns (p->yp + offset + x, &p->yuv_color->Y, w);
|
||||
oil_splat_u8_ns (p->up + offset1 + x1, &p->yuv_color->U, x2 - x1);
|
||||
oil_splat_u8_ns (p->vp + offset1 + x1, &p->yuv_color->V, x2 - x1);
|
||||
gst_orc_splat_u8 (p->yp + offset + x, p->yuv_color->Y, w);
|
||||
gst_orc_splat_u8 (p->up + offset1 + x1, p->yuv_color->U, x2 - x1);
|
||||
gst_orc_splat_u8 (p->vp + offset1 + x1, p->yuv_color->V, x2 - x1);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -2152,9 +2177,9 @@ paint_hline_YUV9 (paintinfo * p, int x, int y, int w)
|
|||
|
||||
if (x + w == p->width && p->width % 4 != 0)
|
||||
w1++;
|
||||
oil_splat_u8_ns (p->yp + offset + x, &p->yuv_color->Y, w);
|
||||
oil_splat_u8_ns (p->up + offset1 + x1, &p->yuv_color->U, w1);
|
||||
oil_splat_u8_ns (p->vp + offset1 + x1, &p->yuv_color->V, w1);
|
||||
gst_orc_splat_u8 (p->yp + offset + x, p->yuv_color->Y, w);
|
||||
gst_orc_splat_u8 (p->up + offset1 + x1, p->yuv_color->U, w1);
|
||||
gst_orc_splat_u8 (p->vp + offset1 + x1, p->yuv_color->V, w1);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -2282,18 +2307,12 @@ static void
|
|||
paint_hline_RGB565 (paintinfo * p, int x, int y, int w)
|
||||
{
|
||||
int offset = y * p->ystride;
|
||||
uint8_t a, b;
|
||||
guint16 value;
|
||||
|
||||
a = (p->rgb_color->R & 0xf8) | (p->rgb_color->G >> 5);
|
||||
b = ((p->rgb_color->G << 3) & 0xe0) | (p->rgb_color->B >> 3);
|
||||
value = ((p->rgb_color->R & 0xf8) << 8) |
|
||||
((p->rgb_color->G & 0xfc) << 3) | ((p->rgb_color->B & 0xf8) >> 3);
|
||||
|
||||
#if G_BYTE_ORDER == G_LITTLE_ENDIAN
|
||||
oil_splat_u8 (p->yp + offset + x * 2 + 0, 2, &b, w);
|
||||
oil_splat_u8 (p->yp + offset + x * 2 + 1, 2, &a, w);
|
||||
#else
|
||||
oil_splat_u8 (p->yp + offset + x * 2 + 0, 2, &a, w);
|
||||
oil_splat_u8 (p->yp + offset + x * 2 + 1, 2, &b, w);
|
||||
#endif
|
||||
gst_orc_splat_u16 (p->yp + offset + x * 2 + 0, value, w);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -2308,7 +2327,7 @@ static void
|
|||
paint_hline_xRGB1555 (paintinfo * p, int x, int y, int w)
|
||||
{
|
||||
int offset = y * p->ystride;
|
||||
uint8_t a, b;
|
||||
guint8 a, b;
|
||||
|
||||
a = ((p->rgb_color->R >> 1) & 0x7c) | (p->rgb_color->G >> 6);
|
||||
b = ((p->rgb_color->G << 2) & 0xe0) | (p->rgb_color->B >> 3);
|
||||
|
@ -2335,7 +2354,7 @@ static void
|
|||
paint_hline_bayer (paintinfo * p, int x, int y, int w)
|
||||
{
|
||||
int offset = y * p->ystride;
|
||||
uint8_t *dest = p->yp + offset;
|
||||
guint8 *dest = p->yp + offset;
|
||||
int i;
|
||||
|
||||
if (y & 1) {
|
||||
|
@ -2371,7 +2390,7 @@ paint_hline_GRAY8 (paintinfo * p, int x, int y, int w)
|
|||
int offset = y * p->ystride;
|
||||
guint8 color = p->gray_color->G >> 8;
|
||||
|
||||
oil_splat_u8_ns (p->yp + offset + x, &color, w);
|
||||
gst_orc_splat_u8 (p->yp + offset + x, color, w);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -2387,5 +2406,5 @@ paint_hline_GRAY16 (paintinfo * p, int x, int y, int w)
|
|||
{
|
||||
int offset = y * p->ystride;
|
||||
|
||||
oil_splat_u16_ns ((guint16 *) (p->yp + offset + 2 * x), &p->gray_color->G, w);
|
||||
gst_orc_splat_u16 (p->yp + offset + 2 * x, p->gray_color->G, w);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue