2011-11-24 35 views
5

trong ứng dụng Android của tôi, tôi quan sát thấy video được quay từ camera trước đang được ghi với 7-10 khung hình/giây trong khi máy ảnh sau hoạt động tốt, ứng dụng máy ảnh gốc quay video từ cam phía trước ở tốc độ 29 khung hình/giây.Không thể có tốc độ khung hình/giây cao (khoảng 30 khung hình/giây) khi quay từ camera trước trong ứng dụng Android của tôi

tôi sử dụng các chức năng sau để thiết lập tỷ lệ khung hình

myRecorder.setVideoFrameRate(30); 

nhưng bằng cách nào đó nó ghi nó ở 8fps. vấn đề là gì Ngoài ra, điều kiện ánh sáng dường như cải thiện nó thành 15 khung hình/giây, nhưng tôi muốn nó ít nhất là> 25 khung hình/giây làm sao tôi có thể đạt được điều này? Chúng ta có thể sử dụng NDK cho mục đích này không?

Trả lời

2

Tôi đang khám phá cùng một vấn đề. Bởi vì MediaRecorder đã có một cài đặt gốc, việc sử dụng NDK dường như không phải là một cách tiếp cận đầy hứa hẹn để tăng khung hình mỗi giây. Cải thiện bộ đệm với setPreviewCallbackWithBuffer như được hiển thị trong mã tại http://www.androidadb.com/source/cellbots-read-only/experimental/android/ioio/samples/ShootOnSight/src/com/cellbots/ioioshoot/CameraView.java.html có vẻ đầy hứa hẹn nhưng trước tiên tôi muốn hiểu rõ hơn về nhiều thông số máy ảnh và cách chúng ảnh hưởng đến tốc độ khung hình.

Như bạn đã biết, có một loạt các thiết bị Android có nhiều khả năng của máy ảnh. Để xem khả năng của máy ảnh mặt trước và mặt sau cụ thể của bạn, bạn có thể sử dụng mã sau (ví dụ: đặt mCameraId thành 0 cho mặt sau và 1 cho mặt trước).

Camera mCamera = Camera.open(mCameraId); 
    Camera.Parameters cp = mCamera.getParameters(); 
    Log.d(TAG, "camera parameters: " + cp.flatten()); 

Ví dụ: dưới đây là các thông số máy ảnh được bán bởi Nexus S của tôi (chạy OS 4.0.4).

NEXUS-S TRƯỚC CÁC THÔNG SỐ camera:
06-16 15: 14: 16,909: D/SENSORS_PLUS (24.583): thông số camera:
picture-size-values ​​= 640x480;
xem trước-fps-range = 7500,30000;
min-exposure-compensation = -4;
góc nhìn dọc = 39,4;
góc nhìn ngang = 51,2;
whitebalance = auto;
jpeg-thumbnail-height = 120;
jpeg-quality = 100;
xem trước định dạng-giá trị = yuv420sp, yuv420p;
xoay = 0;
jpeg-thumbnail-quality = 100;
chế độ lấy nét = cố định;
định dạng xem trước = yuv420sp;
kích thước xem trước = 640x480;
độ dài tiêu cự = 0,9;
video-frame-format = yuv420p;
định dạng hình ảnh-giá trị = jpeg;
max-exposure-compensation = 4;
bù phơi sáng = 0;
xem trước-frame-rate-values ​​= 15;
exposure-compensation-step = 0.5;
xem trước-frame-rate = 15;
hiệu ứng-giá trị = không, đơn âm, âm, màu nâu đỏ;
focus-mode-values ​​= fixed;
kích thước ảnh = 640x480;
effect = none;
jpeg-thumbnail-width = 160;
giá trị trắng = giá trị tự động, đèn sợi đốt, đèn huỳnh quang, ánh sáng ban ngày, ánh sáng ban ngày nhiều mây;
định dạng ảnh = jpeg;
khoảng cách lấy nét = 0,20,0,25, Vô cực;
xem trước-fps-range-values ​​= (7500,30000);
jpeg-thumbnail-size-values ​​= 160x120,0x0;
preview-size-values ​​= 640x480,320x240,176x144

NEXUS-S SAU THÔNG SỐ camera:
06-16 15: 46: 55,315: D/SENSORS_PLUS (24.732): thông số camera:
picture- kích thước-giá trị = 2560x1920,2048x1536,1600x1200,1280x960,640x480;
xem trước-fps-range = 15000,30000;
min-exposure-compensation = -4;
góc nhìn dọc = 39,4;
góc nhìn ngang = 51,2;
whitebalance = auto;
jpeg-thumbnail-height = 240;
scene-mode = auto;
jpeg-quality = 100;
xem trước định dạng-giá trị = yuv420sp, yuv420p;
xoay = 0;
jpeg-thumbnail-quality = 100;
chế độ lấy nét = tự động;
định dạng xem trước = yuv420sp;
kích thước xem trước = 720x480;
tiêu cự = 3,43;
video-frame-format = yuv420p;
định dạng hình ảnh-giá trị = jpeg;
max-exposure-compensation = 4;
flash-mode-values ​​= bật, tắt, tự động, đèn pin;
bù phơi sáng = 0;
xem trước-frame-rate-values ​​= 30;
exposure-compensation-step = 0.5;
xem trước-frame-rate = 30;
chế độ flash = tắt;
hiệu ứng-giá trị = không, đơn âm, âm, màu nâu đỏ;
chế độ lấy nét-giá trị = tự động, vô cùng, macro;
kích thước hình ảnh = 2560x1920;
effect = none;
jpeg-thumbnail-width = 320;
giá trị trắng = giá trị tự động, đèn sợi đốt, đèn huỳnh quang, ánh sáng ban ngày, ánh sáng ban ngày nhiều mây;
cảnh chế độ-giá trị = tự động, chân dung, phong cảnh, đêm, bãi biển, tuyết, hoàng hôn, pháo hoa, thể thao, tiệc, dưới ánh nến;
định dạng ảnh = jpeg;
khoảng cách lấy nét = 0.10,1.20, Infinity;
xem trước-fps-range-values ​​= (15000,30000);
jpeg-thumbnail-size-values ​​= 320x240,0x0;
preview-size-values ​​= 720x480,640x480,352x288,176x144

+0

điều này là tốt và tự giải thích, nhưng làm cách nào để tăng tốc độ khung hình? Bạn đã thử mã cellbots chưa? Tôi nghi ngờ nếu nó hoạt động. Có lẽ một chút quyền kiểm soát đối với các thông số máy ảnh phải được nhóm Android của Google cung cấp. –

+0

Tôi nên tóm tắt câu trả lời dài đó. Tóm lại, tôi chỉ bắt đầu nhìn vào tốc độ khung hình ngày càng tăng nhưng tôi khá chắc chắn rằng NDK không phải là con đường tốt nhất cho điều đó. Có vẻ như với tôi rằng các thông số của camera là quả treo thấp nên được thử trước. Ví dụ về việc đặt thông số máy ảnh có tại http://developer.android.com/guide/topics/media/camera.html#using-features – gregS

1

Tiếp theo thiết lập công trình đối với một số điện thoại di động trong 30 FPS.

Camera.Parameters parms = camera.getParameters(); 
    parms.setRecordingHint(true); 
    camera.setParameters(parms); 
Các vấn đề liên quan