// Path: parsingplayer/src/main/java/com/hustunique/parsingplayer/util/LogUtil.java
// public class LogUtil {
//     public static void e(String tag, String msg) {
//         if (BuildConfig.DEBUG) {
//             Log.e(tag, msg);
//         }
//     }
// 
//     public static void e(String tag, String msg, Throwable e) {
//         if (BuildConfig.DEBUG) {
//             Log.e(tag, msg, e);
//         }
//     }
// 
//     public static void d(String tag, String msg) {
//         if (BuildConfig.DEBUG) {
//             Log.d(tag, msg);
//         }
//     }
// 
//     public static void d(String tag, String msg, Throwable e) {
//         if (BuildConfig.DEBUG) {
//             Log.d(tag, msg, e);
//         }
//     }
// 
//     public static void v(String tag, String msg) {
//         Log.v(tag, msg);
//     }
// 
//     public static void v(String tag, String msg, Throwable e) {
//         Log.v(tag, msg, e);
//     }
// 
//     public static void i(String tag, String msg) {
//         Log.i(tag, msg);
//     }
// 
//     public static void i(String tag, String msg, Throwable e) {
//         Log.i(tag, msg, e);
//     }
// 
//     public static void wtf(String tag, String msg) {
//         if (BuildConfig.DEBUG) {
//             Log.wtf(tag, msg);
//         }
//     }
// 
//     public static void wtf(String tag, String msg, Throwable e) {
//         if (BuildConfig.DEBUG) {
//             Log.wtf(tag, msg, e);
//         }
//     }
// 
//     public static void wtf(String tag, Throwable e) {
//         if (BuildConfig.DEBUG) {
//             Log.wtf(tag, e);
//         }
//     }
// 
//     public static void w(String tag, String msg) {
//         Log.w(tag, msg);
//     }
// 
//     public static void w(String tag, String msg, Throwable e) {
//         Log.w(tag, msg, e);
//     }
// 
// }


import android.graphics.Bitmap;
import android.graphics.SurfaceTexture;
import android.opengl.GLES20;
import android.opengl.GLU;
import android.opengl.GLUtils;
import android.os.Build;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Message;
import android.support.annotation.WorkerThread;
import android.util.Log;
import com.hustunique.parsingplayer.util.LogUtil;
import java.lang.ref.WeakReference;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import javax.microedition.khronos.egl.EGL10;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.egl.EGLContext;
import javax.microedition.khronos.egl.EGLDisplay;
import javax.microedition.khronos.egl.EGLSurface;
import static android.os.Process.THREAD_PRIORITY_BACKGROUND;
            bitmap.recycle();
        }
        checkGLESError("tex image 2d");
        return textures[0];
    }

    private int createShader(int shaderType, String shaderString) {
        int shader = GLES20.glCreateShader(shaderType);
        if (shader == 0) {
            checkGLESError("create shader " + shaderType);
        }

        GLES20.glShaderSource(shader, shaderString);
        GLES20.glCompileShader(shader);
        int[] compiled = new int[1];
        GLES20.glGetShaderiv(shader, GLES20.GL_COMPILE_STATUS, compiled, 0);
        if (compiled[0] == 0) {
            GLES20.glDeleteShader(shader);
            checkGLESError("compile shader " + shaderType);
        }
        return shader;
    }



    void render(Bitmap bitmap, boolean recycled, SurfaceTexture surfaceTexture) {
        mNativeWindow = new WeakReference<>(surfaceTexture);
        Message msg = mWorker.obtainMessage();
        msg.obj = bitmap;
        msg.arg1 = recycled ? 1 : 0;
// Path: parsingplayer/src/main/java/com/hustunique/parsingplayer/util/LogUtil.java
// public class LogUtil {
//     public static void e(String tag, String msg) {
//         if (BuildConfig.DEBUG) {
//             Log.e(tag, msg);
//         }
//     }
// 
//     public static void e(String tag, String msg, Throwable e) {
//         if (BuildConfig.DEBUG) {
//             Log.e(tag, msg, e);
//         }
//     }
// 
//     public static void d(String tag, String msg) {
//         if (BuildConfig.DEBUG) {
//             Log.d(tag, msg);
//         }
//     }
// 
//     public static void d(String tag, String msg, Throwable e) {
//         if (BuildConfig.DEBUG) {
//             Log.d(tag, msg, e);
//         }
//     }
// 
//     public static void v(String tag, String msg) {
//         Log.v(tag, msg);
//     }
// 
//     public static void v(String tag, String msg, Throwable e) {
//         Log.v(tag, msg, e);
//     }
// 
//     public static void i(String tag, String msg) {
//         Log.i(tag, msg);
//     }
// 
//     public static void i(String tag, String msg, Throwable e) {
//         Log.i(tag, msg, e);
//     }
// 
//     public static void wtf(String tag, String msg) {
//         if (BuildConfig.DEBUG) {
//             Log.wtf(tag, msg);
//         }
//     }
// 
//     public static void wtf(String tag, String msg, Throwable e) {
//         if (BuildConfig.DEBUG) {
//             Log.wtf(tag, msg, e);
//         }
//     }
// 
//     public static void wtf(String tag, Throwable e) {
//         if (BuildConfig.DEBUG) {
//             Log.wtf(tag, e);
//         }
//     }
// 
//     public static void w(String tag, String msg) {
//         Log.w(tag, msg);
//     }
// 
//     public static void w(String tag, String msg, Throwable e) {
//         Log.w(tag, msg, e);
//     }
// 
// }


// Path: parsingplayer/src/main/java/com/hustunique/parsingplayer/player/media/VideoRenderThread.java
import android.graphics.Bitmap;
import android.graphics.SurfaceTexture;
import android.opengl.GLES20;
import android.opengl.GLU;
import android.opengl.GLUtils;
import android.os.Build;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Message;
import android.support.annotation.WorkerThread;
import android.util.Log;
import com.hustunique.parsingplayer.util.LogUtil;
import java.lang.ref.WeakReference;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import javax.microedition.khronos.egl.EGL10;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.egl.EGLContext;
import javax.microedition.khronos.egl.EGLDisplay;
import javax.microedition.khronos.egl.EGLSurface;
import static android.os.Process.THREAD_PRIORITY_BACKGROUND;

            bitmap.recycle();
        }
        checkGLESError("tex image 2d");
        return textures[0];
    }

    private int createShader(int shaderType, String shaderString) {
        int shader = GLES20.glCreateShader(shaderType);
        if (shader == 0) {
            checkGLESError("create shader " + shaderType);
        }

        GLES20.glShaderSource(shader, shaderString);
        GLES20.glCompileShader(shader);
        int[] compiled = new int[1];
        GLES20.glGetShaderiv(shader, GLES20.GL_COMPILE_STATUS, compiled, 0);
        if (compiled[0] == 0) {
            GLES20.glDeleteShader(shader);
            checkGLESError("compile shader " + shaderType);
        }
        return shader;
    }



    void render(Bitmap bitmap, boolean recycled, SurfaceTexture surfaceTexture) {
        mNativeWindow = new WeakReference<>(surfaceTexture);
        Message msg = mWorker.obtainMessage();
        msg.obj = bitmap;
        msg.arg1 = recycled ? 1 : 0;
        LogUtil.v(TAG, "send rending message : " + msg);