标签: android-camera

Android:无法从相机获取RAW图像数据?

目前正计划使用Android设备中的相机提供的RAW数据来制作摄影应用.

我使用相机API编写了一个快速骨架,并注意到在使用RAW图像数据的回调中,给出的数据缓冲区始终为NULL,无论我制作图像的大小,但我能够访问JPG缓冲区.

我做了一些搜索,发现了这个帖子:http://markmail.org/message/sraudbyrsi2hjqfr#query :I% 27m%20talking%20about%20deprecating%20the%20raw%20picture%20callback%20that%20has%20never+ page:1 +中期:sraudbyrsi2hjqfr +状态:结果

其中提到在撰写本文时(2009年2月),它"从未奏效".那么,我是否正确地认为今天它仍然不起作用,或者我可能错误地设置了什么?

我用来调试的手机是Droid X.

只是困惑,因为我确实看到API提到如果设备上没有足够的可用内存,回调中的RAW数据缓冲区可以为null,但即使我将图像设置为极小的尺寸,它也会返回为null( 100×100)

谢谢

编辑:

添加一些我从LogCat获得的调试输出:

DEBUG/CameraHal(1156):初始化捕获内存raw:0x42d39000(155648),jpg:0x429c4000(57856),pv 0x42d5f000(276736)

DEBUG/CameraHal(1156):收到原始yuv 0x4119f000大小153600
DEBUG/CameraHal(1156):收到jpg 0x429c4000大小57584

DEBUG/CamTest(4716):RAW回调数据为NULL
DEBUG/CamTest(4716):JPEG回调数据有效

"CamTest"是我的自定义调试输出.

android android-camera

9
推荐指数
1
解决办法
1万
查看次数

Android MediaRecorder setOutPutFile()使用Socket进行流式传输

我正在开发一个Android应用程序,应该能够将视频流式传输到我的网络上的本地服务器,而无需将其存储在SD卡上.

为此,我在C#中使用了一个简单的套接字应用程序来监听特定的IP:PORT

在Android部分,我设置了setOutputFile()这个IP:PORT使用套接字.

此应用程序在Android手机上完美启动,但它不显示预览,当我开始录制时,它会毫无例外地退出.它也不会向网络发送任何数据流.

当我设置setOutPutFile()为SD卡时,它可以正常工作并录制视频.

对于服务器部分,当我从任何其他应用程序(从PC)向同一IP:PORT发送数据时,它会接收数据.

简而言之,我想使用socket进行流媒体建立PC和Android之间的通信通道.

这是我的Android代码:

 Socket soc=new Socket("192.168.1.3",8210);
 ParcelFileDescriptor pfd = ParcelFileDescriptor.fromSocket(soc);
 ...
 ...
 // other Recorder setup steps
 ...
 ...
 Recorder.setOutputFile(pfd.getFileDescriptor()); // working fine for sdcard
 Recorder.setPreviewDisplay(holder.getSurface());
 Recorder.prepare();
Run Code Online (Sandbox Code Playgroud)

这是我在C#中的服务器应用程序并在PC上运行:

 socketForServer = new TcpClient("192.168.1.3", 8210);
 NetworkStream networkStream = socketForServer.GetStream();
 byte[] rData = new byte[1024];
 networkStream.Read(rData, 0, 1024);
 ...
 ...
 // process rData
 ...
 ...
Run Code Online (Sandbox Code Playgroud)

我无法理解这里发生的问题.我正朝着正确的方向前进吗?

android video-streaming android-camera

9
推荐指数
1
解决办法
2万
查看次数

Android:实时图像处理

我有一个应用程序,它采用相机预览,在每一帧上执行一些基本的图像处理功能(例如边缘检测,颜色变化,图像扭曲等),并在"实时"中将修改后的帧显示在屏幕上.类似于Android Market中的"Paper Camera"应用程序.

我的方法摘要:

1:在framelayout中创建两个重叠的视图:

要传递给Camera.setPreviewDisplay()的SurfaceView.(传递null会阻止相机预览在某些设备上启动 - opencv曾经在Android 4.0之前执行此操作吗?).

一个名为"LiveView"的类,它扩展了View并实现了Camera.PreviewCallBack.该视图从相机接收帧,并在修改后显示帧(例如边缘检测).此视图位于SurfaceView之上.

2:我调用Camera.setPreviewCallbackWithBuffer(),以便将帧发送到我的LiveView

3:在LiveView的onPreviewFrame()中,我获取捕获的帧(byte []),从YUV转换为RGB并执行图像处理功能,并调用postInvalidate()(YUV2RGB转换和图像处理在本机代码中完成)

4:在LiveView的OnDraw()方法中,我从修改后的RGB帧(byte [])创建一个位图,并将位图绘制到画布.

这是有效的(在各种设备上5fps和10fps之间),但我想听听别人如何解决这个问题,以及如何改进它.特别是:

  • 通过扩展GLSurfaceView而不是View来创建LiveView类,我会获得任何性能吗?
  • 对每个帧更新两个表面听起来效率非常低.还有其他选择吗?
  • 为了更有效地做到这一点,我应该在本机级别访问相机吗? - 我相信OpenCV采用这种方法?

非常感谢

android real-time image-processing android-camera

9
推荐指数
1
解决办法
5565
查看次数

Android相机预览旋转

根据Android开发者网站:

在android 2.2之后有功能

"setDisplayOrientation"

调整相机预览旋转.

而且根据Android Developer Site,我们可以找到以下源代码.

android.hardware.Camera.CameraInfo info =
            new android.hardware.Camera.CameraInfo();
    android.hardware.Camera.getCameraInfo(cameraId, info);
    int rotation = activity.getWindowManager().getDefaultDisplay().getRotation();
    int degrees = 0 ;
    switch ( rotation ) {
        case Surface.ROTATION_0 : degrees = 0 ; break ;
        case Surface.ROTATION_90 : degrees = 90 ; break ;
        case Surface.ROTATION_180 : degrees = 180 ; break ;
        case Surface.ROTATION_270 : degrees = 270 ; break ;
    }
    int result ;
    if ( info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
        result = ( info.orientation + …
Run Code Online (Sandbox Code Playgroud)

android orientation android-camera

9
推荐指数
1
解决办法
1万
查看次数

适用于Android的PhoneGap Camera API - 未捕获的例外

我正在尝试使用Android中的手机间隙运行Camera API,我正在运行所有类型的问题.

我刚刚复制了phonegap相机的例子.

我收到以下错误

07-12 18:18:00.706: E/Web Console(17837): Uncaught TypeError: Cannot read property 'SAVEDPHOTOALBUM' of undefined at file:///android_asset/www/index.html:98

07-12 18:17:59.456: E/Web Console(17837): Uncaught ReferenceError: Camera is not defined at file:///android_asset/www/index.html:67
Run Code Online (Sandbox Code Playgroud)

我尝试了所有其他目的地类型.它起作用了

destinationType: destinationType.FILE_URI
destinationType: Camera.DestinationType.FILE_URI
destinationType: destinationType.DATA_URL
Run Code Online (Sandbox Code Playgroud)

我还添加了相机和硬件相机权限的许可.但它仍然失败了

以下是以下内容

<!DOCTYPE html>
<html>
<head>
<title>Capture Photo</title>

<script type="text/javascript" charset="utf-8" src="phonegap-1.0.0.js"></script>
<script type="text/javascript" charset="utf-8">

var pictureSource;   // picture source
var destinationType; // sets the format of returned value 

// Wait for PhoneGap to connect with the device
//
document.addEventListener("deviceready",onDeviceReady,false);

// PhoneGap is …
Run Code Online (Sandbox Code Playgroud)

javascript android android-camera phonegap-plugins cordova

9
推荐指数
1
解决办法
1万
查看次数

Android录制没有音频的视频

Android中是否可以在没有音频流的情况下录制来自Camera的视频?

目标:减少输出文件大小.

android android-camera mediarecorder android-mediarecorder

9
推荐指数
2
解决办法
1万
查看次数

setOrientationHint在某些手机的前置摄像头(HTC)上逆时针旋转视频

问题:某些Android设备(在问题的底部列出)在使用setOrientationHint(int degrees)前置摄像头拍摄的视频功能时会出现意外行为.预期的行为是视频顺时针旋转,但这些设备逆时针旋转视频.

我的目标:在摄像机设置或硬件方向内识别变量,使我能够预测何时会发生这种情况.具体来说,我想避免在我的代码中特别包装这些​​手机!

进一步说明:我正在使用标准MediaRecorder对象录制视频,在准备录制时,我使用了设置视频的方向setOrientationHint().在文档中setOrientationHint(),为degrees参数指定了以下内容:

degrees - 以度为单位顺时针旋转的角度.支持的角度为0°,90°,180°和270°.

该功能旨在添加包含旋转角度的合成矩阵,以便视频播放器可以按预期显示视频.所以,我所做的是使用CameraInfo类获取相机硬件的方向,并将其用作fn中的degrees参数setOrientationHint.(我已尝试使用AOSP作为指南对此代码进行修改,但我的结果完全相同.)

一个真实示例:三星Galaxy S3前置摄像头(事实上大多数其他摄像头)的硬件方向为270,所以我在录制时会使用它,并且生成的视频会正确显示.HTC Vivid同样会为同一台相机返回270的硬件方向,但只有degreessetOrientationHintfn中使用90作为参数时才能正确显示.如果我像任何其他手机一样使用270硬件方向,则视频将颠倒过来.

注意:setOrientationHint()功能包括警告:

请注意,某些视频播放器可能会选择在播放期间忽略视频中的合成矩阵.

然而,这不是正在发生的事情,因为如果我伪造它并放入90而不是270,我可以轻松地在这些手机上解决这个问题.

我见过的手机专门展示了这个问题:运行Android 4.0.3的HTC Vivid(PH39100),运行Android 4.0.3的HTC EVO 4G(PG86100),运行Android 2.3.4的HTC Thunderbolt(ADR6400L).请注意,它们都是HTC手机.也许HTC的某个人顺时针错误地逆时针方向错误.

android android-camera android-mediarecorder htc-android

9
推荐指数
1
解决办法
2072
查看次数

Android camera2 API在AF模式下获得焦距

我正在使用Android camera2 API.

我可以在手动对焦模式下使用LENS_FOCUS_DISTANCE获得焦距值.但是,AF模式下的属性始终为零.在AF模式下有没有办法获得焦距?

api android autofocus android-camera camera2

9
推荐指数
2
解决办法
4508
查看次数

Camera2 API - 如何设置长曝光时间

我试图在我的应用程序中以30秒的曝光时间捕获图像(我知道这可能是因为相机允许它).

但是SENSOR_INFO_EXPOSURE_TIME_RANGE(它应该是以纳秒为单位)给出了我的范围:

13272 - 869661901
Run Code Online (Sandbox Code Playgroud)

它会在几秒钟内完成

0.000013272 - 0.869661901
Run Code Online (Sandbox Code Playgroud)

这显然不到一秒钟.

如何使用更长的曝光时间?

提前致谢!.

android android-camera android-5.0-lollipop camera2

9
推荐指数
1
解决办法
4012
查看次数

android.hardware.camera2.full来自哪里?

我正在尝试实现相机应用程序.并检查示例.一些示例包含以下清单功能:uses-feature android:name="android.hardware.camera2.full.我检查过官方文档和谷歌示例,但没有一个提到现有的这个功能.(或者我错过了一些).

这个功能的来源是什么android.hardware.camera?有什么区别?


编辑:让我困惑的是这些例子googlesamples:

https://github.com/googlesamples/android-Camera2Basic/blob/master/kotlinApp/Application/src/main/AndroidManifest.xml

还有这个

https://github.com/googlesamples/android-Camera2Basic/blob/master/Application/src/main/AndroidManifest.xml

还有这个

https://github.com/googlesamples/android-Camera2Raw/blob/master/Application/src/main/AndroidManifest.xml

他们正在使用新的Camera2API和旧的清单features.我不知道两者是如何结合在一起的.

android android-camera android-camera2

9
推荐指数
2
解决办法
3927
查看次数