androidvideofilteringrecording

How to add filter on video in android..?


How to add filtering on video while recording and after saved too in android..?

mediaRecorder = new MediaRecorder();

mCamera.unlock();
mediaRecorder.setCamera(mCamera);

mediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);

mediaRecorder.setProfile(
    CamcorderProfile.get(CamcorderProfile.QUALITY_LOW)
);
mediaRecorder.setVideoEncodingBitRate(6000000);

demoVideoFolder = Environment.getExternalStorageDirectory().getAbsolutePath() + "/videokit/";
demoVideoPath = demoVideoFolder + "in.mp4";

File storagePath2 = new File(demoVideoFolder);
storagePath2.mkdir();

mediaRecorder.setOutputFile("/sdcard/videokit/in.mp4");
rotateBackVideo(mediaRecorder);

try {
    mediaRecorder.prepare();
} catch (IllegalStateException e) {
    releaseMediaRecorder();    
} catch (IOException e) {
    releaseMediaRecorder();    
}

I want to add multiple filter in my video while recording using MediaRecorder and also add filter after saved video. How can achieved second scenario..?


Solution

  • public class CameraPreview1 extends SurfaceView implements SurfaceHolder.Callback {
        private SurfaceHolder mHolder;
        private Camera mCamera;
        String filter_effect;
    
        public CameraPreview1(Context context, Camera camera) {
            super(context);
            mCamera = camera;
            mHolder = getHolder();
            mHolder.addCallback(this);
            // deprecated setting, but required on Android versions prior to 3.0
            mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
        }
    
        public void surfaceCreated(SurfaceHolder holder) {
            try {
                // create the surface and start camera preview
                if (mCamera == null) {
                    mCamera.setPreviewDisplay(holder);
                    mCamera.startPreview();
                }
            } catch (IOException e) {
                Log.d(VIEW_LOG_TAG, "Error setting camera preview: " + e.getMessage());
            }
        }
    
        @SuppressWarnings("deprecation")
        public void refreshCamera(Camera camera,String effect) {
            filter_effect=effect;
            if (mHolder.getSurface() == null) {
                // preview surface does not exist
                return;
            }
            // stop preview before making changes
            try {
                mCamera.stopPreview();
            } catch (Exception e) {
                // ignore: tried to stop a non-existent preview
            }
            // set preview size and make any resize, rotate or
            // reformatting changes here
            // start preview with new settings
            setCamera(camera);
            try {
                Camera.Parameters params = mCamera.getParameters();
                if(filter_effect.equals("none"))
                {
                   params.setColorEffect(Camera.Parameters.EFFECT_NONE);
                }
                else if(filter_effect.equals("mono"))
                {
                   params.setColorEffect(Camera.Parameters.EFFECT_MONO);
                }
                else if(filter_effect.equals("negative"))
                {
                   params.setColorEffect(Camera.Parameters.EFFECT_NEGATIVE);
                }
                else if(filter_effect.equals("solarize"))
                {
                   params.setColorEffect(Camera.Parameters.EFFECT_SOLARIZE);
                }
                else if(filter_effect.equals("sepia"))
                {
                   params.setColorEffect(Camera.Parameters.EFFECT_SEPIA);
                }
                else if(filter_effect.equals("posterize"))
                {
                   params.setColorEffect(Camera.Parameters.EFFECT_POSTERIZE);
                }
                else if(filter_effect.equals("whiteboard"))
                {
                   params.setColorEffect(Camera.Parameters.EFFECT_WHITEBOARD);
                }
                else if(filter_effect.equals("blackboard"))
                {
                    params.setColorEffect(Camera.Parameters.EFFECT_BLACKBOARD);
                }
                else if(filter_effect.equals("aqua"))
                {
                    params.setColorEffect(Camera.Parameters.EFFECT_AQUA);
                }
                mCamera.setParameters(params);
                mCamera.setPreviewDisplay(mHolder);
    
                mCamera.setDisplayOrientation(90);
                mCamera.startPreview();
            } catch (Exception e) {
                Log.d(VIEW_LOG_TAG, "Error starting camera preview: " + e.getMessage());
            }
        }
    
        public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
    
            refreshCamera(mCamera,filter_effect);
        }
    
        public void setCamera(Camera camera) {
            //method to set a camera instance
            mCamera = camera;
             Camera.Parameters params = camera.getParameters();
                if (params.getSupportedFocusModes().contains(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE)) {
                    params.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
                } else {
                    //Choose another supported mode
                }
                camera.setParameters(params);
        }
    
        @Override
        public void surfaceDestroyed(SurfaceHolder holder) {
            // TODO Auto-generated method stub
            // mCamera.release();
    
        }
    }
    
    
    Class mainActivity
    
    package com.wlc.primetime.camera;
    
    import io.vov.utils.Log;
    
    import java.io.File;
    import java.io.IOException;
    
    //import com.google.android.gms.internal.lv;
    import com.netcompss.ffmpeg4android.GeneralUtils;
    import com.netcompss.ffmpeg4android.Prefs;
    import com.netcompss.loader.LoadJNI;
    import com.wlc.primetime.R;
    import com.wlc.primetime.Events.EventCreateActivity;
    import com.wlc.primetime.Events.EventDetailActivity;
    import com.wlc.primetime.campus.PostMemoriesActivity2;
    import com.wlc.primetime.campus.PostMemoriesActivity3;
    import com.wlc.primetime.utils.Common;
    
    import android.app.Activity;
    import android.app.ProgressDialog;
    import android.content.Context;
    import android.content.Intent;
    import android.content.pm.PackageManager;
    import android.database.Cursor;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.graphics.Color;
    import android.hardware.Camera;
    import android.hardware.Camera.CameraInfo;
    import android.media.CamcorderProfile;
    import android.media.MediaRecorder;
    import android.os.AsyncTask;
    import android.os.Bundle;
    import android.os.Environment;
    import android.os.Handler;
    import android.os.PowerManager;
    import android.os.PowerManager.WakeLock;
    import android.provider.MediaStore;
    import android.util.TypedValue;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.view.WindowManager;
    import android.widget.Button;
    import android.widget.ImageView;
    import android.widget.LinearLayout;
    import android.widget.RadioButton;
    import android.widget.RadioGroup;
    import android.widget.RelativeLayout;
    import android.widget.TextView;
    import android.widget.RadioGroup.OnCheckedChangeListener;
    import android.widget.Toast;
    
    public class main_activity extends Activity implements OnClickListener {
        private Camera mCamera;
        private CameraPreview1 mPreview;
        private MediaRecorder mediaRecorder;
        private Button capture, switchCamera;
        private Context myContext;
        private LinearLayout cameraPreview;
        private boolean cameraFront = false;
        RadioGroup rg_filter;
        RadioButton rg_none, rg_mono, rg_negative;
        private TextView tv_appHeader_right = null, tv_timer = null,
                tv_appHeader_left = null, tv_camera_flash = null,
                tv_camera_video = null, tv_camera_capture;
        private ImageView iv_camera_change = null, iv_camera_gallery = null;
        String effect;
        int count = 0;
        Runnable r = null;
        ImageView iv_header_left;
        ImageView iv_appHeader_title;
        String camera_state;
        String workFolder = null;
        String demoVideoFolder = null;
        String demoVideoPath = null;
        String vkLogPath = null;
        private boolean commandValidationFailedFlag = false;
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.video_preview_main);
            getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
    
            count = 0;
            View customHeaderView = Common
                    .getActionBarCustomView(video_preview_post.this);
    
            iv_header_left = (ImageView) customHeaderView
                    .findViewById(R.id.iv_header_left);
            iv_header_left.setImageResource(R.drawable.ic_back);
            iv_header_left.setVisibility(View.VISIBLE);
            iv_header_left.setOnClickListener(new View.OnClickListener() {
    
                @Override
                public void onClick(View v) {
                    finish();
                }
            });
    
            ImageView iv_header_right = (ImageView) customHeaderView
                    .findViewById(R.id.iv_header_right);
            iv_header_right.setImageResource(R.drawable.ic_profile_poster_edit);
            iv_header_right.setOnClickListener(new View.OnClickListener() {
    
                @Override
                public void onClick(View v) {
    
                }
            });
    
            iv_appHeader_title = (ImageView) customHeaderView
                    .findViewById(R.id.iv_header_title);
            iv_appHeader_title.setImageResource(R.drawable.ic_camera_change);
            iv_appHeader_title.setOnClickListener(new OnClickListener() {
    
                @Override
                public void onClick(View v) {
    
                    if (!recording) {
                        int camerasNumber = Camera.getNumberOfCameras();
                        if (camerasNumber > 1) {
                            // release the old camera instance
                            // switch camera, from the front and the back and vice
                            // versa
    
                            releaseCamera();
                            chooseCamera();
                        } else {
                            Toast toast = Toast.makeText(myContext,
                                    "Sorry, your phone has only one camera!",
                                    Toast.LENGTH_LONG);
                            toast.show();
                        }
                    }
    
                }
            });
    
            Intent in = getIntent();
            effect = in.getStringExtra("effect");
    
            iv_camera_gallery = (ImageView) findViewById(R.id.iv_camera_gallery);
    
            tv_timer = (TextView) findViewById(R.id.tv_timer);
            tv_camera_capture = (TextView) findViewById(R.id.tv_camera_capture);
            tv_camera_capture.setTextSize(TypedValue.COMPLEX_UNIT_SP, 35);
            tv_camera_video = (TextView) findViewById(R.id.tv_camera_video);
            tv_camera_video.setTextSize(TypedValue.COMPLEX_UNIT_SP, 45);
            // set last taken image from gallery
            setLastTakenImage(iv_camera_gallery);
    
            iv_camera_gallery.setOnClickListener(this);
            tv_camera_capture.setOnClickListener(this);
            tv_camera_video.setOnClickListener(this);
    
            Common.setAwasomeFontFamily(this, tv_camera_video);
            Common.setAwasomeFontFamily(this,
                    (TextView) findViewById(R.id.tv_camera_capture));
    
            int screenWidth = Common.getScreenWidth(this);
    
            cameraPreview = (LinearLayout) findViewById(R.id.camera_preview_ll);
    
            myContext = this;
            initialize();
        }
    
        private int findFrontFacingCamera() {
            camera_state = "front";
            int cameraId = -1;
            // Search for the front facing camera
            int numberOfCameras = Camera.getNumberOfCameras();
            for (int i = 0; i < numberOfCameras; i++) {
                CameraInfo info = new CameraInfo();
                Camera.getCameraInfo(i, info);
                if (info.facing == CameraInfo.CAMERA_FACING_FRONT) {
                    cameraId = i;
                    cameraFront = true;
                    break;
                }
            }
            return cameraId;
        }
    
        private int findBackFacingCamera() {
            camera_state = "back";
            int cameraId = -1;
            // Search for the back facing camera
            // get the number of cameras
            int numberOfCameras = Camera.getNumberOfCameras();
            // for every camera check
            for (int i = 0; i < numberOfCameras; i++) {
                CameraInfo info = new CameraInfo();
                Camera.getCameraInfo(i, info);
                if (info.facing == CameraInfo.CAMERA_FACING_BACK) {
                    cameraId = i;
                    cameraFront = false;
                    break;
                }
            }
            return cameraId;
        }
    
        public void onResume() {
            super.onResume();
            if (!hasCamera(myContext)) {
                Toast toast = Toast.makeText(myContext,
                        "Sorry, your phone does not have a camera!",
                        Toast.LENGTH_LONG);
                toast.show();
                finish();
            }
            if (mCamera == null) {
                // if the front facing camera does not exist
                if (findFrontFacingCamera() < 0) {
                    Toast.makeText(this, "No front facing camera found.",
                            Toast.LENGTH_LONG).show();
                    switchCamera.setVisibility(View.GONE);
                }
                mCamera = Camera.open(findBackFacingCamera());
                mPreview.refreshCamera(mCamera, effect);
            }
        }
    
        public void initialize() {
            // cameraPreview = (LinearLayout) findViewById(R.id.camera_preview_ll);
    
            mPreview = new CameraPreview1(myContext, mCamera);
            // mPreview.setRotation(90);
            cameraPreview.addView(mPreview);
        }
    
        public void chooseCamera() {
            // if the camera preview is the front
            if (cameraFront) {
                int cameraId = findBackFacingCamera();
                if (cameraId >= 0) {
                    // open the backFacingCamera
                    // set a picture callback
                    // refresh the preview
    
                    mCamera = Camera.open(cameraId);
                    // mPicture = getPictureCallback();
                    mPreview.refreshCamera(mCamera, effect);
                }
            } else {
                int cameraId = findFrontFacingCamera();
                if (cameraId >= 0) {
                    // open the backFacingCamera
                    // set a picture callback
                    // refresh the preview
    
                    mCamera = Camera.open(cameraId);
                    // mPicture = getPictureCallback();
                    mPreview.refreshCamera(mCamera, effect);
                }
            }
        }
    
        @Override
        protected void onPause() {
            super.onPause();
            // when on Pause, release camera in order to be used from other
            // applications
            releaseCamera();
        }
    
        private boolean hasCamera(Context context) {
            // check if the device has camera
            if (context.getPackageManager().hasSystemFeature(
                    PackageManager.FEATURE_CAMERA)) {
                return true;
            } else {
                return false;
            }
        }
    
        boolean recording = false;
    
        private void releaseMediaRecorder() {
            if (mediaRecorder != null) {
                mediaRecorder.reset(); // clear recorder configuration
                mediaRecorder.release(); // release the recorder object
                mediaRecorder = null;
                mCamera.lock(); // lock camera for later use
            }
        }
    
        private boolean prepareMediaRecorder() {
    
            mediaRecorder = new MediaRecorder();
    
            mCamera.unlock();
            mediaRecorder.setCamera(mCamera);
    
            mediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
            mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
    
            mediaRecorder.setProfile(CamcorderProfile
                    .get(CamcorderProfile.QUALITY_LOW));
            // mediaRecorder.setVideoEncodingBitRate(690000);
            mediaRecorder.setVideoEncodingBitRate(6000000);
            // mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
            // mediaRecorder.setOutputFile("/sdcard/Movie.mp4");
    
            demoVideoFolder = Environment.getExternalStorageDirectory()
                    .getAbsolutePath() + "/videokit/";
            demoVideoPath = demoVideoFolder + "in.mp4";
            // Toast.makeText(getApplicationContext(), ""+demoVideoFolder,
            // 56).show();
    
            File storagePath2 = new File(demoVideoFolder);
            storagePath2.mkdir();
    
            mediaRecorder.setOutputFile("/sdcard/videokit/in.mp4");
            rotateBackVideo(mediaRecorder);
    
            try {
                mediaRecorder.prepare();
            } catch (IllegalStateException e) {
                releaseMediaRecorder();
    
            } catch (IOException e) {
                releaseMediaRecorder();
    
            }
    
            return true;
    
        }
    
        private void releaseCamera() {
            // stop and release camera
            if (mCamera != null) {
                mCamera.release();
                mCamera = null;
            }
        }
    
        private void setLastTakenImage(ImageView iv_gallary_picker) {
            String[] projection = new String[] {
                    MediaStore.Images.ImageColumns._ID,
                    MediaStore.Images.ImageColumns.DATA,
                    MediaStore.Images.ImageColumns.BUCKET_DISPLAY_NAME,
                    MediaStore.Images.ImageColumns.DATE_TAKEN,
                    MediaStore.Images.ImageColumns.MIME_TYPE };
            final Cursor cursor = getApplicationContext().getContentResolver()
                    .query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                            projection, null, null,
                            MediaStore.Images.ImageColumns.DATE_TAKEN + " DESC");
    
            // Put it in the image view
            if (cursor.moveToFirst()) {
                String imageLocation = cursor.getString(1);
                File imageFile = new File(imageLocation);
                if (imageFile.exists()) {
                    Bitmap bm = BitmapFactory.decodeFile(imageLocation);
                    iv_gallary_picker.setImageBitmap(bm);
                }
            }
        }
    
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            if (v.getId() == R.id.tv_camera_video) {
                if (count == 0) {
                    iv_header_left.setEnabled(false);
                    iv_appHeader_title.setEnabled(false);
                    tv_camera_capture.setVisibility(View.GONE);
                    iv_camera_gallery.setVisibility(View.GONE);
                    tv_camera_video.setTextColor(Color.RED);
    
                    count = 1;
                    tv_timer.setVisibility(View.VISIBLE);
                    if (count != 11) {
                        tv_timer.setText("00:00:" + count);
                    }
    
                    {
                        if (!prepareMediaRecorder()) {
                            Toast.makeText(video_preview_post.this,
                                    "Fail in prepareMediaRecorder()!\n - Ended -",
                                    Toast.LENGTH_LONG).show();
                            finish();
                        }
    
                        final Handler handler = new Handler();
    
                        r = new Runnable() {
                            public void run() {
                                // tv.append("Hello World");
                                Log.d("count" + count, "ok...");
                                if (count > 11) {
    
                                    if (mediaRecorder != null) {
    
                                        // count=0;01
                                        try {
                                            mediaRecorder.stop(); // stop the
                                                                    // recording
                                            releaseMediaRecorder();
                                            handler.removeCallbacks(r);
    
                                            workFolder = getApplicationContext()
                                                    .getFilesDir()
                                                    .getAbsolutePath()
                                                    + "/";
                                            Log.i(Prefs.TAG,
                                                    "workFolder (license and logs location) path: "
                                                            + workFolder);
                                            vkLogPath = workFolder + "vk.log";
                                            Log.i(Prefs.TAG,
                                                    "vk log (native log) path: "
                                                            + vkLogPath);
    
                                            GeneralUtils
                                                    .copyLicenseFromAssetsToSDIfNeeded(
                                                            video_preview_post.this,
                                                            workFolder);
                                            GeneralUtils
                                                    .copyDemoVideoFromAssetsToSDIfNeeded(
                                                            video_preview_post.this,
                                                            demoVideoFolder);
                                            int rc = GeneralUtils.isLicenseValid(
                                                    getApplicationContext(),
                                                    workFolder);
    
                                            if (GeneralUtils
                                                    .checkIfFileExistAndNotEmpty(demoVideoPath)) {
                                                new TranscdingBackground(
                                                        video_preview_post.this)
                                                        .execute();
                                            } else {
                                                Toast.makeText(
                                                        getApplicationContext(),
                                                        demoVideoPath
                                                                + " not found",
                                                        Toast.LENGTH_LONG).show();
                                            }
    
                                        } catch (Exception e) {
                                            // handler.removeCallbacks(r);
                                            // Intent in =new
                                            // Intent(getApplicationContext(),
                                            // PostMemoriesActivity3.class);
                                            // in.putExtra("PATH_MEMORIES_IMG",
                                            // "video");
                                        }
    
                                    }
                                }
                                if (count <= 10) {
                                    tv_timer.setText("00:00:" + count);
                                }
                                count++;
                                handler.postDelayed(this, 1000);
                            }
                        };
    
                        if (count == 1) {
                            mediaRecorder.start();
                        }
                        handler.postDelayed(r, 0);
    
                        recording = true;
                    }
                }
            } else if (R.id.tv_camera_capture == v.getId()) {
                Intent in = new Intent(getApplicationContext(),
                        CameraFragmentActivity.class);
                startActivity(in);
            }
        }
    
        public MediaRecorder rotateBackVideo(MediaRecorder mMediaRecorder) {
    
            /**
             * Define Orientation of video in here, if in portrait mode, use value =
             * 90, if in landscape mode, use value = 0
             */
    
            int rotation = 0;
    
            if (camera_state.equals("back")) {
                rotation = 0;
                // Toast.makeText(getApplicationContext(), "front", 45).show();
            } else {
                rotation = 180;
                // Toast.makeText(getApplicationContext(), "back", 45).show();
            }
    
            switch (rotation) {
            case 0:
                mMediaRecorder.setOrientationHint(90);
                break;
            case 90:
                mMediaRecorder.setOrientationHint(180);
                break;
            case 180:
                mMediaRecorder.setOrientationHint(270);
                break;
            case 270:
                mMediaRecorder.setOrientationHint(0);
                break;
            }
    
            return mMediaRecorder;
        }
    
        @Override
        public void onBackPressed() {
            // TODO Auto-generated method stub
            Intent in = new Intent(getApplicationContext(),
                    CameraFragmentActivity.class);
            finish();
            startActivity(in);
    
            // super.onBackPressed();
        }
    
        class TranscdingBackground extends AsyncTask<String, Integer, Integer> {
    
            ProgressDialog progressDialog;
            Activity _act;
    
            public TranscdingBackground(Activity act) {
                _act = act;
            }
    
            @Override
            protected void onPreExecute() {
                progressDialog = new ProgressDialog(_act);
                progressDialog.setMessage("Compressing...");
                progressDialog.show();
    
            }
    
            protected Integer doInBackground(String... paths) {
                Log.i(Prefs.TAG, "doInBackground started...");
    
                // delete previous log
                GeneralUtils.deleteFileUtil(workFolder + "/vk.log");
    
                PowerManager powerManager = (PowerManager) _act
                        .getSystemService(Activity.POWER_SERVICE);
                WakeLock wakeLock = powerManager.newWakeLock(
                        PowerManager.PARTIAL_WAKE_LOCK, "VK_LOCK");
                Log.d(Prefs.TAG, "Acquire wake lock");
                wakeLock.acquire();
    
                // /////////// Set Command using code (overriding the UI EditText)
                // /////
                String commandStr = "ffmpeg -y -i /sdcard/videokit/in.mp4 -strict experimental -s 320x240 -r 30 -aspect 3:4 -ab 48000 -ac 2 -ar 22050 -vcodec mpeg4 -b 2097152 /sdcard/videokit/Movie.mp4";// videokit/
                // String[] complexCommand = {"ffmpeg", "-y" ,"-i",
                // "/sdcard/videokit/in.mp4","-strict","experimental","-s",
                // "160x120","-r","25", "-vcodec", "mpeg4", "-b", "150k",
                // "-ab","48000", "-ac", "2", "-ar", "22050",
                // "/sdcard/videokit/out.mp4"};
                // /////////////////////////////////////////////////////////////////////
    
                LoadJNI vk = new LoadJNI();
                try {
    
                    // complex command
                    // vk.run(complexCommand, workFolder, getApplicationContext());
    
                    vk.run(GeneralUtils.utilConvertToComplex(commandStr),
                            workFolder, getApplicationContext());
                    GeneralUtils.copyFileToFolder(vkLogPath, demoVideoFolder);
    
                } catch (Throwable e) {
                    Log.e(Prefs.TAG, "vk run exeption.", e);
                } finally {
                    if (wakeLock.isHeld())
                        wakeLock.release();
                    else {
                        Log.i(Prefs.TAG,
                                "Wake lock is already released, doing nothing");
                    }
                }
                Log.i(Prefs.TAG, "doInBackground finished");
                return Integer.valueOf(0);
            }
    
            protected void onProgressUpdate(Integer... progress) {
            }
    
            @Override
            protected void onCancelled() {
                Log.i(Prefs.TAG, "onCancelled");
                // progressDialog.dismiss();
                super.onCancelled();
            }
    
            @Override
            protected void onPostExecute(Integer result) {
                Log.i(Prefs.TAG, "onPostExecute");
                progressDialog.dismiss();
                super.onPostExecute(result);
    
                // finished Toast
                String rc = null;
                if (commandValidationFailedFlag) {
                    rc = "Command Vaidation Failed";
                } else {
                    rc = GeneralUtils.getReturnCodeFromLog(vkLogPath);
                }
                final String status = rc;
                video_preview_post.this.runOnUiThread(new Runnable() {
                    public void run() {
                        Toast.makeText(video_preview_post.this, status,
                                Toast.LENGTH_LONG).show();
    
                        // demoVideoPath = demoVideoFolder + "Movie.mp4";
    
                        if (status.equals("Transcoding Status: Failed")) {
                            Toast.makeText(
                                    video_preview_post.this,
                                    "Check: " + vkLogPath
                                            + " for more information.",
                                    Toast.LENGTH_LONG).show();
                        } else {
                            Intent in = new Intent(getApplicationContext(),
                                    PostMemoriesActivity3.class);
                            in.putExtra("PATH_MEMORIES_IMG", "video");
                            startActivity(in);
                        }
                    }
                });
            }
        }
    }
    

    From Android 4.3 you can use a Surface as the input to your encoder. here

    So you can use GLSurfaceView and apply the filters using fragment shaders.

    You can find some good examples here.also help this link