Skip to content

Instantly share code, notes, and snippets.

public void createOnGlThread() {
// 1 texture to hold the video frame.
int textures[] = new int[1];
GLES20.glGenTextures(1, textures, 0);
mTextureId = textures[0];
int mTextureTarget = GLES11Ext.GL_TEXTURE_EXTERNAL_OES;
GLES20.glBindTexture(mTextureTarget, mTextureId);
GLES20.glTexParameteri(mTextureTarget, GLES20.GL_TEXTURE_MIN_FILTER,
@BALUSANGEM
BALUSANGEM / HelloARActivity_modifiedforVideo.java
Last active June 14, 2018 13:37
Using this activity and ViewRenderer.java you can play video in ARCore scene
public class HelloArActivity extends AppCompatActivity implements GLSurfaceView.Renderer {
private static final String TAG = HelloArActivity.class.getSimpleName();
// Rendering. The Renderers are created here, and initialized when the GL surface is created.
private GLSurfaceView surfaceView;
private boolean installRequested;
private final VideoRenderer videoRenderer = new VideoRenderer();
val listener = ImageDecoder.OnHeaderDecodedListener { decoder, imageinfo, source ->
decoder.setTargetSize(100, 100)
//you can use setTargetSampleSize(2) to create a image with half of original height and width
}
val drawable = ImageDecoder.decodeDrawable(source, listener);
val source = ImageDecoder.createSource(assets, "image.jpg")
val listener = ImageDecoder.OnHeaderDecodedListener { decoder, info, src ->
decoder.setPostProcessor { canvas ->
// This will create rounded corners.
val path = Path()
path.fillType = Path.FillType.INVERSE_EVEN_ODD
val width = canvas.width
val height = canvas.height
path.addRoundRect(0f, 0f, width.toFloat(), height.toFloat(), width / 2.toFloat(), height / 2.toFloat(), Path.Direction.CW)
val paint = Paint()
@BALUSANGEM
BALUSANGEM / ViewRenderer.java
Created June 14, 2018 12:36
This class renders video in ARCore, So you can use this gist to play Videos inside ARCore Scene
public class VideoRenderer implements SurfaceTexture.OnFrameAvailableListener {
private SurfaceTexture videoTexture;
private int mTextureId;
private static final int TEXCOORDS_PER_VERTEX = 2;
private static final int COORDS_PER_VERTEX = 3;
private String TAG = VideoRenderer.class.getSimpleName();
private int mQuadProgram;
private final Object lock = new Object();
class MainActivity : AppCompatActivity() {
val TAG = MainActivity::class.java.simpleName
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val handler = Handler(Looper.getMainLooper())
Log.d(TAG, "Before post delayed:${System.currentTimeMillis()}")
handler.postDelayed(
{