Android Open Source - Media-Pack Timeline Item






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.
///*from   www  . j  ava  2  s. c  om*/

package com.intel.inde.mp.samples.controls;

import android.content.Context;
import android.net.Uri;
import android.os.Environment;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageButton;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.VideoView;
import com.intel.inde.mp.MediaFileInfo;
import com.intel.inde.mp.android.AndroidMediaObjectFactory;
import com.intel.inde.mp.samples.Format;
import com.intel.inde.mp.samples.R;

import java.io.File;

public class TimelineItem extends RelativeLayout implements View.OnClickListener, RangeSelector.RangeSelectorEvents {

    private static final String DEFAULT_MEDIA_PACK_FOLDER = "MediaPack_output";

    public interface TimelineItemEvents {

        public void onOpen(TimelineItem item);
        public void onDelete(TimelineItem item);

    }
    private TimelineItemEvents mEvents;

    private Context mContext;

    private String mediaFileName;

    private ImageButton mOpenButton;
    private ImageButton mDeleteButton;
    private VideoView mVideoView;
    private RangeSelector mSegmentSelector;
    private TextView mTitleText;
    private TextView mDurationText;

    private MediaFileInfo mMediaInfo;

    private long mVideoDuration;
    private long mVideoPosition;

    private boolean mEnableSegmentPicker;

    public TimelineItem(Context context) {
        super(context);

        mContext = context;

        init(null, 0);
    }

    public TimelineItem(Context context, AttributeSet attrs) {
        super(context, attrs);

        mContext = context;

        init(attrs, 0);
    }

    public TimelineItem(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);

        mContext = context;

        init(attrs, defStyle);
    }

    public void setEventsListener(TimelineItemEvents listener) {
        mEvents = listener;
    }

    public void enableSegmentPicker(boolean enable) {
        mEnableSegmentPicker = enable;

        int visibility = enable ? View.VISIBLE : View.INVISIBLE;

        if (mMediaInfo.getUri() != null) {
            mSegmentSelector.setVisibility(visibility);
        }
    }

    /*
    Get segment starting position in milliseconds
     */
    public int getSegmentFrom() {
        return percentToPosition(mSegmentSelector.getStartPosition());
    }

    /*
    Get segment ending position in milliseconds
     */
    public int getSegmentTo() {
        return percentToPosition(mSegmentSelector.getEndPosition());
    }

    public String getMediaFileName() {
        return mediaFileName;
    }

    public com.intel.inde.mp.Uri getUri() {
        return mMediaInfo.getUri();
    }

    public void setMediaFileName(String name) {
        mediaFileName = name;
    }

    public void setMediaUri(com.intel.inde.mp.Uri uri) {
        int visibility = (uri == null) ? View.INVISIBLE : View.VISIBLE;

        if (mEnableSegmentPicker) {
            mSegmentSelector.setVisibility(visibility);
        }

        mDeleteButton.setVisibility(visibility);
        mTitleText.setVisibility(visibility);
        mDurationText.setVisibility(visibility);
        mVideoView.setVisibility(visibility);

        if (uri == null) {
            mediaFileName = null;

            mVideoDuration = 0;
            mVideoPosition = 0;

            postInvalidate();

            return;
        }

        try {
            mMediaInfo.setUri(uri);
        } catch (Exception ex) {
            throw new IllegalArgumentException("Unsupported media file format");
        }

        mVideoDuration = mMediaInfo.getDurationInMicroSec();
        mVideoPosition = (mVideoDuration / 2);

        mVideoView.setVideoURI(Uri.parse(uri.getString()));

        String duration = Format.duration(mVideoDuration / 1000);

        mTitleText.setText(mediaFileName);
        mDurationText.setText(duration);

        mSegmentSelector.setStartPosition(0);
        mSegmentSelector.setEndPosition(100);

        showPreview(10);
    }
    
    public String genDstPath(String srcName, String effect)
    {
        String substring = srcName.substring(0, srcName.lastIndexOf('.'));
        File outputFolder = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES).getPath(), DEFAULT_MEDIA_PACK_FOLDER);

        if (!outputFolder.exists()) {
            outputFolder.mkdirs();
        }

        String dstPath = ( outputFolder.getPath() + "/" + substring + "_" + effect + ".mp4");
                
        return dstPath;
    }

    public String genDstPath(String srcPath1, String srcPath2, String effect)
    {
        String extension = srcPath1.substring(srcPath1.lastIndexOf('.') + 1);
                
        String srcFileName2 = srcPath2.substring(srcPath1.lastIndexOf('/') + 1);
        String srcFileName2Base = srcFileName2.substring(0, srcFileName2.lastIndexOf('.'));
        
        String dstPath = srcPath1.replace( "." + extension, "_" + srcFileName2Base + "_" + effect + ".mp4");
        
        return dstPath;
    }      

    public String getVideoEffectName(int index) {
      
      String baseName = "video_effect_";

        switch (index){
            case 0:  return baseName + "sepia";
            case 1:  return baseName + "grayscale";
            case 2:  return baseName + "inverse";
            case 3:  return baseName + "text_overlay";
            default: return baseName + "unknown";
        }      
    }
    
    private void init(AttributeSet attrs, int defStyle) {
        LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        inflater.inflate(R.layout.timeline_item, this, true);

        mVideoView = (VideoView) findViewById(R.id.thumbinail);

        mSegmentSelector = (RangeSelector) findViewById(R.id.segment);
        mSegmentSelector.setEventsListener(this);

        mOpenButton = ((ImageButton) findViewById(R.id.open));
        mOpenButton.setOnClickListener(this);

        mDeleteButton = ((ImageButton) findViewById(R.id.delete));
        mDeleteButton.setOnClickListener(this);

        mTitleText = (TextView) findViewById(R.id.title);
        mDurationText = (TextView) findViewById(R.id.length);

        mMediaInfo = new MediaFileInfo(new AndroidMediaObjectFactory(mContext));

        mEnableSegmentPicker = true;

        setMediaUri(null);
    }

    public void stopVideoView() {
        mVideoView.stopPlayback();
    }

    @Override
    public void onClick(View view) {
        int id = view.getId();

        switch (id) {
            case R.id.open: {
                if (mEvents != null) {
                    mEvents.onOpen(this);
                }
            }
            break;

            case R.id.delete: {
                if (mEvents != null) {
                    mEvents.onDelete(this);
                }
            }
            break;
        }
    }

    @Override
    public void onStartPositionChanged(int position) {
        showPreview(position);
    }

    @Override
    public void onEndPositionChanged(int position) {
        showPreview(position);
    }

    public void updateView() {
        if (mVideoView != null && mMediaInfo.getUri() != null) {
            int position = (int) mVideoPosition;
            mVideoView.seekTo(position);
        }
    }

    private void showPreview(int position) {
        if (mMediaInfo.getUri() == null || mMediaInfo.getUri().getString().isEmpty()) {
            return;
        }

        int seekTo = percentToPosition(position);

        mVideoPosition = seekTo / 1000;

        mVideoView.seekTo((int) mVideoPosition);
    }

    private int percentToPosition(int percent) {
        int position = (int) (mVideoDuration * percent / 100);

        return position;
    }
}




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