Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Open sidebar
halo
hardware_libhardware
Commits
4c543a14
Commit
4c543a14
authored
12 years ago
by
Eino-Ville Talvala
Browse files
Options
Download
Email Patches
Plain Diff
Enable native HAL tests to work for camera3 devices
Change-Id: Ie11270cc8cf301ec94795b595f0517ee3bad2817
parent
1a70c0fd
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
126 additions
and
47 deletions
+126
-47
tests/camera2/CameraBurstTests.cpp
tests/camera2/CameraBurstTests.cpp
+7
-3
tests/camera2/CameraFrameTests.cpp
tests/camera2/CameraFrameTests.cpp
+2
-3
tests/camera2/CameraMetadataTests.cpp
tests/camera2/CameraMetadataTests.cpp
+20
-8
tests/camera2/CameraModuleFixture.h
tests/camera2/CameraModuleFixture.h
+43
-8
tests/camera2/CameraModuleTests.cpp
tests/camera2/CameraModuleTests.cpp
+4
-11
tests/camera2/CameraStreamFixture.h
tests/camera2/CameraStreamFixture.h
+36
-3
tests/camera2/CameraStreamTests.cpp
tests/camera2/CameraStreamTests.cpp
+2
-3
tests/camera2/camera2.cpp
tests/camera2/camera2.cpp
+12
-8
No files found.
tests/camera2/CameraBurstTests.cpp
View file @
4c543a14
...
...
@@ -34,7 +34,7 @@
#define CAMERA_EXPOSURE_DOUBLE 2
#define CAMERA_EXPOSURE_DOUBLING_THRESHOLD 1.0f
#define CAMERA_EXPOSURE_DOUBLING_COUNT 4
#define CAMERA_EXPOSURE_FORMAT
HAL_PIXEL_FORMAT_YCrCb_420_SP
#define CAMERA_EXPOSURE_FORMAT
CAMERA_STREAM_AUTO_CPU_FORMAT
#define CAMERA_EXPOSURE_STARTING 100000 // 1/10ms, up to 51.2ms with 10 steps
#if CAMERA_BURST_DEBUGGING
...
...
@@ -86,7 +86,7 @@ public:
TEST_EXTENSION_FORKING_TEAR_DOWN
;
}
/* this assumes the format is YUV420sp */
/* this assumes the format is YUV420sp
or flexible YUV
*/
long
long
TotalBrightness
(
const
CpuConsumer
::
LockedBuffer
&
imgBuffer
,
int
*
underexposed
,
int
*
overexposed
)
const
{
...
...
@@ -170,6 +170,11 @@ TEST_F(CameraBurstTest, ManualExposureControl) {
uint8_t
cmOff
=
static_cast
<
uint8_t
>
(
ANDROID_CONTROL_MODE_OFF
);
ASSERT_EQ
(
OK
,
previewRequest
.
update
(
ANDROID_CONTROL_MODE
,
&
cmOff
,
1
));
int
requestId
=
1
;
ASSERT_EQ
(
OK
,
previewRequest
.
update
(
ANDROID_REQUEST_ID
,
&
requestId
,
1
));
if
(
CAMERA_BURST_DEBUGGING
)
{
int
frameCount
=
0
;
ASSERT_EQ
(
OK
,
previewRequest
.
update
(
ANDROID_REQUEST_FRAME_COUNT
,
...
...
@@ -255,4 +260,3 @@ TEST_F(CameraBurstTest, ManualExposureControl) {
}
}
}
This diff is collapsed.
Click to expand it.
tests/camera2/CameraFrameTests.cpp
View file @
4c543a14
...
...
@@ -23,7 +23,7 @@
#include "hardware/hardware.h"
#include "hardware/camera2.h"
#include "Camera
2
Device.h"
#include "CameraDevice
Base
.h"
#include "utils/StrongPointer.h"
#include <gui/CpuConsumer.h>
...
...
@@ -46,7 +46,7 @@ namespace camera2 {
namespace
tests
{
static
CameraStreamParams
STREAM_PARAMETERS
=
{
/*mFormat*/
HAL_PIXEL_FORMAT_YCrCb_420_SP
,
/*mFormat*/
CAMERA_STREAM_AUTO_CPU_FORMAT
,
/*mHeapCount*/
CAMERA_HEAP_COUNT
};
...
...
@@ -139,4 +139,3 @@ INSTANTIATE_TEST_CASE_P(FrameParameterCombinations, CameraFrameTest,
}
}
}
This diff is collapsed.
Click to expand it.
tests/camera2/CameraMetadataTests.cpp
View file @
4c543a14
...
...
@@ -25,7 +25,7 @@
#include "hardware/hardware.h"
#include "hardware/camera2.h"
#include "Camera
2
Device.h"
#include "CameraDevice
Base
.h"
#include "utils/StrongPointer.h"
#include <gui/CpuConsumer.h>
...
...
@@ -142,13 +142,25 @@ TEST_F(CameraMetadataTest, RequiredFormats) {
HasElementInArrayFromStaticTag
(
ANDROID_SCALER_AVAILABLE_FORMATS
,
HAL_PIXEL_FORMAT_BLOB
));
// JPEG
EXPECT_TRUE
(
HasElementInArrayFromStaticTag
(
ANDROID_SCALER_AVAILABLE_FORMATS
,
HAL_PIXEL_FORMAT_YCrCb_420_SP
));
// NV21
if
(
getDeviceVersion
()
<
CAMERA_DEVICE_API_VERSION_3_0
)
{
// HAL2 can support either flexible YUV or YV12 + NV21
if
(
!
HasElementInArrayFromStaticTag
(
ANDROID_SCALER_AVAILABLE_FORMATS
,
HAL_PIXEL_FORMAT_YCbCr_420_888
))
{
EXPECT_TRUE
(
HasElementInArrayFromStaticTag
(
ANDROID_SCALER_AVAILABLE_FORMATS
,
HAL_PIXEL_FORMAT_YCrCb_420_SP
));
// NV21
EXPECT_TRUE
(
HasElementInArrayFromStaticTag
(
ANDROID_SCALER_AVAILABLE_FORMATS
,
HAL_PIXEL_FORMAT_YV12
));
}
}
else
{
// HAL3 must support flexible YUV
EXPECT_TRUE
(
HasElementInArrayFromStaticTag
(
ANDROID_SCALER_AVAILABLE_FORMATS
,
HAL_PIXEL_FORMAT_YCbCr_420_888
));
}
EXPECT_TRUE
(
HasElementInArrayFromStaticTag
(
ANDROID_SCALER_AVAILABLE_FORMATS
,
HAL_PIXEL_FORMAT_YV12
));
}
TEST_F
(
CameraMetadataTest
,
SaneResolutions
)
{
...
...
@@ -156,7 +168,7 @@ TEST_F(CameraMetadataTest, SaneResolutions) {
// Iff there are listed raw resolutions, the format should be available
int
rawResolutionsCount
=
GetEntryCountFromStaticTag
(
HAL_PIXEL_FORMAT
_RAW_S
ENSOR
);
GetEntryCountFromStaticTag
(
ANDROID_SCALER_AVAILABLE
_RAW_S
IZES
);
EXPECT_EQ
(
rawResolutionsCount
>
0
,
HasElementInArrayFromStaticTag
(
ANDROID_SCALER_AVAILABLE_FORMATS
,
HAL_PIXEL_FORMAT_RAW_SENSOR
));
...
...
This diff is collapsed.
Click to expand it.
tests/camera2/CameraModuleFixture.h
View file @
4c543a14
...
...
@@ -23,6 +23,7 @@
#include "hardware/camera2.h"
#include "Camera2Device.h"
#include "Camera3Device.h"
#include "camera2_utils.h"
#include "TestExtensions.h"
...
...
@@ -82,6 +83,42 @@ struct CameraModuleFixture {
}
}
void
CreateCamera
(
int
cameraID
,
/*out*/
sp
<
CameraDeviceBase
>
*
device
)
{
struct
camera_info
info
;
ASSERT_EQ
(
OK
,
mModule
->
get_camera_info
(
cameraID
,
&
info
));
ASSERT_GE
((
int
)
info
.
device_version
,
CAMERA_DEVICE_API_VERSION_2_0
)
<<
"Device version too old for camera "
<<
cameraID
<<
". Version: "
<<
info
.
device_version
;
switch
(
info
.
device_version
)
{
case
CAMERA_DEVICE_API_VERSION_2_0
:
case
CAMERA_DEVICE_API_VERSION_2_1
:
*
device
=
new
Camera2Device
(
cameraID
);
break
;
case
CAMERA_DEVICE_API_VERSION_3_0
:
*
device
=
new
Camera3Device
(
cameraID
);
break
;
default:
device
->
clear
();
FAIL
()
<<
"Device version unknown for camera "
<<
cameraID
<<
". Version: "
<<
info
.
device_version
;
}
}
int
getDeviceVersion
()
{
return
getDeviceVersion
(
mCameraID
);
}
int
getDeviceVersion
(
int
cameraId
,
status_t
*
status
=
NULL
)
{
camera_info
info
;
status_t
res
;
res
=
mModule
->
get_camera_info
(
cameraId
,
&
info
);
if
(
status
!=
NULL
)
*
status
=
res
;
return
info
.
device_version
;
}
private:
void
SetUpMixin
()
{
...
...
@@ -90,14 +127,12 @@ private:
EXPECT_LE
(
0
,
mCameraID
);
EXPECT_LT
(
mCameraID
,
mNumberOfCameras
);
/* HALBUG (Exynos5); crashes if trying to initialize
before calling get_camera_info */
if
(
InfoQuirk
)
{
struct
camera_info
info
;
ASSERT_EQ
(
OK
,
mModule
->
get_camera_info
(
mCameraID
,
&
info
));
}
/* HALBUG (Exynos5); crashes if we skip calling get_camera_info
before initializing. Need info anyway now. */
CreateCamera
(
mCameraID
,
&
mDevice
);
mDevice
=
new
Camera2Device
(
mCameraID
)
;
ASSERT_TRUE
(
mDevice
!
=
NULL
)
<<
"Failed to open device "
<<
mCameraID
;
ASSERT_EQ
(
OK
,
mDevice
->
initialize
(
mModule
))
<<
"Failed to initialize device "
<<
mCameraID
;
}
...
...
@@ -110,7 +145,7 @@ private:
protected:
int
mNumberOfCameras
;
camera_module_t
*
mModule
;
sp
<
Camera
2
Device
>
mDevice
;
sp
<
CameraDevice
Base
>
mDevice
;
private:
int
mCameraID
;
...
...
This diff is collapsed.
Click to expand it.
tests/camera2/CameraModuleTests.cpp
View file @
4c543a14
...
...
@@ -23,7 +23,7 @@
#include "hardware/hardware.h"
#include "hardware/camera2.h"
#include "Camera
2
Device.h"
#include "CameraDevice
Base
.h"
#include "utils/StrongPointer.h"
#include "CameraModuleFixture.h"
...
...
@@ -54,13 +54,6 @@ public:
return
stat
;
}
int
getDeviceVersion
(
int
cameraId
,
status_t
*
status
)
{
camera_info
info
;
*
status
=
mModule
->
get_camera_info
(
cameraId
,
&
info
);
return
info
.
device_version
;
}
bool
isDeviceVersionHal2
(
int
cameraId
,
status_t
*
status
)
{
return
getDeviceVersion
(
cameraId
,
status
)
>=
CAMERA_DEVICE_API_VERSION_2_0
;
...
...
@@ -72,8 +65,7 @@ TEST_F(CameraModuleTest, LoadModule) {
TEST_EXTENSION_FORKING_INIT
;
for
(
int
i
=
0
;
i
<
mNumberOfCameras
;
++
i
)
{
mDevice
=
new
Camera2Device
(
i
);
CreateCamera
(
i
,
&
mDevice
);
ASSERT_EQ
(
OK
,
initializeDevice
(
i
))
<<
"Failed to initialize device "
<<
i
;
mDevice
.
clear
();
...
...
@@ -88,6 +80,8 @@ TEST_F(CameraModuleTest, LoadModuleBadIndices) {
int
idx
[]
=
{
-
1
,
mNumberOfCameras
,
mNumberOfCameras
+
1
};
for
(
unsigned
i
=
0
;
i
<
sizeof
(
idx
)
/
sizeof
(
idx
[
0
]);
++
i
)
{
// Since the initialization should fail at device open(), it doesn't
// matter which version of CameraNDevice is used here
mDevice
=
new
Camera2Device
(
idx
[
i
]);
status_t
deviceInitializeCode
=
initializeDevice
(
idx
[
i
]);
EXPECT_NE
(
OK
,
deviceInitializeCode
);
...
...
@@ -136,4 +130,3 @@ TEST_F(CameraModuleTest, GetCameraInfoBadIndices) {
}
}
}
This diff is collapsed.
Click to expand it.
tests/camera2/CameraStreamFixture.h
View file @
4c543a14
...
...
@@ -24,6 +24,7 @@
#include <gui/Surface.h>
#include <utils/Condition.h>
#include <utils/Mutex.h>
#include <system/camera_metadata.h>
#include "CameraModuleFixture.h"
#include "TestExtensions.h"
...
...
@@ -32,14 +33,33 @@ namespace android {
namespace
camera2
{
namespace
tests
{
// Format specifier for picking the best format for CPU reading the given device
// version
#define CAMERA_STREAM_AUTO_CPU_FORMAT (-1)
struct
CameraStreamParams
;
void
PrintTo
(
const
CameraStreamParams
&
p
,
::
std
::
ostream
*
os
);
struct
CameraStreamParams
{
int
mFormat
;
int
mHeapCount
;
};
inline
::
std
::
ostream
&
operator
<<
(
::
std
::
ostream
&
os
,
const
CameraStreamParams
&
p
)
{
PrintTo
(
p
,
&
os
);
return
os
;
}
inline
void
PrintTo
(
const
CameraStreamParams
&
p
,
::
std
::
ostream
*
os
)
{
char
fmt
[
100
];
camera_metadata_enum_snprint
(
ANDROID_SCALER_AVAILABLE_FORMATS
,
p
.
mFormat
,
fmt
,
sizeof
(
fmt
));
*
os
<<
"{ "
;
*
os
<<
"Format: 0x"
<<
std
::
hex
<<
p
.
mFormat
<<
", "
;
*
os
<<
"Format name: "
<<
fmt
<<
", "
;
*
os
<<
"HeapCount: "
<<
p
.
mHeapCount
;
*
os
<<
" }"
;
}
...
...
@@ -71,7 +91,7 @@ private:
CameraModuleFixture
::
SetUp
();
CameraStreamParams
p
=
mParam
;
sp
<
Camera
2
Device
>
device
=
mDevice
;
sp
<
CameraDevice
Base
>
device
=
mDevice
;
/* use an arbitrary w,h */
{
...
...
@@ -136,7 +156,7 @@ protected:
};
void
CreateStream
()
{
sp
<
Camera
2
Device
>
device
=
mDevice
;
sp
<
CameraDevice
Base
>
device
=
mDevice
;
CameraStreamParams
p
=
mParam
;
mCpuConsumer
=
new
CpuConsumer
(
p
.
mHeapCount
);
...
...
@@ -145,9 +165,11 @@ protected:
mNativeWindow
=
new
Surface
(
mCpuConsumer
->
getProducerInterface
());
int
format
=
MapAutoFormat
(
p
.
mFormat
);
ASSERT_EQ
(
OK
,
device
->
createStream
(
mNativeWindow
,
mWidth
,
mHeight
,
p
.
mF
ormat
,
/*size (for jpegs)*/
0
,
mWidth
,
mHeight
,
f
ormat
,
/*size (for jpegs)*/
0
,
&
mStreamId
));
ASSERT_NE
(
-
1
,
mStreamId
);
...
...
@@ -161,6 +183,17 @@ protected:
ASSERT_EQ
(
OK
,
mDevice
->
deleteStream
(
mStreamId
));
}
int
MapAutoFormat
(
int
format
)
{
if
(
format
==
CAMERA_STREAM_AUTO_CPU_FORMAT
)
{
if
(
getDeviceVersion
()
>=
CAMERA_DEVICE_API_VERSION_3_0
)
{
format
=
HAL_PIXEL_FORMAT_YCbCr_420_888
;
}
else
{
format
=
HAL_PIXEL_FORMAT_YCrCb_420_SP
;
}
}
return
format
;
}
int
mWidth
;
int
mHeight
;
...
...
This diff is collapsed.
Click to expand it.
tests/camera2/CameraStreamTests.cpp
View file @
4c543a14
...
...
@@ -93,8 +93,8 @@ TEST_P(CameraStreamTest, CreateStream) {
std
::
cerr
<<
"Skipping test "
<<
test_info
->
test_case_name
()
<<
"."
<<
test_info
->
name
()
<<
" because the format was not available:
0x
"
<<
std
::
hex
<<
GetParam
()
.
mFormat
<<
std
::
endl
;
<<
" because the format was not available: "
<<
GetParam
()
<<
std
::
endl
;
return
;
}
}
...
...
@@ -186,4 +186,3 @@ INSTANTIATE_TEST_CASE_P(StreamParameterCombinations, CameraStreamTest,
}
}
}
This diff is collapsed.
Click to expand it.
tests/camera2/camera2.cpp
View file @
4c543a14
...
...
@@ -92,7 +92,8 @@ class Camera2Test: public testing::Test {
std
::
cout
<<
" Version: 0x"
<<
std
::
hex
<<
info
.
device_version
<<
std
::
endl
;
}
if
(
info
.
device_version
>=
CAMERA_DEVICE_API_VERSION_2_0
)
{
if
(
info
.
device_version
>=
CAMERA_DEVICE_API_VERSION_2_0
&&
info
.
device_version
<
CAMERA_DEVICE_API_VERSION_3_0
)
{
sCameraSupportsHal2
[
i
]
=
true
;
ASSERT_TRUE
(
NULL
!=
info
.
static_camera_characteristics
);
IF_ALOGV
()
{
...
...
@@ -181,12 +182,15 @@ class Camera2Test: public testing::Test {
return
OK
;
}
static
status_t
closeCameraDevice
(
camera2_device_t
*
cam_dev
)
{
static
status_t
closeCameraDevice
(
camera2_device_t
*
*
cam_dev
)
{
int
res
;
if
(
*
cam_dev
==
NULL
)
return
OK
;
ALOGV
(
"Closing camera %p"
,
cam_dev
);
hw_device_t
*
dev
=
reinterpret_cast
<
hw_device_t
*>
(
cam_dev
);
hw_device_t
*
dev
=
reinterpret_cast
<
hw_device_t
*>
(
*
cam_dev
);
res
=
dev
->
close
(
dev
);
*
cam_dev
=
NULL
;
return
res
;
}
...
...
@@ -195,7 +199,7 @@ class Camera2Test: public testing::Test {
status_t
res
;
if
(
mDevice
!=
NULL
)
{
closeCameraDevice
(
mDevice
);
closeCameraDevice
(
&
mDevice
);
}
mDevice
=
openCameraDevice
(
id
);
ASSERT_TRUE
(
NULL
!=
mDevice
)
<<
"Failed to open camera device"
;
...
...
@@ -324,7 +328,7 @@ class Camera2Test: public testing::Test {
delete
mStreams
[
i
];
}
if
(
mDevice
!=
NULL
)
{
closeCameraDevice
(
mDevice
);
closeCameraDevice
(
&
mDevice
);
}
TearDownModule
();
...
...
@@ -366,7 +370,7 @@ TEST_F(Camera2Test, OpenClose) {
camera2_device_t
*
d
=
openCameraDevice
(
id
);
ASSERT_TRUE
(
NULL
!=
d
)
<<
"Failed to open camera device"
;
res
=
closeCameraDevice
(
d
);
res
=
closeCameraDevice
(
&
d
);
ASSERT_EQ
(
NO_ERROR
,
res
)
<<
"Failed to close camera device"
;
}
}
...
...
@@ -499,7 +503,7 @@ TEST_F(Camera2Test, Capture1Raw) {
ASSERT_EQ
(
OK
,
waitUntilDrained
());
ASSERT_NO_FATAL_FAILURE
(
disconnectStream
(
streamId
));
res
=
closeCameraDevice
(
mDevice
);
res
=
closeCameraDevice
(
&
mDevice
);
ASSERT_EQ
(
NO_ERROR
,
res
)
<<
"Failed to close camera device"
;
}
...
...
@@ -802,7 +806,7 @@ TEST_F(Camera2Test, Capture1Jpeg) {
ASSERT_EQ
(
OK
,
waitUntilDrained
());
ASSERT_NO_FATAL_FAILURE
(
disconnectStream
(
streamId
));
res
=
closeCameraDevice
(
mDevice
);
res
=
closeCameraDevice
(
&
mDevice
);
ASSERT_EQ
(
NO_ERROR
,
res
)
<<
"Failed to close camera device"
;
}
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment