Commit 7bc58863 authored by David Schleef's avatar David Schleef Committed by Wim Taymans

[MOVED FROM BAD 31/68] colorspace: Revive element

Now based on Orc.
parent 0125cb55
plugin_LTLIBRARIES = libgstyuvtorgbcolorspace.la
plugin_LTLIBRARIES = libgstcolorspace.la
if HAVE_CPU_I386
ARCHSRCS = yuv2rgb_mmx16.s
else
ARCHSRCS =
endif
ORC_SOURCE=gstcolorspaceorc
include $(top_srcdir)/common/orc.mak
libgstcolorspace_la_SOURCES = gstcolorspace.c
nodist_libgstcolorspace_la_SOURCES = $(ORC_NODIST_SOURCES)
libgstcolorspace_la_CFLAGS = \
$(GST_PLUGINS_BASE_CFLAGS) \
$(GST_CFLAGS) \
$(ORC_CFLAGS)
libgstcolorspace_la_LIBADD = \
$(GST_PLUGINS_BASE_LIBS) -lgstvideo-$(GST_MAJORMINOR) \
$(GST_BASE_LIBS) \
$(GST_LIBS) \
$(ORC_LIBS)
libgstcolorspace_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
libgstcolorspace_la_LIBTOOLFLAGS = --tag=disable-static
noinst_HEADERS = gstcolorspace.h
libgstyuvtorgbcolorspace_la_SOURCES = gstcolorspace.c yuv2rgb.c
libgstyuvtorgbcolorspace_la_CFLAGS = $(GST_CFLAGS)
libgstyuvtorgbcolorspace_la_LIBADD =
libgstyuvtorgbcolorspace_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
libgstyuvtorgbcolorspace_la_LIBTOOLFLAGS = --tag=disable-static
noinst_HEADERS = yuv2rgb.h gstcolorspace.h
This diff is collapsed.
/* GStreamer
* Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
* This file:
* Copyright (C) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
......@@ -17,85 +19,46 @@
* Boston, MA 02111-1307, USA.
*/
#ifndef _GST_COLORSPACE_H_
#define _GST_COLORSPACE_H_
#ifndef __GST_COLORSPACE_H__
#define __GST_COLORSPACE_H__
#include <gst/gst.h>
#include <gst/video/video.h>
#include <gst/video/gstvideofilter.h>
G_BEGIN_DECLS
#define GST_TYPE_COLORSPACE \
(gst_colorspace_get_type())
#define GST_COLORSPACE(obj) \
(G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_COLORSPACE,GstColorspace))
#define GST_COLORSPACE_CLASS(klass) \
(G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_COLORSPACE,GstColorspaceClass))
#define GST_COLORSPACE_GET_CLASS(obj) \
(G_TYPE_INSTANCE_GET_CLASS((obj),GST_TYPE_COLORSPACE,GstColorspaceClass))
#define GST_IS_COLORSPACE(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_COLORSPACE))
#define GST_IS_COLORSPACE_CLASS(klass) \
(G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_COLORSPACE))
#define GST_TYPE_CSP (gst_csp_get_type())
#define GST_CSP(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_CSP,GstCsp))
#define GST_CSP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_CSP,GstCspClass))
#define GST_IS_CSP(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_CSP))
#define GST_IS_CSP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_CSP))
typedef struct _GstColorspace GstColorspace;
typedef struct _GstColorspaceClass GstColorspaceClass;
typedef struct _GstCsp GstCsp;
typedef struct _GstCspClass GstCspClass;
typedef enum {
GST_COLORSPACE_NONE,
GST_COLORSPACE_HERMES,
GST_COLORSPACE_YUV_RGB,
GST_COLORSPACE_YUY2_I420,
GST_COLORSPACE_RGB32_I420,
GST_COLORSPACE_RGB32_YV12,
GST_COLORSPACE_420_SWAP,
} GstColorSpaceConverterType;
struct _GstColorspace {
GstElement element;
GstPad *sinkpad,*srcpad;
int converter_index;
int src_format_index;
int sink_format_index;
int src_size;
int sink_size;
int src_stride;
int sink_stride;
/**
* GstCsp:
*
* Opaque object data structure.
*/
struct _GstCsp {
GstVideoFilter element;
gint width, height;
gdouble fps;
};
gboolean interlaced;
gfloat fps;
struct _GstColorspaceClass {
GstElementClass parent_class;
GstVideoFormat from_format;
GstVideoFormat to_format;
guint32 *palette;
};
GType gst_colorspace_get_type(void);
typedef struct _GstColorspaceFormat {
GstStaticCaps caps;
} GstColorspaceFormat;
typedef enum {
GST_COLORSPACE_I420,
GST_COLORSPACE_YV12,
GST_COLORSPACE_RGB32,
GST_COLORSPACE_RGB24,
GST_COLORSPACE_RGB16,
} GstColorSpaceFormatType;
typedef struct _GstColorspaceConverter {
GstColorSpaceFormatType from;
GstColorSpaceFormatType to;
void (*convert) (GstColorspace *colorspace, unsigned char *dest, unsigned char *src);
} GstColorspaceConverter;
struct _GstCspClass
{
GstVideoFilterClass parent_class;
};
G_END_DECLS
#endif
#endif /* __GST_COLORSPACE_H__ */
This diff is collapsed.
This diff is collapsed.
/*
* Copyright (c) 1995 The Regents of the University of California.
* All rights reserved.
*
* Permission to use, copy, modify, and distribute this software and its
* documentation for any purpose, without fee, and without written agreement is
* hereby granted, provided that the above copyright notice and the following
* two paragraphs appear in all copies of this software.
*
* IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
* DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
* OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
* CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
* AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
* ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
* PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
*/
#ifndef __YUV2RGB_H__
#define __YUV2RGB_H__
#include <gst/gst.h>
#include "gstcolorspace.h"
G_BEGIN_DECLS
#if 0
typedef struct _GstColorspaceYUVTables GstColorspaceYUVTables;
struct _GstColorspaceYUVTables {
int gammaCorrectFlag;
double gammaCorrect;
int chromaCorrectFlag;
double chromaCorrect;
int *L_tab, *Cr_r_tab, *Cr_g_tab, *Cb_g_tab, *Cb_b_tab;
/*
* We define tables that convert a color value between -256 and 512
* into the R, G and B parts of the pixel. The normal range is 0-255.
**/
long *r_2_pix;
long *g_2_pix;
long *b_2_pix;
};
typedef struct _GstColorspaceConverter GstColorspaceConverter;
typedef void (*GstColorspaceConvertFunction) (GstColorspaceConverter *space, guchar *src, guchar *dest);
struct _GstColorspaceConverter {
guint width;
guint height;
guint insize;
guint outsize;
/* private */
GstColorspaceYUVTables *color_tables;
GstColorspaceConvertFunction convert;
};
#endif
void gst_colorspace_table_init (GstColorspace *space);
void gst_colorspace_I420_to_rgb32(GstColorspace *space,
unsigned char *src, unsigned char *dest);
void gst_colorspace_I420_to_rgb24(GstColorspace *space,
unsigned char *src, unsigned char *dest);
void gst_colorspace_I420_to_rgb16(GstColorspace *space,
unsigned char *src, unsigned char *dest);
void gst_colorspace_YV12_to_rgb32(GstColorspace *space,
unsigned char *src, unsigned char *dest);
void gst_colorspace_YV12_to_rgb24(GstColorspace *space,
unsigned char *src, unsigned char *dest);
void gst_colorspace_YV12_to_rgb16(GstColorspace *space,
unsigned char *src, unsigned char *dest);
#if 0
GstColorspaceYUVTables * gst_colorspace_init_yuv(long depth,
long red_mask, long green_mask, long blue_mask);
#endif
#if 0
GstColorspaceConverter* gst_colorspace_yuv2rgb_get_converter (const GstCaps *from, const GstCaps *to);
#define gst_colorspace_convert(converter, src, dest) \
(converter)->convert((converter), (src), (dest))
void gst_colorspace_converter_destroy (GstColorspaceConverter *space);
#endif
G_END_DECLS
#endif
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment