package com.laifeng.sopcastsdk.ui;
import android.annotation.TargetApi;
import android.content.Context;
import android.opengl.GLSurfaceView;
import android.os.Build;
import android.util.AttributeSet;
import android.view.SurfaceHolder;
import com.laifeng.sopcastsdk.constant.SopCastConstant;
import com.laifeng.sopcastsdk.camera.CameraHolder;
import com.laifeng.sopcastsdk.utils.SopCastLog;
import com.laifeng.sopcastsdk.video.MyRenderer;
import com.laifeng.sopcastsdk.video.effect.Effect;
/**
* @Title: RenderSurfaceView
* @Package com.laifeng.sopcastsdk.ui
* @Description:
* @Author Jim
* @Date 16/9/18
* @Time 下午5:12
* @Version
*/
public class RenderSurfaceView extends GLSurfaceView {
private MyRenderer mRenderer;
public RenderSurfaceView(Context context) {
super(context);
init();
}
public RenderSurfaceView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
private void init() {
mRenderer = new MyRenderer(this);
setEGLContextClientVersion(2);
setRenderer(mRenderer);
setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
SurfaceHolder surfaceHolder = getHolder();
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
surfaceHolder.addCallback(mSurfaceHolderCallback);
}
public MyRenderer getRenderer() {
return mRenderer;
}
private SurfaceHolder.Callback mSurfaceHolderCallback = new SurfaceHolder.Callback() {
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
SopCastLog.d(SopCastConstant.TAG, "SurfaceView destroy");
CameraHolder.instance().stopPreview();
CameraHolder.instance().releaseCamera();
}
@TargetApi(Build.VERSION_CODES.GINGERBREAD)
@Override
public void surfaceCreated(SurfaceHolder holder) {
SopCastLog.d(SopCastConstant.TAG, "SurfaceView created");
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
SopCastLog.d(SopCastConstant.TAG, "SurfaceView width:" + width + " height:" + height);
}
};
public void setEffect(final Effect effect) {
this.queueEvent(new Runnable() {
@Override
public void run() {
if (null != mRenderer) {
mRenderer.setEffect(effect);
}
}
});
}
}