小编use*_*593的帖子

Android相机原生访问:startPreview()vs startRecording()

尝试从Android ICS中的本机代码开始使用相机:大多数手册都是指startPreview()方法.但是浏览AOSP代码我发现了' startRecording() '方法<Camera.h>.这里说它来自接口ICameraRecordingProxy" 允许录音机在录音期间接收视频帧 "

所以问题是 - 在性能方面,'startRecording'方法比'startPreview'更有效吗?

进入本机代码的唯一目标是性能,Java'Camera'太慢,OpenCV也不提供所需的FPS级别.

编辑:目标平台是:API级别= 17,设备Allwinner A31开发板,1280x720x30FPS.任务是从相机捕获帧,修改它们,编码(H264)并存储到SD卡.纯java MediaRecorder用1280x720x30写入mp4文件.不需要在屏幕上显示实时预览.

本机模式下的OpenCV-demo1提供1920x1080x2(在java模式下相同).具有空PreviewCallback最大FPS的简单Java方法是15.

先感谢您..

camera android android-ndk

8
推荐指数
1
解决办法
6724
查看次数

在HW模式下创建OMXCodec编码器

我正在尝试在Android ICS 4.0.4上实现HW加速的H264视频编码.由于MediaCodec类不可用,我必须使用stagefright API.但是当我输入HardwareCodecsOnly标志时,OMXCodec :: Create总是返回NULL.如果我用标志kHardwareCodecsOnly调用OMXCodec :: findMatchingCodecs(),我得到以下列表:
- OMX.TI.DUCATI1.VIDEO.H264E
- OMX.qcom.7x30.video.encoder.avc
- OMX.qcom.video.encoder.avc
- OMX.TI.Video.encoder
- OMX.Nvidia.h264.encoder
- OMX.SEC.AVC.Encoder

所以我猜这意味着硬件支持HW编码.

当我在OMXCodec :: Create中没有放置任何标志时- 编解码器创建得很好,但我猜它是在软件模式下(顺便说一句,如何检查 - 确切地创建了哪个编解码器?)

浏览OMXCodec源我找到了有趣的行:

if (createEncoder) {            
sp<MediaSource> softwareCodec =
 InstantiateSoftwareEncoder(componentName, source, meta);
    if (softwareCodec != NULL) {   
    LOGV("Successfully allocated software codec '%s'", componentName);
    return softwareCodec;            
}        
}
Run Code Online (Sandbox Code Playgroud)

对于Encoder来说,它总是首先尝试实例化软件编解码器.我究竟做错了什么?任何帮助将不胜感激.谢谢

这是OMXCodec创建的代码:

         mClient = new OMXClient();
        mClient->connect();
     logger->log("mClient.connect();");

      enc_meta = new MetaData;
     // frame size of target video file
    int width = 640; //720; …
Run Code Online (Sandbox Code Playgroud)

video android hardware-acceleration android-ndk stagefright

4
推荐指数
1
解决办法
3836
查看次数