[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