Android Open Source - Media-Pack Video Effect






From Project

Back to project page Media-Pack.

License

The source code is released under:

Apache License

If you think the Android project Media-Pack listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

//
//               INTEL CORPORATION PROPRIETARY INFORMATION
//  This software is supplied under the terms of a license agreement or
//  nondisclosure agreement with Intel Corporation and may not be copied
//  or disclosed except in accordance with the terms of that agreement.
//        Copyright (c) 2013-2014 Intel Corporation. All Rights Reserved.
////  w ww . j  a va  2 s  .c o m

/*
 * Copyright (C) 2013 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.intel.inde.mp.android.graphics;


import com.intel.inde.mp.IVideoEffect;
import com.intel.inde.mp.domain.Pair;
import com.intel.inde.mp.domain.Resolution;
import com.intel.inde.mp.domain.graphics.IEglUtil;
import com.intel.inde.mp.domain.graphics.Program;
import com.intel.inde.mp.domain.graphics.TextureType;
import com.intel.inde.mp.domain.pipeline.TriangleVerticesCalculator;

import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;

public abstract class VideoEffect implements IVideoEffect {
    protected static final int FLOAT_SIZE_BYTES = 4;
    protected static final int TRIANGLE_VERTICES_DATA_STRIDE_BYTES = 5 * FLOAT_SIZE_BYTES;
    protected static final int TRIANGLE_VERTICES_DATA_POS_OFFSET = 0;
    protected static final int TRIANGLE_VERTICES_DATA_UV_OFFSET = 3;
    protected Resolution inputResolution = new Resolution(0, 0);
    private   Pair<Long, Long> segment = new Pair<Long, Long>(0l, 0l);
    protected IEglUtil eglUtil;
    protected Program eglProgram = new Program();
    // OpenGL handlers
    protected boolean wasStarted;
    protected float[] mvpMatrix = new float[16];
    private FloatBuffer triangleVertices;
    private int angle;
    protected ShaderProgram shaderProgram;
    private boolean fitToContext = true;

    public VideoEffect(int angle, IEglUtil eglUtil) {
        this.angle = angle;
        this.eglUtil = eglUtil;
    }

    protected String getVertexShader() {
        return eglUtil.VERTEX_SHADER;
    }

    protected String getFragmentShader() {
        return eglUtil.FRAGMENT_SHADER_OES;
    }

    @Override
    public Pair<Long, Long> getSegment() {
        return segment;
    }

    @Override
    public void setSegment(Pair<Long, Long> segment) {
        this.segment = segment;
    }

    protected void addEffectSpecific() {
    }

    /**
     * Initializes GL state.  Call this after the encoder EGL surface has been created and made current.
     */
    public void start() {
        triangleVertices = ByteBuffer
                .allocateDirect(TriangleVerticesCalculator.getDefaultTriangleVerticesData().length * FLOAT_SIZE_BYTES)
                .order(ByteOrder.nativeOrder())
                .asFloatBuffer();

        createProgram(getVertexShader(), getFragmentShader());

        eglProgram.programHandle = shaderProgram.getProgramHandle();
        eglProgram.positionHandle = shaderProgram.getAttributeLocation("aPosition");
        eglProgram.textureHandle = shaderProgram.getAttributeLocation("aTextureCoord");
        eglProgram.mvpMatrixHandle = shaderProgram.getAttributeLocation("uMVPMatrix");
        eglProgram.stMatrixHandle = shaderProgram.getAttributeLocation("uSTMatrix");

        wasStarted = true;
    }

    @Override
    public void applyEffect(int inputTextureId, long timeProgress, float[] transformMatrix) {
        if (!wasStarted) {
            start();
        }
        triangleVertices.clear();
        triangleVertices.put(TriangleVerticesCalculator.getDefaultTriangleVerticesData()).position(0);

        eglUtil.drawFrameStart(eglProgram, triangleVertices, mvpMatrix, transformMatrix, angle, TextureType.GL_TEXTURE_EXTERNAL_OES, inputTextureId, inputResolution, fitToContext);
        addEffectSpecific();
        eglUtil.drawFrameFinish();
    }

    @Override
    public void setInputResolution(Resolution resolution) {
        inputResolution = resolution;
    }

    @Override
    public boolean fitToCurrentSurface(boolean should) {
        boolean toRet = fitToContext;
        fitToContext = should;
        return toRet;
    }

    protected int createProgram(String vertexSource, String fragmentSource) {
        shaderProgram = new ShaderProgram(eglUtil);
        shaderProgram.create(vertexSource, fragmentSource);
        return shaderProgram.getProgramHandle();
    }

    protected void checkGlError(String component) {
        eglUtil.checkEglError(component);
    }

    protected void checkGlError() {
        eglUtil.checkEglError("VideoEffect");
    }
}




Java Source Code List

com.intel.inde.mp.android.graphics.EglUtil.java
com.intel.inde.mp.android.graphics.FrameBuffer.java
com.intel.inde.mp.android.graphics.FullFrameTexture.java
com.intel.inde.mp.android.graphics.ShaderProgram.java
com.intel.inde.mp.android.graphics.VideoEffect.java
com.intel.inde.mp.effects.AudioEffect.java
com.intel.inde.mp.effects.AudioReader.java
com.intel.inde.mp.effects.GrayScaleEffect.java
com.intel.inde.mp.effects.InverseEffect.java
com.intel.inde.mp.effects.JpegSubstituteEffect.java
com.intel.inde.mp.effects.OverlayEffect.java
com.intel.inde.mp.effects.RotateEffect.java
com.intel.inde.mp.effects.SepiaEffect.java
com.intel.inde.mp.effects.SubstituteAudioEffect.java
com.intel.inde.mp.effects.TextOverlayEffect.java
com.intel.inde.mp.samples.ActivityWithTimeline.java
com.intel.inde.mp.samples.CameraCapturerActivity.java
com.intel.inde.mp.samples.CameraStreamerActivity.java
com.intel.inde.mp.samples.ComposerAudioEffectActivity.java
com.intel.inde.mp.samples.ComposerAudioEffectCoreActivity.java
com.intel.inde.mp.samples.ComposerCutActivity.java
com.intel.inde.mp.samples.ComposerCutCoreActivity.java
com.intel.inde.mp.samples.ComposerJoinActivity.java
com.intel.inde.mp.samples.ComposerJoinCoreActivity.java
com.intel.inde.mp.samples.ComposerMediaFileInfoActivity.java
com.intel.inde.mp.samples.ComposerMediaFileInfoCoreActivity.java
com.intel.inde.mp.samples.ComposerTranscodeActivity.java
com.intel.inde.mp.samples.ComposerTranscodeCoreActivity.java
com.intel.inde.mp.samples.ComposerVideoEffectActivity.java
com.intel.inde.mp.samples.ComposerVideoEffectCoreActivity.java
com.intel.inde.mp.samples.DemoListAdapter.java
com.intel.inde.mp.samples.DemoListItem.java
com.intel.inde.mp.samples.ExpandableSamplesListAdapter.java
com.intel.inde.mp.samples.FPSCounter.java
com.intel.inde.mp.samples.Format.java
com.intel.inde.mp.samples.GameCapturing.java
com.intel.inde.mp.samples.GameRenderer.java
com.intel.inde.mp.samples.GameStreaming.java
com.intel.inde.mp.samples.MediaStreamerActivity.java
com.intel.inde.mp.samples.MediaStreamerCoreActivity.java
com.intel.inde.mp.samples.RecognitionActivity.java
com.intel.inde.mp.samples.SamplesMainActivity.java
com.intel.inde.mp.samples.VideoCapture.java
com.intel.inde.mp.samples.VideoPlayerActivity.java
com.intel.inde.mp.samples.VideoStreamPlayerActivity.java
com.intel.inde.mp.samples.controls.CameraCaptureSettingsPopup.java
com.intel.inde.mp.samples.controls.GameGLSurfaceView.java
com.intel.inde.mp.samples.controls.PlaybackToolbar.java
com.intel.inde.mp.samples.controls.PopupMessage.java
com.intel.inde.mp.samples.controls.Popup.java
com.intel.inde.mp.samples.controls.RangeSelector.java
com.intel.inde.mp.samples.controls.TimelineItem.java
com.intel.inde.mp.samples.controls.TranscodeSurfaceView.java
com.intel.inde.mp.samples.controls.VideoPlayer.java