b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

十分钟完成安卓MediaCodec视频解码(3)

电脑杂谈  发布时间:2019-07-21 23:07:11  来源:网络整理

这里为了节约性能:

如果视频分辨率低于SurfaceView分辨率,则降低解码分辨率到视频分辨率;

如果视频分辨率高于SurfaceView分辨率,则降低解码分辨率到SurfaceView分辨率。

在屏幕熄灭或者挂入后台的情况下,是没必要让MediaCodec继续解码的,因此,参考其他SDK,我们可以让它共享Activity的生命周期,以此来达到省电的效果:

public void onDestroy() {
        if (mediaCodec != null) {
            //释放内存
            mediaCodec.release();
        }
    }
    public void onPause() {
        //通过这个boolean变量来决定要不要处理后台发来的数据流
        isTaskInForeground = false;
        stop();
    }
    public void stop() {
        if (mediaCodec != null) {
            //这里catch掉IllegalStateException,以防在未被start前调用
            try {
                //停止解码,此时可以调用configure()方法
                mediaCodec.stop();
            }catch (IllegalStateException e){
                e.printStackTrace();
            }
        }
    }
    public void onResume() {
        isTaskInForeground = true;
        if (mediaCodec != null) {
            configureDecoder(tempMediaFormat, tempSurface);
        }
    }
    public void configureDecoder(MediaFormat mediaFormat, Surface surface) {
        if (mediaCodec != null) {
            tempSurface = surface;
            //在SurfaceView加载完成前,调用以下方法会报错,此处TryCatch用以应付在OnCreate中执行初始化导致的崩溃
            try {
                mediaCodec.stop();
                tempMediaFormat = mediaFormat;
                mediaCodec.configure(mediaFormat, surface, null, 0);
                mediaCodec.start();
                //此方法必须在configure和start之后执行才有效
//                mediaCodec.setVideoScalingMode(MediaCodec.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING);
            } catch (IllegalArgumentException e) {
                e.printStackTrace();
            } catch (IllegalStateException e) {
                e.printStackTrace();
            }
        }
    }

最后,如果觉得有帮助的话,就给博主发个红包吧~


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/bofangqi/article-114728-3.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...