目前正计划使用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大小57584DEBUG/CamTest(4716):RAW回调数据为NULL
DEBUG/CamTest(4716):JPEG回调数据有效
"CamTest"是我的自定义调试输出.
我正在开发一个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 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之间),但我想听听别人如何解决这个问题,以及如何改进它.特别是:
非常感谢
根据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中的手机间隙运行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) Android中是否可以在没有音频流的情况下录制来自Camera的视频?
目标:减少输出文件大小.
问题:某些Android设备(在问题的底部列出)在使用setOrientationHint(int degrees)前置摄像头拍摄的视频功能时会出现意外行为.预期的行为是视频顺时针旋转,但这些设备逆时针旋转视频.
我的目标:在摄像机设置或硬件方向内识别变量,使我能够预测何时会发生这种情况.具体来说,我想避免在我的代码中特别包装这些手机!
进一步说明:我正在使用标准MediaRecorder对象录制视频,在准备录制时,我使用了设置视频的方向setOrientationHint().在文档中setOrientationHint(),为degrees参数指定了以下内容:
degrees - 以度为单位顺时针旋转的角度.支持的角度为0°,90°,180°和270°.
该功能旨在添加包含旋转角度的合成矩阵,以便视频播放器可以按预期显示视频.所以,我所做的是使用CameraInfo类获取相机硬件的方向,并将其用作fn中的degrees参数setOrientationHint.(我已尝试使用AOSP作为指南对此代码进行修改,但我的结果完全相同.)
一个真实示例:三星Galaxy S3前置摄像头(事实上大多数其他摄像头)的硬件方向为270,所以我在录制时会使用它,并且生成的视频会正确显示.HTC Vivid同样会为同一台相机返回270的硬件方向,但只有degrees在setOrientationHintfn中使用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 camera2 API.
我可以在手动对焦模式下使用LENS_FOCUS_DISTANCE获得焦距值.但是,AF模式下的属性始终为零.在AF模式下有没有办法获得焦距?
我试图在我的应用程序中以30秒的曝光时间捕获图像(我知道这可能是因为相机允许它).
但是SENSOR_INFO_EXPOSURE_TIME_RANGE(它应该是以纳秒为单位)给出了我的范围:
13272 - 869661901
Run Code Online (Sandbox Code Playgroud)
它会在几秒钟内完成
0.000013272 - 0.869661901
Run Code Online (Sandbox Code Playgroud)
这显然不到一秒钟.
如何使用更长的曝光时间?
提前致谢!.
我正在尝试实现相机应用程序.并检查示例.一些示例包含以下清单功能:uses-feature android:name="android.hardware.camera2.full.我检查过官方文档和谷歌示例,但没有一个提到现有的这个功能.(或者我错过了一些).
这个功能的来源是什么android.hardware.camera?有什么区别?
编辑:让我困惑的是这些例子googlesamples:
还有这个
还有这个
他们正在使用新的Camera2API和旧的清单features.我不知道两者是如何结合在一起的.
android ×10
android-camera ×10
camera2 ×2
api ×1
autofocus ×1
cordova ×1
htc-android ×1
javascript ×1
orientation ×1
real-time ×1