changeset 11536:017a7e90fcf1

yuv colorspace converter
author alex
date Sat, 29 Nov 2003 19:34:26 +0000
parents f95e43b7d51d
children 93a76eee7657
files libmpcodecs/Makefile libmpcodecs/vf.c libmpcodecs/vf_yuvcsp.c
diffstat 3 files changed, 103 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/libmpcodecs/Makefile	Sat Nov 29 03:02:38 2003 +0000
+++ b/libmpcodecs/Makefile	Sat Nov 29 19:34:26 2003 +0000
@@ -14,7 +14,7 @@
 VIDEO_SRCS_OPT=vd_realvid.c vd_ffmpeg.c vd_dshow.c vd_dmo.c vd_vfw.c vd_vfwex.c vd_odivx.c vd_divx4.c vd_zrmjpeg.c vd_xanim.c vd_xvid.c vd_xvid4.c vd_libdv.c vd_qtvideo.c vd_theora.c
 VIDEO_SRCS=dec_video.c vd.c $(VIDEO_SRCS_NAT) $(VIDEO_SRCS_LIB) $(VIDEO_SRCS_OPT)
 
-VFILTER_SRCS=vf.c vf_vo.c vf_crop.c vf_expand.c vf_scale.c vf_format.c vf_yuy2.c vf_flip.c vf_rgb2bgr.c vf_rotate.c vf_mirror.c vf_palette.c vf_lavc.c vf_dvbscale.c vf_cropdetect.c vf_test.c vf_noise.c vf_yvu9.c vf_rectangle.c vf_lavcdeint.c vf_eq.c vf_eq2.c vf_halfpack.c vf_dint.c vf_1bpp.c vf_bmovl.c vf_2xsai.c vf_unsharp.c vf_swapuv.c vf_il.c vf_boxblur.c vf_sab.c vf_smartblur.c vf_perspective.c vf_down3dright.c vf_field.c vf_denoise3d.c vf_hqdn3d.c vf_detc.c vf_telecine.c vf_tfields.c vf_ivtc.c vf_ilpack.c vf_dsize.c vf_decimate.c vf_softpulldown.c vf_tinterlace.c vf_pullup.c pullup.c vf_framestep.c vf_tile.c vf_delogo.c vf_fil.c vf_hue.c vf_spp.c
+VFILTER_SRCS=vf.c vf_vo.c vf_crop.c vf_expand.c vf_scale.c vf_format.c vf_yuy2.c vf_flip.c vf_rgb2bgr.c vf_rotate.c vf_mirror.c vf_palette.c vf_lavc.c vf_dvbscale.c vf_cropdetect.c vf_test.c vf_noise.c vf_yvu9.c vf_rectangle.c vf_lavcdeint.c vf_eq.c vf_eq2.c vf_halfpack.c vf_dint.c vf_1bpp.c vf_bmovl.c vf_2xsai.c vf_unsharp.c vf_swapuv.c vf_il.c vf_boxblur.c vf_sab.c vf_smartblur.c vf_perspective.c vf_down3dright.c vf_field.c vf_denoise3d.c vf_hqdn3d.c vf_detc.c vf_telecine.c vf_tfields.c vf_ivtc.c vf_ilpack.c vf_dsize.c vf_decimate.c vf_softpulldown.c vf_tinterlace.c vf_pullup.c pullup.c vf_framestep.c vf_tile.c vf_delogo.c vf_fil.c vf_hue.c vf_spp.c vf_yuvcsp.c
 ifeq ($(HAVE_FFPOSTPROCESS),yes)
 VFILTER_SRCS += vf_pp.c
 endif
--- a/libmpcodecs/vf.c	Sat Nov 29 03:02:38 2003 +0000
+++ b/libmpcodecs/vf.c	Sat Nov 29 19:34:26 2003 +0000
@@ -80,6 +80,7 @@
 extern vf_info_t vf_info_delogo;
 extern vf_info_t vf_info_hue;
 extern vf_info_t vf_info_spp;
+extern vf_info_t vf_info_yuvcsp;
 
 // list of available filters:
 static vf_info_t* filter_list[]={
@@ -149,6 +150,7 @@
 #ifdef USE_LIBAVCODEC
     &vf_info_spp,
 #endif
+    &vf_info_yuvcsp,
     NULL
 };
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libmpcodecs/vf_yuvcsp.c	Sat Nov 29 19:34:26 2003 +0000
@@ -0,0 +1,100 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <inttypes.h>
+
+#include "../config.h"
+#include "../mp_msg.h"
+
+#include "img_format.h"
+#include "mp_image.h"
+#include "vf.h"
+
+struct vf_priv_s {
+    int csp;
+};
+
+//===========================================================================//
+
+static int config(struct vf_instance_s* vf,
+        int width, int height, int d_width, int d_height,
+	unsigned int flags, unsigned int outfmt){
+    return vf_next_config(vf, width, height, d_width, d_height, flags, outfmt);
+}
+
+static inline int clamp_y(int x){
+    return (x > 235) ? 235 : (x < 16) ? 16 : x;
+}
+
+static inline int clamp_c(int x){
+    return (x > 240) ? 240 : (x < 16) ? 16 : x;
+}
+
+static int put_image(struct vf_instance_s* vf, mp_image_t *mpi){
+    int i,j;
+    uint8_t *y_in, *cb_in, *cr_in;
+    uint8_t *y_out, *cb_out, *cr_out;
+
+    vf->dmpi=vf_get_image(vf->next,mpi->imgfmt,
+	MP_IMGTYPE_TEMP, MP_IMGFLAG_ACCEPT_STRIDE,
+	mpi->width, mpi->height);
+    
+    y_in = mpi->planes[0];
+    cb_in = mpi->planes[1];
+    cr_in = mpi->planes[2];
+
+    y_out = vf->dmpi->planes[0];
+    cb_out = vf->dmpi->planes[1];
+    cr_out = vf->dmpi->planes[2];
+    
+    for (i = 0; i < mpi->height; i++)
+	for (j = 0; j < mpi->width; j++)
+	    y_out[i*vf->dmpi->stride[0]+j] = clamp_y(y_in[i*mpi->stride[0]+j]);
+
+    for (i = 0; i < mpi->chroma_height; i++)
+	for (j = 0; j < mpi->chroma_width; j++)
+	{
+	    cb_out[i*vf->dmpi->stride[1]+j] = clamp_c(cb_in[i*mpi->stride[1]+j]);
+	    cr_out[i*vf->dmpi->stride[2]+j] = clamp_c(cr_in[i*mpi->stride[2]+j]);
+	}
+    
+    return vf_next_put_image(vf,vf->dmpi);
+}
+
+//===========================================================================//
+
+static void uninit(struct vf_instance_s* vf){
+	free(vf->priv);
+}
+
+static int query_format(struct vf_instance_s* vf, unsigned int fmt){
+    switch(fmt){
+	case IMGFMT_YV12:
+	case IMGFMT_I420:
+	case IMGFMT_IYUV:
+	    return 1;
+    }
+    return 0;
+}
+
+static int open(vf_instance_t *vf, char* args){
+    vf->config=config;
+    vf->put_image=put_image;
+//    vf->uninit=uninit;
+    vf->query_format=query_format;
+//    vf->priv=calloc(1, sizeof(struct vf_priv_s));
+//    if (args)
+//	vf->priv->csp = atoi(args);
+    return 1;
+}
+
+vf_info_t vf_info_yuvcsp = {
+    "yuv colorspace converter",
+    "yuvcsp",
+    "Alex Beregszaszi",
+    "",
+    open,
+    NULL
+};
+
+//===========================================================================//