[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [59688] branches/soc-2013-vse/source/ blender/sequencer: Updating converted Brightness command.

Alexander Kuznetsov kuzsasha at gmail.com
Sat Aug 31 08:31:06 CEST 2013


Revision: 59688
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=59688
Author:   alexk
Date:     2013-08-31 06:31:06 +0000 (Sat, 31 Aug 2013)
Log Message:
-----------
Updating converted Brightness command. Much cleaner code, with seperate stages.

Added Paths:
-----------
    branches/soc-2013-vse/source/blender/sequencer/commands/
    branches/soc-2013-vse/source/blender/sequencer/commands/seqCommandBrightenss.cpp
    branches/soc-2013-vse/source/blender/sequencer/commands/seqCommandBrightenss.h

Added: branches/soc-2013-vse/source/blender/sequencer/commands/seqCommandBrightenss.cpp
===================================================================
--- branches/soc-2013-vse/source/blender/sequencer/commands/seqCommandBrightenss.cpp	                        (rev 0)
+++ branches/soc-2013-vse/source/blender/sequencer/commands/seqCommandBrightenss.cpp	2013-08-31 06:31:06 UTC (rev 59688)
@@ -0,0 +1,123 @@
+#include "seqCommandBrightenss.h"
+
+#include "sequencer_seqImageStorage.h"
+#include "sequencer_seqBucket.h"
+#include "sequencer_types.h"
+
+
+
+template <class T> void seqCommandBrightenss::exec_slice_g(seqDeviceCPU *dev, seqBucket * bucket, seqImageStorage *outi,
+														 seqImageStorage *ini, seqImageStorage *in2i, seqImageStorage *in3i,
+														   size_t ix, size_t iy, size_t ex, size_t ey)
+{
+	size_t widthx = outi->get_physx();
+	T *in = (T*)ini->buf.pointer;
+	T *out = (T*)outi->buf.pointer;
+
+	for(size_t cy = iy; cy < ey; cy++)
+	{
+		for(size_t cx = ix; cx < ex; cx++)
+		{
+			size_t p = (cy*widthx+cx)*4;
+			out[p+0] = multiplyv*in[p+0]+addv*T::ONE;
+			out[p+1] = multiplyv*in[p+1]+addv*T::ONE;
+			out[p+2] = multiplyv*in[p+2]+addv*T::ONE;
+			out[p+3] = in[p+3];
+		}
+	}
+
+}
+
+
+void seqCommandBrightenss::exec_slice(seqDeviceCPU *dev, seqBucket * bucket,
+				   size_t ix, size_t iy, size_t ex, size_t ey)
+{
+	outi->format = SEQ_ING_FORMAT_RGBA;
+
+	outi->gi.quality = ini->gi.quality;
+
+	switch(outi->gi.quality)
+	{
+		case SEQ_ING_QUAL_CHAR:
+			exec_slice_g<ichar>(dev, bucket, outi, ini, NULL, NULL, ix, iy, ex, ey);
+			break;
+
+		case SEQ_ING_QUAL_FLOAT:
+			exec_slice_g<ifloat>(dev, bucket, outi, ini, NULL, NULL, ix, iy, ex, ey);
+			break;
+	}
+}
+
+
+
+void seqCommandBrightenss::get_element_size(seqBucket * bucket, size_t *size)
+{
+	size[0] = outi->get_physx();
+	size[1] = outi->get_physy();
+}
+
+
+
+
+
+void seqCommandBrightenss::prepare(seqDevice *dev, seqBucket *bucket)
+{
+	ini = &bucket->internalImg[inimgid];
+	outi = &bucket->internalImg[outimgid];
+
+
+	outi->copy_phys_size(ini);
+
+	float bright = brightness / 100.0f;
+	float contrast = this->contrast;
+	float delta = contrast / 200.0f;
+
+	multiplyv = 1.0f - delta * 2.0f;
+	/*
+	 * The algorithm is by Werner D. Streidt
+	 * (http://visca.com/ffactory/archives/5-99/msg00021.html)
+	 * Extracted of OpenCV demhist.c
+	 */
+	if (contrast > 0) {
+		multiplyv = 1.0f / multiplyv;
+		addv =multiplyv* (bright - delta);
+	}
+	else {
+		delta *= -1;
+		addv =multiplyv* (bright + delta);
+	}
+
+	outi->AllocateFromSize(dev);
+
+}
+
+
+int seqCommandBrightenss::exec_gpu(seqDeviceCL *dev, seqBucket *bucket)
+{
+	cl_int err = 0;
+	size_t size[2];
+	unsigned int isize[2];
+
+
+	isize[0] = size[0] = outi->get_physx();
+	isize[1] = size[1] = outi->get_physy();
+
+	cl_mem inm = ini->buf.get_cl_pointer();
+	cl_mem outm = outi->buf.get_cl_pointer();
+
+	dev->SetKernelArg(kBrightnessContrast, 0, &inm, "");
+	dev->SetKernelArg(kBrightnessContrast, 1, &outm, "");
+
+	dev->SetKernelArg(kBrightnessContrast, 2, &isize[0], "");
+	dev->SetKernelArg(kBrightnessContrast, 3, &isize[1], "");
+	dev->SetKernelArg(kBrightnessContrast, 4, &multiplyv, "");
+	dev->SetKernelArg(kBrightnessContrast, 5, &addv, "");
+
+	err |= clEnqueueNDRangeKernel(dev->local_cl_queue, dev->local_cl_main_kernels[0][kBrightnessContrast], 2, 0, size, 0, 0, 0, 0);
+
+
+
+
+
+	return 0;
+}

Added: branches/soc-2013-vse/source/blender/sequencer/commands/seqCommandBrightenss.h
===================================================================
--- branches/soc-2013-vse/source/blender/sequencer/commands/seqCommandBrightenss.h	                        (rev 0)
+++ branches/soc-2013-vse/source/blender/sequencer/commands/seqCommandBrightenss.h	2013-08-31 06:31:06 UTC (rev 59688)
@@ -0,0 +1,85 @@
+#ifndef __SEQCOMMANDBRIGHTNESS_H__
+#define __SEQCOMMANDBRIGHTNESS_H__
+
+#include "sequencer_seqCommand.h"
+
+class seqCommandBrightenss : public seqCommand
+{
+private:
+
+	float brightness, contrast;
+
+	int outimgid;
+	int inimgid;
+
+	float multiplyv, addv;
+
+	seqImageStorage *ini;
+	seqImageStorage *outi;
+
+public:
+
+
+
+
+
+
+	void set_data(float brightness, float contrast)
+	{
+		this->brightness = brightness;
+		this->contrast = contrast;
+	}
+
+	void set_io_images(int out, int in1)
+	{
+		outimgid = out;
+		inimgid = in1;
+	}
+
+
+
+
+
+	virtual bool is_cpu_treadable()
+	{
+		return true;
+	}
+
+	unsigned int get_implementation(void) const
+	{
+		return SEQ_DEVICE_TYPE_CL | SEQ_DEVICE_TYPE_CPU;
+	}
+
+	int get_number_input(void)
+	{
+		return 1;
+	}
+
+
+	int get_input_id(int imputn)
+	{
+		return -1;
+	}
+
+
+	void prepare(seqDevice *dev, seqBucket *bucket);
+	int exec_gpu(seqDeviceCL *dev, seqBucket *bucket);
+	void exec_slice(seqDeviceCPU *dev, seqBucket * bucket,
+											 size_t ix, size_t iy, size_t ex, size_t ey);
+
+	int get_implementation_devies(void);
+
+	template <class T> void exec_slice_g(seqDeviceCPU *dev, seqBucket * bucket, seqImageStorage *outi,
+															 seqImageStorage *ini, seqImageStorage *in2i, seqImageStorage *in3i,
+										 size_t ix, size_t iy, size_t ex, size_t ey);
+
+
+
+
+
+	void get_element_size(seqBucket * bucket, size_t *size);
+
+
+};
+
+#endif /* __SEQCOMMANDBRIGHTNESS_H__ */




More information about the Bf-blender-cvs mailing list