blob: c6eaab79ba905bdadf4446f6e1766cd4fb6b1278 [file] [log] [blame]
/* Copyright (c) 2013, 2016, The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following
* disclaimer in the documentation and/or other materials provided
* with the distribution.
* * Neither the name of The Linux Foundation nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
// Camera dependencies
#include "mm_qcamera_app.h"
#include "mm_qcamera_dbg.h"
#define MM_QCAMERA_APP_UTEST_MAX_MAIN_LOOP 1
#define MM_QCAMERA_APP_UTEST_OUTER_LOOP 1
#define MM_QCAMERA_APP_UTEST_INNER_LOOP 1
#define MM_QCAM_APP_TEST_NUM 128
static mm_app_tc_t mm_app_tc[MM_QCAM_APP_TEST_NUM];
int mm_app_tc_open_close(mm_camera_app_t *cam_app)
{
int rc = MM_CAMERA_OK;
int i;
mm_camera_test_obj_t test_obj;
printf("\n Verifying open/close cameras...\n");
for (i = 0; i < cam_app->num_cameras; i++) {
memset(&test_obj, 0, sizeof(mm_camera_test_obj_t));
rc = mm_app_open(cam_app, i, &test_obj);
if (rc != MM_CAMERA_OK) {
LOGE("mm_app_open() cam_idx=%d, err=%d\n",
i, rc);
break;
}
sleep(1);
rc = mm_app_close(&test_obj);
if (rc != MM_CAMERA_OK) {
LOGE("mm_app_close() cam_idx=%d, err=%d\n",
i, rc);
break;
}
}
if (rc == MM_CAMERA_OK) {
printf("\nPassed\n");
} else {
printf("\nFailed\n");
}
LOGD("END, rc = %d\n", rc);
return rc;
}
int mm_app_tc_start_stop_preview(mm_camera_app_t *cam_app)
{
int rc = MM_CAMERA_OK;
int i, j;
mm_camera_test_obj_t test_obj;
printf("\n Verifying start/stop preview...\n");
for (i = 0; i < cam_app->num_cameras; i++) {
memset(&test_obj, 0, sizeof(mm_camera_test_obj_t));
rc = mm_app_open(cam_app, i, &test_obj);
if (rc != MM_CAMERA_OK) {
LOGE("mm_app_open() cam_idx=%d, err=%d\n",
i, rc);
break;
}
for (j = 0; j < MM_QCAMERA_APP_UTEST_INNER_LOOP; j++) {
rc = mm_app_start_preview(&test_obj);
if (rc != MM_CAMERA_OK) {
LOGE(" mm_app_start_preview() cam_idx=%d, err=%d\n",
i, rc);
break;
}
sleep(1);
rc = mm_app_stop_preview(&test_obj);
if (rc != MM_CAMERA_OK) {
LOGE(" mm_app_stop_preview() cam_idx=%d, err=%d\n",
i, rc);
break;
}
}
rc |= mm_app_close(&test_obj);
if (rc != MM_CAMERA_OK) {
LOGE("mm_app_close() cam_idx=%d, err=%d\n",
i, rc);
break;
}
}
if (rc == MM_CAMERA_OK) {
printf("\nPassed\n");
} else {
printf("\nFailed\n");
}
LOGD("END, rc = %d\n", rc);
return rc;
}
int mm_app_tc_start_stop_zsl(mm_camera_app_t *cam_app)
{
int rc = MM_CAMERA_OK;
int i, j;
mm_camera_test_obj_t test_obj;
printf("\n Verifying start/stop preview...\n");
for (i = 0; i < cam_app->num_cameras; i++) {
memset(&test_obj, 0, sizeof(mm_camera_test_obj_t));
rc = mm_app_open(cam_app, i, &test_obj);
if (rc != MM_CAMERA_OK) {
LOGE("mm_app_open() cam_idx=%d, err=%d\n",
i, rc);
break;
}
for (j = 0; j < 1; j++) {
rc = mm_app_start_preview_zsl(&test_obj);
if (rc != MM_CAMERA_OK) {
LOGE(" mm_app_start_preview_zsl() cam_idx=%d, err=%d\n",
i, rc);
break;
}
sleep(1);
rc = mm_app_stop_preview_zsl(&test_obj);
if (rc != MM_CAMERA_OK) {
LOGE(" mm_app_stop_preview_zsl() cam_idx=%d, err=%d\n",
i, rc);
break;
}
}
rc = mm_app_close(&test_obj);
if (rc != MM_CAMERA_OK) {
LOGE("mm_app_close() cam_idx=%d, err=%d\n",
i, rc);
break;
}
}
if (rc == MM_CAMERA_OK) {
printf("\nPassed\n");
} else {
printf("\nFailed\n");
}
LOGD("END, rc = %d\n", rc);
return rc;
}
int mm_app_tc_start_stop_video_preview(mm_camera_app_t *cam_app)
{
int rc = MM_CAMERA_OK;
int i, j;
mm_camera_test_obj_t test_obj;
printf("\n Verifying start/stop video preview...\n");
for (i = 0; i < cam_app->num_cameras; i++) {
memset(&test_obj, 0, sizeof(mm_camera_test_obj_t));
rc = mm_app_open(cam_app, i, &test_obj);
if (rc != MM_CAMERA_OK) {
LOGE("mm_app_open() cam_idx=%d, err=%d\n",
i, rc);
break;
}
for (j = 0; j < MM_QCAMERA_APP_UTEST_INNER_LOOP; j++) {
rc = mm_app_start_record_preview(&test_obj);
if (rc != MM_CAMERA_OK) {
LOGE("mm_app_start_record_preview() cam_idx=%d, err=%d\n",
i, rc);
break;
}
sleep(1);
rc = mm_app_stop_record_preview(&test_obj);
if (rc != MM_CAMERA_OK) {
LOGE("mm_app_stop_record_preview() cam_idx=%d, err=%d\n",
i, rc);
break;
}
}
rc = mm_app_close(&test_obj);
if (rc != MM_CAMERA_OK) {
LOGE("mm_app_close() cam_idx=%d, err=%d\n",
i, rc);
break;
}
}
if (rc == MM_CAMERA_OK) {
printf("\nPassed\n");
} else {
printf("\nFailed\n");
}
LOGD("END, rc = %d\n", rc);
return rc;
}
int mm_app_tc_start_stop_video_record(mm_camera_app_t *cam_app)
{
int rc = MM_CAMERA_OK;
int i, j;
mm_camera_test_obj_t test_obj;
printf("\n Verifying start/stop recording...\n");
for (i = 0; i < cam_app->num_cameras; i++) {
memset(&test_obj, 0, sizeof(mm_camera_test_obj_t));
rc = mm_app_open(cam_app, i, &test_obj);
if (rc != MM_CAMERA_OK) {
LOGE("mm_app_open() cam_idx=%d, err=%d\n",
i, rc);
break;
}
rc = mm_app_start_record_preview(&test_obj);
if (rc != MM_CAMERA_OK) {
LOGE("mm_app_start_record_preview() cam_idx=%d, err=%d\n",
i, rc);
mm_app_close(&test_obj);
break;
}
sleep(1);
for (j = 0; j < MM_QCAMERA_APP_UTEST_INNER_LOOP; j++) {
rc = mm_app_start_record(&test_obj);
if (rc != MM_CAMERA_OK) {
LOGE("mm_app_start_record() cam_idx=%d, err=%d\n",
i, rc);
break;
}
sleep(1);
rc = mm_app_stop_record(&test_obj);
if (rc != MM_CAMERA_OK) {
LOGE("mm_app_stop_record() cam_idx=%d, err=%d\n",
i, rc);
break;
}
}
if (rc != MM_CAMERA_OK) {
LOGE("start/stop record cam_idx=%d, err=%d\n",
i, rc);
mm_app_stop_record_preview(&test_obj);
mm_app_close(&test_obj);
break;
}
rc = mm_app_stop_record_preview(&test_obj);
if (rc != MM_CAMERA_OK) {
LOGE("mm_app_stop_record_preview() cam_idx=%d, err=%d\n",
i, rc);
mm_app_close(&test_obj);
break;
}
rc = mm_app_close(&test_obj);
if (rc != MM_CAMERA_OK) {
LOGE("mm_app_close() cam_idx=%d, err=%d\n",
i, rc);
break;
}
}
if (rc == MM_CAMERA_OK) {
printf("\nPassed\n");
} else {
printf("\nFailed\n");
}
LOGD("END, rc = %d\n", rc);
return rc;
}
int mm_app_tc_start_stop_live_snapshot(mm_camera_app_t *cam_app)
{
int rc = MM_CAMERA_OK;
int i, j;
mm_camera_test_obj_t test_obj;
printf("\n Verifying start/stop live snapshot...\n");
for (i = 0; i < cam_app->num_cameras; i++) {
memset(&test_obj, 0, sizeof(mm_camera_test_obj_t));
rc = mm_app_open(cam_app, i, &test_obj);
if (rc != MM_CAMERA_OK) {
LOGE("mm_app_open() cam_idx=%d, err=%d\n",
i, rc);
break;
}
rc = mm_app_start_record_preview(&test_obj);
if (rc != MM_CAMERA_OK) {
LOGE("mm_app_start_record_preview() cam_idx=%d, err=%d\n",
i, rc);
mm_app_close(&test_obj);
break;
}
sleep(1);
rc = mm_app_start_record(&test_obj);
if (rc != MM_CAMERA_OK) {
LOGE("mm_app_start_record() cam_idx=%d, err=%d\n",
i, rc);
mm_app_stop_record_preview(&test_obj);
mm_app_close(&test_obj);
break;
}
sleep(1);
for (j = 0; j < MM_QCAMERA_APP_UTEST_INNER_LOOP; j++) {
rc = mm_app_start_live_snapshot(&test_obj);
if (rc != MM_CAMERA_OK) {
LOGE("mm_app_start_live_snapshot() cam_idx=%d, err=%d\n",
i, rc);
break;
}
/* wait for jpeg is done */
mm_camera_app_wait();
rc = mm_app_stop_live_snapshot(&test_obj);
if (rc != MM_CAMERA_OK) {
LOGE("mm_app_stop_live_snapshot() cam_idx=%d, err=%d\n",
i, rc);
break;
}
}
if (rc != MM_CAMERA_OK) {
LOGE("start/stop live snapshot cam_idx=%d, err=%d\n",
i, rc);
mm_app_stop_record(&test_obj);
mm_app_stop_record_preview(&test_obj);
mm_app_close(&test_obj);
break;
}
rc = mm_app_stop_record(&test_obj);
if (rc != MM_CAMERA_OK) {
LOGE("mm_app_stop_record() cam_idx=%d, err=%d\n",
i, rc);
mm_app_stop_record_preview(&test_obj);
mm_app_close(&test_obj);
break;
}
sleep(1);
rc = mm_app_stop_record_preview(&test_obj);
if (rc != MM_CAMERA_OK) {
LOGE("mm_app_stop_record_preview() cam_idx=%d, err=%d\n",
i, rc);
mm_app_close(&test_obj);
break;
}
rc = mm_app_close(&test_obj);
if (rc != MM_CAMERA_OK) {
LOGE("mm_app_close() cam_idx=%d, err=%d\n",
i, rc);
break;
}
}
if (rc == MM_CAMERA_OK) {
printf("\nPassed\n");
} else {
printf("\nFailed\n");
}
LOGD("END, rc = %d\n", rc);
return rc;
}
int mm_app_tc_capture_raw(mm_camera_app_t *cam_app)
{
int rc = MM_CAMERA_OK;
int i, j;
mm_camera_test_obj_t test_obj;
uint8_t num_snapshot = 1;
uint8_t num_rcvd_snapshot = 0;
printf("\n Verifying raw capture...\n");
for (i = 0; i < cam_app->num_cameras; i++) {
memset(&test_obj, 0, sizeof(mm_camera_test_obj_t));
rc = mm_app_open(cam_app, i, &test_obj);
if (rc != MM_CAMERA_OK) {
LOGE("mm_app_open() cam_idx=%d, err=%d\n",
i, rc);
break;
}
for (j = 0; j < MM_QCAMERA_APP_UTEST_INNER_LOOP; j++) {
rc = mm_app_start_capture_raw(&test_obj, num_snapshot);
if (rc != MM_CAMERA_OK) {
LOGE(" mm_app_start_capture() cam_idx=%d, err=%d\n",
i, rc);
break;
}
while (num_rcvd_snapshot < num_snapshot) {
mm_camera_app_wait();
num_rcvd_snapshot++;
}
rc = mm_app_stop_capture_raw(&test_obj);
if (rc != MM_CAMERA_OK) {
LOGE(" mm_app_stop_capture() cam_idx=%d, err=%d\n",
i, rc);
break;
}
}
rc |= mm_app_close(&test_obj);
if (rc != MM_CAMERA_OK) {
LOGE("mm_app_close() cam_idx=%d, err=%d\n",
i, rc);
break;
}
}
if (rc == MM_CAMERA_OK) {
printf("\nPassed\n");
} else {
printf("\nFailed\n");
}
LOGD("END, rc = %d\n", rc);
return rc;
}
int mm_app_tc_capture_regular(mm_camera_app_t *cam_app)
{
int rc = MM_CAMERA_OK;
int i, j;
mm_camera_test_obj_t test_obj;
uint8_t num_snapshot = 1;
uint8_t num_rcvd_snapshot = 0;
printf("\n Verifying capture...\n");
for (i = 0; i < cam_app->num_cameras; i++) {
memset(&test_obj, 0, sizeof(mm_camera_test_obj_t));
rc = mm_app_open(cam_app, i, &test_obj);
if (rc != MM_CAMERA_OK) {
LOGE("mm_app_open() cam_idx=%d, err=%d\n",
i, rc);
break;
}
for (j = 0; j < MM_QCAMERA_APP_UTEST_INNER_LOOP; j++) {
rc = mm_app_start_capture(&test_obj, num_snapshot);
if (rc != MM_CAMERA_OK) {
LOGE(" mm_app_start_capture() cam_idx=%d, err=%d\n",
i, rc);
break;
}
while (num_rcvd_snapshot < num_snapshot) {
mm_camera_app_wait();
num_rcvd_snapshot++;
}
rc = mm_app_stop_capture(&test_obj);
if (rc != MM_CAMERA_OK) {
LOGE(" mm_app_stop_capture() cam_idx=%d, err=%d\n",
i, rc);
break;
}
}
rc = mm_app_close(&test_obj);
if (rc != MM_CAMERA_OK) {
LOGE("mm_app_close() cam_idx=%d, err=%d\n",
i, rc);
break;
}
}
if (rc == MM_CAMERA_OK) {
printf("\nPassed\n");
} else {
printf("\nFailed\n");
}
LOGD("END, rc = %d\n", rc);
return rc;
}
int mm_app_tc_capture_burst(mm_camera_app_t *cam_app)
{
int rc = MM_CAMERA_OK;
int i, j;
mm_camera_test_obj_t test_obj;
uint8_t num_snapshot = 3;
uint8_t num_rcvd_snapshot = 0;
printf("\n Verifying capture...\n");
for (i = 0; i < cam_app->num_cameras; i++) {
memset(&test_obj, 0, sizeof(mm_camera_test_obj_t));
rc = mm_app_open(cam_app, i, &test_obj);
if (rc != MM_CAMERA_OK) {
LOGE("mm_app_open() cam_idx=%d, err=%d\n",
i, rc);
break;
}
for (j = 0; j < MM_QCAMERA_APP_UTEST_INNER_LOOP; j++) {
rc = mm_app_start_capture(&test_obj, num_snapshot);
if (rc != MM_CAMERA_OK) {
LOGE(" mm_app_start_capture() cam_idx=%d, err=%d\n",
i, rc);
break;
}
while (num_rcvd_snapshot < num_snapshot) {
mm_camera_app_wait();
num_rcvd_snapshot++;
}
rc = mm_app_stop_capture(&test_obj);
if (rc != MM_CAMERA_OK) {
LOGE(" mm_app_stop_capture() cam_idx=%d, err=%d\n",
i, rc);
break;
}
}
rc = mm_app_close(&test_obj);
if (rc != MM_CAMERA_OK) {
LOGE("mm_app_close() cam_idx=%d, err=%d\n",
i, rc);
break;
}
}
if (rc == MM_CAMERA_OK) {
printf("\nPassed\n");
} else {
printf("\nFailed\n");
}
LOGD("END, rc = %d\n", rc);
return rc;
}
int mm_app_tc_rdi_burst(mm_camera_app_t *cam_app)
{
int rc = MM_CAMERA_OK, rc2 = MM_CAMERA_OK;
int i, j;
mm_camera_test_obj_t test_obj;
printf("\n Verifying rdi burst (3) capture...\n");
for (i = 0; i < cam_app->num_cameras; i++) {
memset(&test_obj, 0, sizeof(mm_camera_test_obj_t));
rc = mm_app_open(cam_app, i, &test_obj);
if (rc != MM_CAMERA_OK) {
LOGE("mm_app_open() cam_idx=%d, err=%d\n",
i, rc);
break;
}
for (j = 0; j < MM_QCAMERA_APP_UTEST_INNER_LOOP; j++) {
rc = mm_app_start_rdi(&test_obj, 3);
if (rc != MM_CAMERA_OK) {
LOGE(" mm_app_start_preview() cam_idx=%d, err=%d\n",
i, rc);
break;
}
sleep(1);
rc = mm_app_stop_rdi(&test_obj);
if (rc != MM_CAMERA_OK) {
LOGE(" mm_app_stop_preview() cam_idx=%d, err=%d\n",
i, rc);
break;
}
}
rc2 = mm_app_close(&test_obj);
if (rc2 != MM_CAMERA_OK) {
LOGE("mm_app_close() cam_idx=%d, err=%d\n",
i, rc2);
if (rc == MM_CAMERA_OK) {
rc = rc2;
}
break;
}
}
if (rc == MM_CAMERA_OK) {
printf("\nPassed\n");
} else {
printf("\nFailed\n");
}
LOGD("END, rc = %d\n", rc);
return rc;
}
int mm_app_tc_rdi_cont(mm_camera_app_t *cam_app)
{
int rc = MM_CAMERA_OK, rc2 = MM_CAMERA_OK;
int i, j;
mm_camera_test_obj_t test_obj;
printf("\n Verifying rdi continuous capture...\n");
for (i = 0; i < cam_app->num_cameras; i++) {
memset(&test_obj, 0, sizeof(mm_camera_test_obj_t));
rc = mm_app_open(cam_app, i, &test_obj);
if (rc != MM_CAMERA_OK) {
LOGE("mm_app_open() cam_idx=%d, err=%d\n",
i, rc);
break;
}
for (j = 0; j < MM_QCAMERA_APP_UTEST_INNER_LOOP; j++) {
rc = mm_app_start_rdi(&test_obj, 0);
if (rc != MM_CAMERA_OK) {
LOGE(" mm_app_start_preview() cam_idx=%d, err=%d\n",
i, rc);
break;
}
sleep(1);
rc = mm_app_stop_rdi(&test_obj);
if (rc != MM_CAMERA_OK) {
LOGE(" mm_app_stop_preview() cam_idx=%d, err=%d\n",
i, rc);
break;
}
}
rc2 = mm_app_close(&test_obj);
if (rc2 != MM_CAMERA_OK) {
LOGE("mm_app_close() cam_idx=%d, err=%d\n",
i, rc2);
if (rc == MM_CAMERA_OK) {
rc = rc2;
}
break;
}
}
if (rc == MM_CAMERA_OK) {
printf("\nPassed\n");
} else {
printf("\nFailed\n");
}
LOGD("END, rc = %d\n", rc);
return rc;
}
int mm_app_gen_test_cases()
{
int tc = 0;
memset(mm_app_tc, 0, sizeof(mm_app_tc));
if (tc < MM_QCAM_APP_TEST_NUM) mm_app_tc[tc++].f = mm_app_tc_open_close;
if (tc < MM_QCAM_APP_TEST_NUM) mm_app_tc[tc++].f = mm_app_tc_start_stop_preview;
//if (tc < MM_QCAM_APP_TEST_NUM) mm_app_tc[tc++].f = mm_app_tc_start_stop_zsl;
//if (tc < MM_QCAM_APP_TEST_NUM) mm_app_tc[tc++].f = mm_app_tc_start_stop_video_preview;
//if (tc < MM_QCAM_APP_TEST_NUM) mm_app_tc[tc++].f = mm_app_tc_start_stop_video_record;
//if (tc < MM_QCAM_APP_TEST_NUM) mm_app_tc[tc++].f = mm_app_tc_start_stop_live_snapshot;
//if (tc < MM_QCAM_APP_TEST_NUM) mm_app_tc[tc++].f = mm_app_tc_capture_regular;
//if (tc < MM_QCAM_APP_TEST_NUM) mm_app_tc[tc++].f = mm_app_tc_capture_burst;
//if (tc < MM_QCAM_APP_TEST_NUM) mm_app_tc[tc++].f = mm_app_tc_rdi_cont;
//if (tc < MM_QCAM_APP_TEST_NUM) mm_app_tc[tc++].f = mm_app_tc_rdi_burst;
return tc;
}
int mm_app_unit_test_entry(mm_camera_app_t *cam_app)
{
int rc = MM_CAMERA_OK;
int i, j, tc = 0;
tc = mm_app_gen_test_cases();
LOGD("Running %d test cases\n",tc);
for (i = 0; i < tc; i++) {
for (j = 0; j < MM_QCAMERA_APP_UTEST_OUTER_LOOP; j++) {
mm_app_tc[i].r = mm_app_tc[i].f(cam_app);
if (mm_app_tc[i].r != MM_CAMERA_OK) {
printf(" test case %d (iteration %d) error = %d, abort unit testing engine!!!!\n",
i, j, mm_app_tc[i].r);
rc = mm_app_tc[i].r;
goto end;
}
}
}
end:
printf("nTOTAL_TSET_CASE = %d, NUM_TEST_RAN = %d, rc=%d\n", tc, i, rc);
return rc;
}