Package me.kikoqiu.opencl.optflow.util

Source Code of me.kikoqiu.opencl.optflow.util.ScaleFilter

/*------------------------------------------------------------------------
*  Copyright 2012 (c) Kiko Qiu <kikoqiu@163.com>
*
*  This file is part of the OpenclOpticalFlow.
*
*  The OpenclOpticalFlow is free software; you can redistribute it
*  and/or modify it under the terms of the GNU Lesser Public License as
*  published by the Free Software Foundation; either version 2.1 of
*  the License, or (at your option) any later version.
*
*  The OpenclOpticalFlow is distributed in the hope that it will be
*  useful, but WITHOUT ANY WARRANTY; without even the implied warranty
*  of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*  GNU Lesser Public License for more details.
*
*  You should have received a copy of the GNU Lesser Public License
*  along with the OpenclOpticalFlow; if not, write to the Free
*  Software Foundation, Inc., 51 Franklin St, Fifth Floor,
*  Boston, MA  02110-1301  USA
*  http://code.google.com/p/java-opencl-optflow/
*------------------------------------------------------------------------
*/
package me.kikoqiu.opencl.optflow.util;

import java.io.IOException;
import java.util.ArrayList;

import me.kikoqiu.opencl.CLBase;
import me.kikoqiu.opencl.image.IImage2d;
import me.kikoqiu.opencl.image.ImageLumi;

import org.jocl.cl_kernel;
import org.jocl.utils.Kernels;

public class ScaleFilter extends CLBase
  cl_kernel kernel,kernel_v; 
  public ArrayList<IImage2d> outputs;
 
  public ScaleFilter() throws IOException{   
    kernel=Kernels.createFromFile(context, "data/scale.c","filter_h" , "-cl-mad-enable");
    kernel_v=Kernels.createFromFile(context, "data/scale.c","filter_v" , "-cl-mad-enable");
  }
 
  public void init(int w,int h,int minScale,int divider){
    if(outputs!=null){
      return;
    }
    outputs=new ArrayList<IImage2d>();
    while(true){
      int ww=w/divider;
      int hh=h/divider;
      if(ww < minScale || hh < minScale){
        break;
      }
      if(ww*divider!=w || hh*divider!=h){
        break;
      }
      w=ww;h=hh;
      IImage2d img=new ImageLumi();
      img.create(w, h, true);
      outputs.add(img);
    }
  }
 
  public void filter(IImage2d input){
    for(IImage2d output:outputs){
      IImage2d tmp=new ImageLumi();
      tmp.create(output.getWidth(), output.getHeight()*2, true);
     
      Kernels.setArgs(kernel, input.getBuffer(), tmp.getBuffer());     
      exec(kernel,tmp.getWidth(),tmp.getHeight());     
     
     
      Kernels.setArgs(kernel_v, tmp.getBuffer(), output.getBuffer());     
      exec(kernel_v,output.getWidth(),output.getHeight());
     
      tmp.dispose();
     
      input=output;
    }
  } 
 
  public void releaseBuffer(){
    for(IImage2d output:outputs){
      output.dispose();
    }
    outputs=null;
 
 
  public void dispose(){
    releaseBuffer();
    Kernels.release(kernel);
    Kernels.release(kernel_v);
    kernel=null;
    super.dispose();
  }
}
TOP

Related Classes of me.kikoqiu.opencl.optflow.util.ScaleFilter

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.