165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn/*
265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * Copyright (C) 2011 The Android Open Source Project
365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn *
465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * Licensed under the Apache License, Version 2.0 (the "License");
565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * you may not use this file except in compliance with the License.
665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * You may obtain a copy of the License at
765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn *
865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn *      http://www.apache.org/licenses/LICENSE-2.0
965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn *
1065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * Unless required by applicable law or agreed to in writing, software
1165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * distributed under the License is distributed on an "AS IS" BASIS,
1265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * See the License for the specific language governing permissions and
1465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * limitations under the License.
1565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn */
1665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn
1765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennpackage android.camera.mediaeffects.tests.functional;
1865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn
1965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennimport android.media.filterfw.samples.CameraEffectsRecordingSample;
2065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennimport android.app.Activity;
2165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennimport android.app.Instrumentation;
2265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennimport android.content.Intent;
2365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennimport android.test.ActivityInstrumentationTestCase2;
2465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennimport android.test.suitebuilder.annotation.LargeTest;
2565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennimport android.view.KeyEvent;
2665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennimport android.util.Log;
2765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennimport android.content.Intent;
2865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennimport android.os.Environment;
2965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennimport android.media.MediaMetadataRetriever;
3065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennimport android.net.Uri;
3165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennimport java.io.File;
3265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn
3365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennpublic class EffectsVideoCapture extends ActivityInstrumentationTestCase2
3465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn                                               <CameraEffectsRecordingSample> {
3565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn    private static final String TAG = "EffectsVideoCaptureTest";
3665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn    private static final long WAIT_FOR_PREVIEW = 4 * 1000; // 4 seconds
3765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn
3865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn    public EffectsVideoCapture() {
3965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn        super(CameraEffectsRecordingSample.class);
4065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn    }
4165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn
4265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn    private void captureVideos(String reportTag, Instrumentation inst) throws Exception{
4365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn        int total_num_of_videos = 1;
4465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn        int video_duration = 4 * 1000; // 4 seconds
4565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn
4665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn        Log.v(TAG, reportTag);
4765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn        for (int i = 0; i < total_num_of_videos; i++) {
4865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn            Thread.sleep(WAIT_FOR_PREVIEW);
4965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn            // record a video
5065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn            inst.sendCharacterSync(KeyEvent.KEYCODE_CAMERA);
5165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn            Thread.sleep(video_duration);
5265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn            inst.sendCharacterSync(KeyEvent.KEYCODE_CAMERA);
5365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn        }
5465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn    }
5565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn
5665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn    @LargeTest
5765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn    public void testBackEffectsVideoCapture() throws Exception {
5865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn        Instrumentation inst = getInstrumentation();
5965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn
6065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn        Intent intent = new Intent();
6165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn        intent.setClass(getInstrumentation().getTargetContext(),
6265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn                CameraEffectsRecordingSample.class);
6365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
6465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn        intent.putExtra("OUTPUT_FILENAME", Environment.getExternalStorageDirectory().toString()
6565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn                + "/CameraEffectsRecordingTest.mp4");
6665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn        Activity act = inst.startActivitySync(intent);
6765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn        captureVideos("Back Camera Video Capture\n", inst);
6865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn        act.finish();
6965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn
7065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn        // Verification
7165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn        File file = new File(Environment.getExternalStorageDirectory(),
7265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn                "CameraEffectsRecordingTest.mp4");
7365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn        Uri uri = Uri.fromFile(file);
7465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn        verify(getActivity(), uri);
7565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn    }
7665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn
7765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn    // Verify result code, result data, and the duration.
7865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn    private void verify(CameraEffectsRecordingSample activity, Uri uri) throws Exception {
7965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn        assertNotNull(uri);
8065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn        // Verify the video file
8165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn        MediaMetadataRetriever retriever = new MediaMetadataRetriever();
8265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn        retriever.setDataSource(activity, uri);
8365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn        String duration = retriever.extractMetadata(
8465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn                MediaMetadataRetriever.METADATA_KEY_DURATION);
8565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn        assertNotNull(duration);
8665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn        int durationValue = Integer.parseInt(duration);
8765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn        Log.v(TAG, "Video duration is " + durationValue);
8865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn        assertTrue(durationValue > 0);
8965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn    }
9065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn}
91