1/*
2Copyright (c) 2012, 2016, The Linux Foundation. All rights reserved.
3
4Redistribution and use in source and binary forms, with or without
5modification, are permitted provided that the following conditions are
6met:
7    * Redistributions of source code must retain the above copyright
8      notice, this list of conditions and the following disclaimer.
9    * Redistributions in binary form must reproduce the above
10      copyright notice, this list of conditions and the following
11      disclaimer in the documentation and/or other materials provided
12      with the distribution.
13    * Neither the name of The Linux Foundation nor the names of its
14      contributors may be used to endorse or promote products derived
15      from this software without specific prior written permission.
16
17THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
18WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
19MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
20ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
21BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
24BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
25WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
26OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
27IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28*/
29
30// System dependencies
31#include <pthread.h>
32
33// Camera dependencies
34#include "mm_qcamera_unit_test.h"
35#include "mm_camera_dbg.h"
36
37#define MM_QCAMERA_APP_UTEST_MAX_MAIN_LOOP 4
38#define MM_QCAM_APP_TEST_NUM 128
39
40#define MM_QCAMERA_APP_WAIT_TIME 1000000000
41
42extern int system_dimension_set(int cam_id);
43extern int stopPreview(int cam_id);
44extern int takePicture_yuv(int cam_id);
45extern int takePicture_rdi(int cam_id);
46extern int startRdi(int cam_id);
47extern int stopRdi(int cam_id);
48extern int startStats(int cam_id);
49extern int stopStats(int cam_id);
50
51
52/*
53* 1. open back
54* 2. open front
55* 3. start back
56* 4. start front
57* 5. stop back
58* 6. stop front
59* 7. close back
60* 8. close front
61* 9. take picture
62* a. start recording
63* b. stop recording
64* c. take picture rdi
65*/
66static mm_app_tc_t mm_app_tc[MM_QCAM_APP_TEST_NUM];
67static int num_test_cases = 0;
68struct test_case_params {
69  uint16_t launch;
70  uint16_t preview;
71  uint16_t recording;
72  uint16_t snapshot;
73};
74
75/*  Test case 12436857 :*/
76
77int mm_app_dtc_0(mm_camera_app_t *cam_apps)
78{
79        int rc = MM_CAMERA_OK;
80        int i,j;
81        int result = 0;
82        int front_camera = 1;
83        int back_camera = 0;
84
85        printf("\n Verifying Preview on back Camera and RDI on Front camera 0...\n");
86        LOGE("DUAL open back camera \n");
87        if(mm_app_open(back_camera) != MM_CAMERA_OK) {
88                LOGE("mm_app_open() back camera err=%d\n", rc);
89                rc = -1;
90                goto end;
91        }
92        if(system_dimension_set(back_camera) != MM_CAMERA_OK){
93                LOGE("system_dimension_set() err=%d\n", rc);
94                rc = -1;
95                goto end;
96        }
97
98        LOGE("DUAL open front camera \n");
99        if(mm_app_open(front_camera) != MM_CAMERA_OK) {
100                LOGE("mm_app_open() front camera err=%d\n", rc);
101                rc = -1;
102                goto end;
103        }
104
105        if(system_dimension_set(front_camera) != MM_CAMERA_OK){
106                LOGE("system_dimension_set() err=%d\n", rc);
107                rc = -1;
108                goto end;
109        }
110
111        LOGE("DUAL start camera Rdi for front \n");
112        if( MM_CAMERA_OK != (rc = startRdi(front_camera))) {
113               LOGE(" back camera startPreview() err=%d\n",  rc);
114                goto end;
115        }
116        mm_camera_app_wait();
117        sleep(1);
118
119        LOGE("DUAL start camera Preview for back \n");
120        if( MM_CAMERA_OK != (rc = startPreview(back_camera))) {
121                LOGE(" startPreview() backcamera err=%d\n",  rc);
122                goto end;
123        }
124        mm_camera_app_wait();
125        sleep(1);
126
127        LOGE("DUAL stop camera Rdi for front \n");
128        if( MM_CAMERA_OK != (rc = stopRdi(front_camera))) {
129                LOGE(" startPreview() backcamera err=%d\n",  rc);
130                goto end;
131        }
132        usleep(10*1000);
133
134        LOGE("DUAL close front camera\n");
135        if( mm_app_close(front_camera) != MM_CAMERA_OK) {
136                LOGE("mm_app_close() err=%d\n", rc);
137                rc = -1;
138                goto end;
139        }
140        sleep(1);
141        LOGE("DUAL stop camera Preview for back \n");
142        if( MM_CAMERA_OK != (rc = stopPreview(back_camera))) {
143                LOGD(" startPreview() err=%d\n",  rc);
144                goto end;
145        }
146        usleep(10*1000);
147        LOGE("DUAL close back camera \n");
148        if( mm_app_close(back_camera) != MM_CAMERA_OK) {
149                LOGE("mm_app_close() err=%d\n", rc);
150                rc = -1;
151                goto end;
152        }
153        LOGE("DUAL end \n");
154
155end:
156        if(rc == 0) {
157                printf("\nPassed\n");
158        }else{
159                printf("\nFailed\n");
160        }
161        LOGD("END, rc = %d\n",  rc);
162        return rc;
163}
164
165/*  Test case 12436587 :*/
166
167int mm_app_dtc_1(mm_camera_app_t *cam_apps)
168{
169        int rc = MM_CAMERA_OK;
170        int i,j;
171        int result = 0;
172        int front_camera = 1;
173        int back_camera = 0;
174
175        printf("\n Verifying Preview on back Camera and RDI on Front camera 1...\n");
176        LOGE("DUAL open back camera \n");
177        if(mm_app_open(back_camera) != MM_CAMERA_OK) {
178                LOGE("mm_app_open() back camera err=%d\n", rc);
179                rc = -1;
180                goto end;
181        }
182        if(system_dimension_set(back_camera) != MM_CAMERA_OK){
183                LOGE("system_dimension_set() err=%d\n", rc);
184                rc = -1;
185                goto end;
186        }
187
188        LOGE("DUAL open front camera \n");
189        if(mm_app_open(front_camera) != MM_CAMERA_OK) {
190                LOGE("mm_app_open() front camera err=%d\n", rc);
191                rc = -1;
192                goto end;
193        }
194
195        if(system_dimension_set(front_camera) != MM_CAMERA_OK){
196                LOGE("system_dimension_set() err=%d\n", rc);
197                rc = -1;
198                goto end;
199        }
200
201        LOGE("DUAL start camera Rdi for front \n");
202        if( MM_CAMERA_OK != (rc = startRdi(front_camera))) {
203               LOGE(" back camera startPreview() err=%d\n",  rc);
204                goto end;
205        }
206        mm_camera_app_wait();
207        sleep(1);
208
209        LOGE("DUAL start camera Preview for back \n");
210
211        if( MM_CAMERA_OK != (rc = startPreview(back_camera))) {
212                LOGE(" startPreview() backcamera err=%d\n",  rc);
213                goto end;
214        }
215        mm_camera_app_wait();
216        sleep(1);
217        LOGE("DUAL end \n");
218
219        LOGE("DUAL stop camera Preview for front \n");
220        if( MM_CAMERA_OK != (rc = stopRdi(front_camera))) {
221                LOGE(" startPreview() backcamera err=%d\n",  rc);
222                goto end;
223        }
224        usleep(10*1000);
225        LOGE("DUAL stop camera Preview for back \n");
226        if( MM_CAMERA_OK != (rc = stopPreview(back_camera))) {
227                LOGD(" startPreview() err=%d\n",  rc);
228                goto end;
229        }
230        usleep(10*1000);
231        LOGE("DUAL close front camera\n");
232        if( mm_app_close(front_camera) != MM_CAMERA_OK) {
233                LOGE("mm_app_close() err=%d\n", rc);
234                rc = -1;
235                goto end;
236        }
237        LOGE("DUAL close back camera \n");
238        if( mm_app_close(back_camera) != MM_CAMERA_OK) {
239                LOGE("mm_app_close() err=%d\n", rc);
240                rc = -1;
241                goto end;
242        }
243
244end:
245        if(rc == 0) {
246                printf("\nPassed\n");
247        }else{
248                printf("\nFailed\n");
249        }
250        LOGD("END, rc = %d\n",  rc);
251        return rc;
252}
253
254/*  Test case 12436578 :*/
255
256int mm_app_dtc_2(mm_camera_app_t *cam_apps)
257{
258        int rc = MM_CAMERA_OK;
259        int i,j;
260        int result = 0;
261        int front_camera = 1;
262        int back_camera = 0;
263
264        printf("\n Verifying Preview on back Camera and RDI on Front camera 2...\n");
265        LOGE("DUAL open back camera \n");
266        if(mm_app_open(back_camera) != MM_CAMERA_OK) {
267                LOGE("mm_app_open() back camera err=%d\n", rc);
268                rc = -1;
269                goto end;
270        }
271        if(system_dimension_set(back_camera) != MM_CAMERA_OK){
272                LOGE("system_dimension_set() err=%d\n", rc);
273                rc = -1;
274                goto end;
275        }
276
277        LOGE("DUAL open front camera \n");
278        if(mm_app_open(front_camera) != MM_CAMERA_OK) {
279                LOGE("mm_app_open() front camera err=%d\n", rc);
280                rc = -1;
281                goto end;
282        }
283
284        if(system_dimension_set(front_camera) != MM_CAMERA_OK){
285                LOGE("system_dimension_set() err=%d\n", rc);
286                rc = -1;
287                goto end;
288        }
289
290        LOGE("DUAL start camera Rdi for front \n");
291        if( MM_CAMERA_OK != (rc = startRdi(front_camera))) {
292               LOGE(" back camera startPreview() err=%d\n",  rc);
293                goto end;
294        }
295        mm_camera_app_wait();
296        sleep(1);
297
298        LOGE("DUAL start camera Preview for back \n");
299
300        if( MM_CAMERA_OK != (rc = startPreview(back_camera))) {
301                LOGE(" startPreview() backcamera err=%d\n",  rc);
302                goto end;
303        }
304        mm_camera_app_wait();
305        sleep(1);
306        LOGE("DUAL end \n");
307
308        LOGE("DUAL stop camera Preview for front \n");
309        if( MM_CAMERA_OK != (rc = stopRdi(front_camera))) {
310                LOGE(" startPreview() backcamera err=%d\n",  rc);
311                goto end;
312        }
313        usleep(10*1000);
314        LOGE("DUAL stop camera Preview for back \n");
315        if( MM_CAMERA_OK != (rc = stopPreview(back_camera))) {
316                LOGD(" startPreview() err=%d\n",  rc);
317                goto end;
318        }
319        usleep(10*1000);
320        LOGE("DUAL close back camera \n");
321        if( mm_app_close(back_camera) != MM_CAMERA_OK) {
322                LOGE("mm_app_close() err=%d\n", rc);
323                rc = -1;
324                goto end;
325        }
326        LOGE("DUAL close front camera\n");
327        if( mm_app_close(front_camera) != MM_CAMERA_OK) {
328                LOGE("mm_app_close() err=%d\n", rc);
329                rc = -1;
330                goto end;
331        }
332
333end:
334        if(rc == 0) {
335                printf("\nPassed\n");
336        }else{
337                printf("\nFailed\n");
338        }
339        LOGD("END, rc = %d\n",  rc);
340        return rc;
341}
342
343/*  Test case 241395768 : 1357 * 3, This is performed three times
344* And for each iteration 9 is performed thrice */
345
346int mm_app_dtc_3(mm_camera_app_t *cam_apps)
347{
348        int rc = MM_CAMERA_OK;
349        int i,j,k;
350        int result = 0;
351        int front_camera = 1;
352        int back_camera = 0;
353
354        printf("\n Verifying Preview and snapshot on back Camera and RDI on Front camera 3...\n");
355        LOGE("DUAL open front camera \n");
356        if(mm_app_open(front_camera) != MM_CAMERA_OK) {
357                LOGE("mm_app_open() front camera err=%d\n", rc);
358                rc = -1;
359                goto end;
360        }
361        if(system_dimension_set(front_camera) != MM_CAMERA_OK){
362                LOGE("system_dimension_set() err=%d\n", rc);
363                rc = -1;
364                goto end;
365        }
366
367        LOGE("DUAL start camera Preview for front \n");
368
369        if( MM_CAMERA_OK != (rc = startRdi(front_camera))) {
370                LOGE(" startPreview() frontcamera err=%d\n",  rc);
371                goto end;
372        }
373        mm_camera_app_wait();
374        usleep(10*1000);
375
376        for (k = 0; k < MM_QCAMERA_APP_INTERATION ; k++) {
377          LOGE("DUAL open back camera %d \n",k);
378          if(mm_app_open(back_camera) != MM_CAMERA_OK) {
379                  LOGE("mm_app_open() back camera err=%d\n", rc);
380                  rc = -1;
381                  goto end;
382          }
383
384          if(system_dimension_set(back_camera) != MM_CAMERA_OK){
385                  LOGE("system_dimension_set() err=%d\n", rc);
386                  rc = -1;
387                  goto end;
388          }
389
390          LOGE("DUAL start camera Preview for back \n");
391          if( MM_CAMERA_OK != (rc = startPreview(back_camera))) {
392                 LOGE(" back camera startPreview() err=%d\n",  rc);
393                  goto end;
394          }
395
396          for (j = 0; j < MM_QCAMERA_APP_INTERATION; j++) {
397              LOGE("DUAL take picture for back \n");
398              if ( MM_CAMERA_OK != (rc = takePicture_yuv(back_camera))) {
399                  LOGE(" TakePicture() err=%d\n",  rc);
400                  break;
401              }
402              mm_camera_app_wait();
403
404          }
405          usleep(10*1000);
406          LOGE("DUAL stop camera Preview for back \n");
407          if( MM_CAMERA_OK != (rc = stopPreview(back_camera))) {
408                  LOGE(" stopPreview() backcamera err=%d\n",  rc);
409                  goto end;
410          }
411          usleep(10*1000);
412
413          LOGE("DUAL close back camera\n");
414          if( mm_app_close(back_camera) != MM_CAMERA_OK) {
415                  LOGE("mm_app_close() err=%d\n", rc);
416                  rc = -1;
417                  goto end;
418          }
419          usleep(20*1000);
420        }
421        LOGE("DUAL stop camera Preview for Rdi \n");
422        if( MM_CAMERA_OK != (rc = stopRdi(front_camera))) {
423                LOGD(" stopRdi() err=%d\n",  rc);
424                goto end;
425        }
426        usleep(10*1000);
427        LOGE("DUAL close front camera \n");
428        if( mm_app_close(front_camera) != MM_CAMERA_OK) {
429                LOGE("mm_app_close() err=%d\n", rc);
430                rc = -1;
431                goto end;
432        }
433        LOGE("DUAL end \n");
434
435end:
436        if(rc == 0) {
437                printf("\nPassed\n");
438        }else{
439                printf("\nFailed\n");
440        }
441        LOGD("END, rc = %d\n",  rc);
442        return rc;
443}
444
445/*  Test case 2413ab5768 : 1357 * 3, This is performed three times
446* And for each iteration ab is performed thrice */
447
448int mm_app_dtc_4(mm_camera_app_t *cam_apps)
449{
450        int rc = MM_CAMERA_OK;
451        int i,j,k;
452        int result = 0;
453        int front_camera = 1;
454        int back_camera = 0;
455
456        printf("\n Verifying Preview on back Camera and RDI on Front camera 4...\n");
457        LOGE("DUAL open front camera \n");
458        if(mm_app_open(front_camera) != MM_CAMERA_OK) {
459                LOGE("mm_app_open() front camera err=%d\n", rc);
460                rc = -1;
461                goto end;
462        }
463        if(system_dimension_set(front_camera) != MM_CAMERA_OK){
464                LOGE("system_dimension_set() err=%d\n", rc);
465                rc = -1;
466                goto end;
467        }
468
469        LOGE("DUAL start camera Preview for front \n");
470
471        if( MM_CAMERA_OK != (rc = startRdi(front_camera))) {
472                LOGE(" startPreview() frontcamera err=%d\n",  rc);
473                goto end;
474        }
475        mm_camera_app_wait();
476        usleep(20*1000);
477
478        for (k = 0; k < MM_QCAMERA_APP_INTERATION ; k++){
479          LOGE("DUAL open back camera %d \n",k);
480          if(mm_app_open(back_camera) != MM_CAMERA_OK) {
481                 LOGE("mm_app_open() back camera err=%d\n", rc);
482                 rc = -1;
483                 goto end;
484          }
485
486          if(system_dimension_set(back_camera) != MM_CAMERA_OK){
487                 LOGE("system_dimension_set() err=%d\n", rc);
488                 rc = -1;
489                 goto end;
490          }
491
492          LOGE("DUAL start camera Preview for back \n");
493          if( MM_CAMERA_OK != (rc = startPreview(back_camera))) {
494                LOGE(" back camera startPreview() err=%d\n",  rc);
495                 goto end;
496          }
497          usleep(30*1000);
498
499          for (j = 0; j < MM_QCAMERA_APP_INTERATION; j++) {
500             LOGE("DUAL start camera record for back \n");
501             if ( MM_CAMERA_OK != (rc = startRecording(back_camera))) {
502                 LOGE(" StartVideorecording() err=%d\n",  rc);
503                 break;
504             }
505
506             mm_camera_app_wait();
507             usleep(15*1000);
508             LOGE("DUAL stop camera record for back \n");
509             if ( MM_CAMERA_OK != (rc = stopRecording(back_camera))) {
510                 LOGE(" Stopvideorecording() err=%d\n",  rc);
511                 break;
512             }
513          }
514          usleep(10*1000);
515
516          LOGE("DUAL stop camera Preview for back \n");
517          if( MM_CAMERA_OK != (rc = stopPreview(back_camera))) {
518                 LOGE(" stopPreview() backcamera err=%d\n",  rc);
519                 goto end;
520          }
521          usleep(10*1000);
522
523          LOGE("DUAL close back camera\n");
524          if( mm_app_close(back_camera) != MM_CAMERA_OK) {
525                 LOGE("mm_app_close() err=%d\n", rc);
526                 rc = -1;
527                 goto end;
528          }
529          usleep(20*1000);
530        }
531        LOGE("DUAL stop camera Preview for Rdi \n");
532        if( MM_CAMERA_OK != (rc = stopRdi(front_camera))) {
533                LOGD(" stopRdi() err=%d\n",  rc);
534                goto end;
535        }
536        usleep(10*1000);
537        LOGE("DUAL close front camera \n");
538        if( mm_app_close(front_camera) != MM_CAMERA_OK) {
539                LOGE("mm_app_close() err=%d\n", rc);
540                rc = -1;
541                goto end;
542        }
543        LOGE("DUAL end \n");
544
545end:
546        if(rc == 0) {
547                printf("\nPassed\n");
548        }else{
549                printf("\nFailed\n");
550        }
551        LOGD("END, rc = %d\n",  rc);
552        return rc;
553}
554
555/*  Test case 24135768 : 1357 * 3, This is performed three times*/
556
557int mm_app_dtc_5(mm_camera_app_t *cam_apps)
558{
559        int rc = MM_CAMERA_OK;
560        int i,j,k;
561        int result = 0;
562        int front_camera = 1;
563        int back_camera = 0;
564
565        printf("\n Verifying Preview on back Camera and RDI on Front camera 5...\n");
566        LOGE("DUAL open front camera \n");
567        if(mm_app_open(front_camera) != MM_CAMERA_OK) {
568                LOGE("mm_app_open() front camera err=%d\n", rc);
569                rc = -1;
570                goto end;
571        }
572        if(system_dimension_set(front_camera) != MM_CAMERA_OK){
573                LOGE("system_dimension_set() err=%d\n", rc);
574                rc = -1;
575                goto end;
576        }
577
578        LOGE("DUAL start camera Preview for front \n");
579
580        if( MM_CAMERA_OK != (rc = startRdi(front_camera))) {
581                LOGE(" startPreview() frontcamera err=%d\n",  rc);
582                goto end;
583        }
584        mm_camera_app_wait();
585        sleep(1);
586
587        for (k = 0; k < 4 ; k++) {
588          LOGE("DUAL open back camera %d \n",k);
589          if(mm_app_open(back_camera) != MM_CAMERA_OK) {
590                  LOGE("mm_app_open() back camera err=%d\n", rc);
591                  rc = -1;
592                  goto end;
593          }
594
595          if(system_dimension_set(back_camera) != MM_CAMERA_OK){
596                  LOGE("system_dimension_set() err=%d\n", rc);
597                  rc = -1;
598                  goto end;
599          }
600
601          LOGE("DUAL start camera Preview for back \n");
602          if( MM_CAMERA_OK != (rc = startPreview(back_camera))) {
603                 LOGE(" back camera startPreview() err=%d\n",  rc);
604                  goto end;
605          }
606          mm_camera_app_wait();
607          sleep(1);
608
609          LOGE("DUAL stop camera Preview for back \n");
610          if( MM_CAMERA_OK != (rc = stopPreview(back_camera))) {
611                  LOGE(" stopPreview() backcamera err=%d\n",  rc);
612                  goto end;
613          }
614          usleep(10*1000);
615
616          LOGE("DUAL close back camera\n");
617          if( mm_app_close(back_camera) != MM_CAMERA_OK) {
618                  LOGE("mm_app_close() err=%d\n", rc);
619                  rc = -1;
620                  goto end;
621          }
622          sleep(1);
623        }
624        LOGE("DUAL stop camera Preview for Rdi \n");
625        if( MM_CAMERA_OK != (rc = stopRdi(front_camera))) {
626                LOGD(" stopRdi() err=%d\n",  rc);
627                goto end;
628        }
629        usleep(10*1000);
630        LOGE("DUAL close front camera \n");
631        if( mm_app_close(front_camera) != MM_CAMERA_OK) {
632                LOGE("mm_app_close() err=%d\n", rc);
633                rc = -1;
634                goto end;
635        }
636        LOGE("DUAL end \n");
637
638end:
639        if(rc == 0) {
640                printf("\nPassed\n");
641        }else{
642                printf("\nFailed\n");
643        }
644        LOGD("END, rc = %d\n",  rc);
645        return rc;
646}
647
648/*  Test case 13246857 : 2468 * 3, This is performed three times*/
649
650int mm_app_dtc_6(mm_camera_app_t *cam_apps)
651{
652        int rc = MM_CAMERA_OK;
653        int i,j,k;
654        int result = 0;
655        int front_camera = 1;
656        int back_camera = 0;
657
658        printf("\n Verifying Preview on back Camera and RDI on Front camera 6...\n");
659        LOGE("DUAL open back camera \n");
660        if(mm_app_open(back_camera) != MM_CAMERA_OK) {
661                LOGE("mm_app_open() back camera err=%d\n", rc);
662                rc = -1;
663                goto end;
664        }
665        if(system_dimension_set(back_camera) != MM_CAMERA_OK){
666                LOGE("system_dimension_set() err=%d\n", rc);
667                rc = -1;
668                goto end;
669        }
670
671        LOGE("DUAL start camera Preview for back \n");
672
673        if( MM_CAMERA_OK != (rc = startPreview(back_camera))) {
674                LOGE(" startPreview() backcamera err=%d\n",  rc);
675                goto end;
676        }
677        mm_camera_app_wait();
678        sleep(1);
679
680        for (k = 0; k < 4 ; k++) {
681        LOGE("DUAL open front camera %d \n",k);
682        if(mm_app_open(front_camera) != MM_CAMERA_OK) {
683                LOGE("mm_app_open() front camera err=%d\n", rc);
684                rc = -1;
685                goto end;
686        }
687
688        if(system_dimension_set(front_camera) != MM_CAMERA_OK){
689                LOGE("system_dimension_set() err=%d\n", rc);
690                rc = -1;
691                goto end;
692        }
693
694        LOGE("DUAL start camera Rdi for front \n");
695        if( MM_CAMERA_OK != (rc = startRdi(front_camera))) {
696               LOGE(" back camera startPreview() err=%d\n",  rc);
697                goto end;
698        }
699        mm_camera_app_wait();
700        sleep(1);
701
702        LOGE("DUAL stop camera Preview for front \n");
703        if( MM_CAMERA_OK != (rc = stopRdi(front_camera))) {
704                LOGE(" startPreview() backcamera err=%d\n",  rc);
705                goto end;
706        }
707        usleep(10*1000);
708
709        LOGE("DUAL close front camera\n");
710        if( mm_app_close(front_camera) != MM_CAMERA_OK) {
711                LOGE("mm_app_close() err=%d\n", rc);
712                rc = -1;
713                goto end;
714        }
715        sleep(1);
716        }
717        LOGE("DUAL stop camera Preview for back \n");
718        if( MM_CAMERA_OK != (rc = stopPreview(back_camera))) {
719                LOGD(" startPreview() err=%d\n",  rc);
720                goto end;
721        }
722        usleep(10*1000);
723        LOGE("DUAL close back camera \n");
724        if( mm_app_close(back_camera) != MM_CAMERA_OK) {
725                LOGE("mm_app_close() err=%d\n", rc);
726                rc = -1;
727                goto end;
728        }
729        LOGE("DUAL end \n");
730
731end:
732        if(rc == 0) {
733                printf("\nPassed\n");
734        }else{
735                printf("\nFailed\n");
736        }
737        LOGD("END, rc = %d\n",  rc);
738        return rc;
739}
740
741/*Multi Threaded Test Cases*/
742static void *front_thread(void *data)
743{
744        int front_camera = 1;
745        int rc = MM_CAMERA_OK;
746        int i,j,k,m;
747        struct test_case_params params
748          = *((struct test_case_params *)data);
749        for (i = 0; i < params.launch; i++) {
750          LOGE("DUAL open front camera %d\n",i);
751          if(mm_app_open(front_camera) != MM_CAMERA_OK) {
752            LOGE("mm_app_open() front camera err=%d\n", rc);
753            rc = -1;
754            goto end;
755          }
756
757          if(system_dimension_set(front_camera) != MM_CAMERA_OK){
758            LOGE("system_dimension_set() err=%d\n", rc);
759            rc = -1;
760            goto end;
761          }
762
763          for (j = 0; j < params.preview; j++) {
764            LOGE("DUAL start camera Rdi for front %d ,%d \n",i,j);
765            if( MM_CAMERA_OK != (rc = startRdi(front_camera))) {
766              LOGE(" back camera startPreview() err=%d\n",  rc);
767              goto end;
768            }
769            mm_camera_app_wait();
770            usleep(20*1000);
771            for (k = 0; k < params.snapshot; k++) {
772              LOGE("DUAL take picture for front %d,%d,%d \n",i,j,k);
773              if ( MM_CAMERA_OK != (rc = takePicture_rdi(front_camera))) {
774                LOGE(" TakePicture() err=%d\n",  rc);
775                goto end;
776              }
777              mm_camera_app_wait();
778              usleep(30*1000);
779            }
780            LOGE("DUAL stop camera Rdi for front %d,%d\n",i,j);
781            if( MM_CAMERA_OK != (rc = stopRdi(front_camera))) {
782              LOGE(" startPreview() backcamera err=%d\n",  rc);
783              goto end;
784            }
785            usleep(10*1000);
786          }
787
788          LOGE("DUAL close front camera %d\n",i);
789          if( mm_app_close(front_camera) != MM_CAMERA_OK) {
790            LOGE("mm_app_close() err=%d\n", rc);
791            rc = -1;
792            goto end;
793          }
794        }
795end:
796        LOGE("DUAL front thread close %d",rc);
797        return NULL;
798}
799
800static void *back_thread(void *data)
801{
802        int rc = MM_CAMERA_OK;
803        int back_camera = 0;
804        int i,j,k,m;
805        struct test_case_params params
806          = *((struct test_case_params *)data);
807        for (i = 0; i < params.launch; i++) {
808          LOGE("DUAL open back camera %d\n",i);
809          if(mm_app_open(back_camera) != MM_CAMERA_OK) {
810            LOGE("mm_app_open() back camera err=%d\n", rc);
811            rc = -1;
812            goto end;
813          }
814          if(system_dimension_set(back_camera) != MM_CAMERA_OK){
815            LOGE("system_dimension_set() err=%d\n", rc);
816            rc = -1;
817            goto end;
818          }
819
820          for (j = 0; j < params.preview; j++) {
821            LOGE("DUAL start camera Preview for back %d, %d\n",i,j);
822            if( MM_CAMERA_OK != (rc = startPreview(back_camera))) {
823              LOGE(" startPreview() backcamera err=%d\n",  rc);
824              goto end;
825            }
826            mm_camera_app_wait();
827            usleep(20*1000);
828            for (k = 0; k < params.snapshot; k++) {
829              LOGE("DUAL take picture for back %d, %d, %d\n",i,j,k);
830              if ( MM_CAMERA_OK != (rc = takePicture_yuv(back_camera))) {
831                LOGE(" TakePicture() err=%d\n",  rc);
832                goto end;
833              }
834              mm_camera_app_wait();
835              usleep(30*1000);
836            }
837
838            for (m = 0; m < params.recording; m++) {
839              LOGE("DUAL start record for back %d, %d, %d\n",i,j,m);
840              if ( MM_CAMERA_OK != (rc = startRecording(back_camera))) {
841                LOGE(" StartVideorecording() err=%d\n",  rc);
842                break;
843              }
844
845              mm_camera_app_wait();
846              usleep(10*1000);
847              LOGE("DUAL stop camera record for back \n");
848              if ( MM_CAMERA_OK != (rc = stopRecording(back_camera))) {
849                LOGE(" Stopvideorecording() err=%d\n",  rc);
850                break;
851              }
852              usleep(10*1000);
853            }
854            LOGE("DUAL stop camera Preview for back %d, %d\n",i,j);
855            if( MM_CAMERA_OK != (rc = stopPreview(back_camera))) {
856              LOGD(" startPreview() err=%d\n",  rc);
857              goto end;
858            }
859            usleep(10*1000);
860          }
861
862          LOGE("DUAL close back camera %d\n",i);
863          if( mm_app_close(back_camera) != MM_CAMERA_OK) {
864            LOGE("mm_app_close() err=%d\n", rc);
865            rc = -1;
866            goto end;
867          }
868        }
869end:
870        LOGE("DUAL back thread close %d",rc);
871        return NULL;
872}
873
874/*  Test case m13572468 : Open & start  in 2 concurrent pthread*/
875int mm_app_dtc_7(mm_camera_app_t *cam_apps)
876{
877        int rc = MM_CAMERA_OK;
878        int result = 0;
879        pthread_t back_thread_id, front_thread_id;
880        struct test_case_params params;
881        memset(&params, 0, sizeof(struct test_case_params));
882        params.launch = 5;
883        params.preview = 5;
884        printf("\n Verifying Preview on back Camera and RDI on Front camera 7...\n");
885
886        LOGE("start back DUAL ");
887        rc = pthread_create(&back_thread_id, NULL, back_thread, &params);
888        LOGE("start front DUAL ");
889        rc = pthread_create(&front_thread_id, NULL, front_thread, &params);
890        sleep(1);
891        LOGE("stop back DUAL ");
892        rc = pthread_join(back_thread_id, NULL);
893        LOGE("stop front DUAL ");
894        rc = pthread_join(front_thread_id, NULL);
895        LOGE("DUAL end \n");
896
897end:
898        if(rc == 0) {
899          printf("\nPassed\n");
900        }else{
901          printf("\nFailed\n");
902        }
903        LOGD("END, rc = %d\n",  rc);
904        return rc;
905}
906
907/*  Test case m139572468 : Open & start in 2 concurrent pthread*/
908int mm_app_dtc_8(mm_camera_app_t *cam_apps)
909{
910        int rc = MM_CAMERA_OK;
911        int result = 0;
912
913        pthread_t back_thread_id, front_thread_id;
914        struct test_case_params bparams, fparams;
915        memset(&bparams, 0, sizeof(struct test_case_params));
916        memset(&fparams, 0, sizeof(struct test_case_params));
917        bparams.launch = 5;
918        bparams.preview = 5;
919        bparams.snapshot= 5;
920        fparams.launch = 5;
921        fparams.preview = 5;
922        printf("\n Verifying Preview on back Camera and RDI on Front camera 8...\n");
923
924        LOGE("start back DUAL ");
925        rc = pthread_create(&back_thread_id, NULL, back_thread, &bparams);
926        LOGE("start front DUAL ");
927        rc = pthread_create(&front_thread_id, NULL, front_thread, &fparams);
928        sleep(1);
929        LOGE("stop back DUAL ");
930        rc = pthread_join(back_thread_id, NULL);
931        LOGE("stop front DUAL ");
932        rc = pthread_join(front_thread_id, NULL);
933        LOGE("DUAL end \n");
934
935end:
936        if(rc == 0)
937          printf("\nPassed\n");
938        else
939          printf("\nFailed\n");
940        LOGD("END, rc = %d\n",  rc);
941        return rc;
942}
943
944/*  Test case m1395724c68 : Open & start in 2 concurrent pthread*/
945int mm_app_dtc_9(mm_camera_app_t *cam_apps)
946{
947        int rc = MM_CAMERA_OK;
948        int result = 0;
949
950        pthread_t back_thread_id, front_thread_id;
951        struct test_case_params bparams, fparams;
952        memset(&bparams, 0, sizeof(struct test_case_params));
953        memset(&fparams, 0, sizeof(struct test_case_params));
954        bparams.launch = 5;
955        bparams.preview = 5;
956        bparams.snapshot= 5;
957        fparams.launch = 5;
958        fparams.preview = 5;
959        fparams.snapshot = 5;
960        printf("\n Verifying Preview on back Camera and RDI on Front camera 9...\n");
961
962        LOGE("start back DUAL ");
963        rc = pthread_create(&back_thread_id, NULL, back_thread, &bparams);
964        LOGE("start front DUAL ");
965        rc = pthread_create(&front_thread_id, NULL, front_thread, &fparams);
966        sleep(1);
967        LOGE("stop back DUAL ");
968        rc = pthread_join(back_thread_id, NULL);
969        LOGE("stop front DUAL ");
970        rc = pthread_join(front_thread_id, NULL);
971        LOGE("DUAL end \n");
972
973end:
974        if(rc == 0) {
975          printf("\nPassed\n");
976        }else{
977          printf("\nFailed\n");
978        }
979        LOGD("END, rc = %d\n",  rc);
980        return rc;
981}
982
983/*  Test case m13ab572468 : Open & start in 2 concurrent pthread*/
984int mm_app_dtc_10(mm_camera_app_t *cam_apps)
985{
986        int rc = MM_CAMERA_OK;
987        int result = 0;
988
989        pthread_t back_thread_id, front_thread_id;
990        struct test_case_params bparams, fparams;
991        memset(&bparams, 0, sizeof(struct test_case_params));
992        memset(&fparams, 0, sizeof(struct test_case_params));
993        bparams.launch = 5;
994        bparams.preview = 5;
995        bparams.recording= 5;
996        fparams.launch = 5;
997        fparams.preview = 5;
998        printf("\n Verifying Preview on back Camera and RDI on Front camera 10...\n");
999
1000        LOGE("start back DUAL ");
1001        rc = pthread_create(&back_thread_id, NULL, back_thread, &bparams);
1002        LOGE("start front DUAL ");
1003        rc = pthread_create(&front_thread_id, NULL, front_thread, &fparams);
1004        sleep(1);
1005        LOGE("stop back DUAL ");
1006        rc = pthread_join(back_thread_id, NULL);
1007        LOGE("stop front DUAL ");
1008        rc = pthread_join(front_thread_id, NULL);
1009        LOGE("DUAL end \n");
1010end:
1011        if(rc == 0) {
1012          printf("\nPassed\n");
1013        }else{
1014          printf("\nFailed\n");
1015        }
1016        LOGD("END, rc = %d\n",  rc);
1017        return rc;
1018}
1019
1020/*  Test case m13ab5724c68 : Open & start in 2 concurrent pthread*/
1021int mm_app_dtc_11(mm_camera_app_t *cam_apps)
1022{
1023        int rc = MM_CAMERA_OK;
1024        int result = 0;
1025
1026        pthread_t back_thread_id, front_thread_id;
1027        struct test_case_params bparams, fparams;
1028        memset(&bparams, 0, sizeof(struct test_case_params));
1029        memset(&fparams, 0, sizeof(struct test_case_params));
1030        bparams.launch = 5;
1031        bparams.preview = 5;
1032        bparams.recording= 5;
1033        fparams.launch = 5;
1034        fparams.preview = 5;
1035        fparams.snapshot = 5;
1036        printf("\n Verifying Preview on back Camera and RDI on Front camera 11...\n");
1037
1038        LOGE("start back DUAL ");
1039        rc = pthread_create(&back_thread_id, NULL, back_thread, &bparams);
1040        LOGE("start front DUAL ");
1041        rc = pthread_create(&front_thread_id, NULL, front_thread, &fparams);
1042        sleep(1);
1043        LOGE("stop back DUAL ");
1044        rc = pthread_join(back_thread_id, NULL);
1045        LOGE("stop front DUAL ");
1046        rc = pthread_join(front_thread_id, NULL);
1047        LOGE("DUAL end \n");
1048
1049end:
1050        if(rc == 0) {
1051                printf("\nPassed\n");
1052        }else{
1053                printf("\nFailed\n");
1054        }
1055        LOGD("END, rc = %d\n",  rc);
1056        return rc;
1057}
1058
1059/*  Test case m1728 : Open & start in 2 concurrent pthread*/
1060int mm_app_dtc_12(mm_camera_app_t *cam_apps)
1061{
1062        int rc = MM_CAMERA_OK;
1063        int result = 0;
1064
1065        pthread_t back_thread_id, front_thread_id;
1066        struct test_case_params bparams, fparams;
1067        memset(&bparams, 0, sizeof(struct test_case_params));
1068        memset(&fparams, 0, sizeof(struct test_case_params));
1069        bparams.launch = 15;
1070        fparams.launch = 15;
1071        printf("\n Verifying Preview on back Camera and RDI on Front camera 12...\n");
1072
1073        LOGE("start back DUAL ");
1074        rc = pthread_create(&back_thread_id, NULL, back_thread, &bparams);
1075        LOGE("start front DUAL ");
1076        rc = pthread_create(&front_thread_id, NULL, front_thread, &fparams);
1077        sleep(1);
1078        LOGE("stop back DUAL ");
1079        rc = pthread_join(back_thread_id, NULL);
1080        LOGE("stop front DUAL ");
1081        rc = pthread_join(front_thread_id, NULL);
1082        LOGE("DUAL end \n");
1083
1084end:
1085        if(rc == 0) {
1086                printf("\nPassed\n");
1087        }else{
1088                printf("\nFailed\n");
1089        }
1090        LOGD("END, rc = %d\n",  rc);
1091        return rc;
1092}
1093
1094/*  Test case 2413(ab)5768
1095 *  Test the dual camera usecase. We startPreview on front camera,
1096 *  but backend will allocate RDI buffers and start front camera in
1097 *  RDI streaming mode. It then diverts RDI frames, converts them into YUV 420
1098 *  through C2D and generate preview data in the buffers allocated here.
1099 *  Back camera will use the pixel interface as usual.
1100 */
1101
1102int mm_app_dtc_13(mm_camera_app_t *cam_apps)
1103{
1104        int rc = MM_CAMERA_OK;
1105        int i,j,k;
1106        int result = 0;
1107        int front_camera = 1;
1108        int back_camera = 0;
1109
1110        printf("\n 13. Verifying Preview + Recording on back Camera and Preview(through RDI) on Front camera\n");
1111        LOGE("DUAL open front camera \n");
1112        if(mm_app_open(front_camera) != MM_CAMERA_OK) {
1113                LOGE("mm_app_open() front camera err=%d\n", rc);
1114                rc = -1;
1115                goto end;
1116        }
1117        if(system_dimension_set(front_camera) != MM_CAMERA_OK){
1118                LOGE("system_dimension_set() err=%d\n", rc);
1119                rc = -1;
1120                goto end;
1121        }
1122
1123        LOGE("DUAL start camera Preview for front \n");
1124        if( MM_CAMERA_OK != (rc = startPreview(front_camera))) {
1125               LOGE(" front camera startPreview() err=%d\n",  rc);
1126               goto end;
1127        }
1128        mm_camera_app_wait();
1129        usleep(20*1000);
1130
1131        for (k = 0; k < MM_QCAMERA_APP_INTERATION ; k++){
1132          LOGE("DUAL open back camera %d \n",k);
1133          if(mm_app_open(back_camera) != MM_CAMERA_OK) {
1134                 LOGE("mm_app_open() back camera err=%d\n", rc);
1135                 rc = -1;
1136                 goto end;
1137          }
1138
1139          if(system_dimension_set(back_camera) != MM_CAMERA_OK){
1140                 LOGE("system_dimension_set() err=%d\n", rc);
1141                 rc = -1;
1142                 goto end;
1143          }
1144
1145          LOGE("DUAL start camera Preview for back \n");
1146          if( MM_CAMERA_OK != (rc = startPreview(back_camera))) {
1147                LOGE(" back camera startPreview() err=%d\n",  rc);
1148                 goto end;
1149          }
1150          usleep(30*1000);
1151
1152          for (j = 0; j < MM_QCAMERA_APP_INTERATION; j++) {
1153             LOGE("DUAL start camera record for back Iteration %d \n", j);
1154             if ( MM_CAMERA_OK != (rc = startRecording(back_camera))) {
1155                 LOGE(" StartVideorecording() err=%d\n",  rc);
1156                 break;
1157             }
1158
1159             mm_camera_app_wait();
1160             usleep(10*1000*1000);
1161             LOGE("DUAL stop camera record for back Iteration %d\n", j);
1162             if ( MM_CAMERA_OK != (rc = stopRecording(back_camera))) {
1163                 LOGE(" Stopvideorecording() err=%d\n",  rc);
1164                 break;
1165             }
1166          }
1167          usleep(10*1000);
1168
1169          LOGE("DUAL stop camera Preview for back \n");
1170          if( MM_CAMERA_OK != (rc = stopPreview(back_camera))) {
1171                 LOGE(" stopPreview() backcamera err=%d\n",  rc);
1172                 goto end;
1173          }
1174          usleep(10*1000);
1175
1176          LOGE("DUAL close back camera\n");
1177          if( mm_app_close(back_camera) != MM_CAMERA_OK) {
1178                 LOGE("mm_app_close() err=%d\n", rc);
1179                 rc = -1;
1180                 goto end;
1181          }
1182          usleep(20*1000);
1183        }
1184        LOGE("DUAL stop camera Preview for Rdi \n");
1185        if( MM_CAMERA_OK != (rc = stopPreview(front_camera))) {
1186                LOGE(" stopPreview() frontcamera err=%d\n",  rc);
1187                goto end;
1188        }
1189        usleep(10*1000);
1190        LOGE("DUAL close front camera \n");
1191        if( mm_app_close(front_camera) != MM_CAMERA_OK) {
1192                LOGE("mm_app_close() err=%d\n", rc);
1193                rc = -1;
1194                goto end;
1195        }
1196        LOGE("DUAL end \n");
1197
1198end:
1199        if(rc == 0) {
1200                printf("\nPassed\n");
1201        }else{
1202                printf("\nFailed\n");
1203        }
1204        LOGD("END, rc = %d\n",  rc);
1205        return rc;
1206}
1207
1208/*Below 6  are reference test cases just to test the open path for dual camera*/
1209int mm_app_dtc_1243(mm_camera_app_t *cam_apps)
1210{
1211        int rc = MM_CAMERA_OK;
1212        int i,j;
1213        int result = 0;
1214        int front_camera = 1;
1215        int back_camera = 0;
1216
1217        printf("\n Verifying Preview on back Camera and RDI on Front camera...\n");
1218        LOGE("DUAL open back camera \n");
1219        if(mm_app_open(back_camera) != MM_CAMERA_OK) {
1220                LOGE("mm_app_open() back camera err=%d\n", rc);
1221                rc = -1;
1222                goto end;
1223        }
1224        if(system_dimension_set(back_camera) != MM_CAMERA_OK){
1225                LOGE("system_dimension_set() err=%d\n", rc);
1226                rc = -1;
1227                goto end;
1228        }
1229
1230        LOGE("DUAL open front camera \n");
1231        if(mm_app_open(front_camera) != MM_CAMERA_OK) {
1232                LOGE("mm_app_open() front camera err=%d\n", rc);
1233                rc = -1;
1234                goto end;
1235        }
1236
1237        if(system_dimension_set(front_camera) != MM_CAMERA_OK){
1238                LOGE("system_dimension_set() err=%d\n", rc);
1239                rc = -1;
1240                goto end;
1241        }
1242
1243        LOGE("DUAL start camera Rdi for front \n");
1244        if( MM_CAMERA_OK != (rc = startRdi(front_camera))) {
1245               LOGE(" back camera startPreview() err=%d\n",  rc);
1246                goto end;
1247        }
1248        mm_camera_app_wait();
1249        sleep(1);
1250
1251        LOGE("DUAL start camera Preview for back \n");
1252
1253        if( MM_CAMERA_OK != (rc = startPreview(back_camera))) {
1254                LOGE(" startPreview() backcamera err=%d\n",  rc);
1255                goto end;
1256        }
1257        mm_camera_app_wait();
1258        sleep(1);
1259        LOGE("DUAL end \n");
1260
1261end:
1262        if(rc == 0) {
1263                printf("\nPassed\n");
1264        }else{
1265                printf("\nFailed\n");
1266        }
1267        LOGD("END, rc = %d\n",  rc);
1268        return rc;
1269}
1270
1271int mm_app_dtc_2134(mm_camera_app_t *cam_apps)
1272{
1273        int rc = MM_CAMERA_OK;
1274        int i,j;
1275        int result = 0;
1276        int front_camera = 1;
1277        int back_camera = 0;
1278
1279        printf("\n Verifying Preview on back Camera and RDI on Front camera...\n");
1280        LOGE("DUAL open front camera \n");
1281        if(mm_app_open(front_camera) != MM_CAMERA_OK) {
1282                LOGE("mm_app_open() back camera err=%d\n", rc);
1283                rc = -1;
1284                goto end;
1285        }
1286        if(system_dimension_set(front_camera) != MM_CAMERA_OK){
1287                LOGE("system_dimension_set() err=%d\n", rc);
1288                rc = -1;
1289                goto end;
1290        }
1291
1292        LOGE("DUAL open back camera \n");
1293        if(mm_app_open(back_camera) != MM_CAMERA_OK) {
1294                LOGE("mm_app_open() front camera err=%d\n", rc);
1295                rc = -1;
1296                goto end;
1297        }
1298
1299        if(system_dimension_set(back_camera) != MM_CAMERA_OK){
1300                LOGE("system_dimension_set() err=%d\n", rc);
1301                rc = -1;
1302                goto end;
1303        }
1304
1305        LOGE("DUAL start camera Preview for front \n");
1306        if( MM_CAMERA_OK != (rc = startPreview(back_camera))) {
1307               LOGE(" back camera startPreview() err=%d\n",  rc);
1308                goto end;
1309        }
1310        mm_camera_app_wait();
1311        sleep(1);
1312
1313        LOGE("DUAL start camera Rdi for back \n");
1314
1315        if( MM_CAMERA_OK != (rc = startRdi(front_camera))) {
1316                LOGE(" startPreview() backcamera err=%d\n",  rc);
1317                goto end;
1318        }
1319        mm_camera_app_wait();
1320        sleep(1);
1321        LOGE("DUAL end \n");
1322
1323end:
1324        if(rc == 0) {
1325                printf("\nPassed\n");
1326        }else{
1327                printf("\nFailed\n");
1328        }
1329        LOGD("END, rc = %d\n",  rc);
1330        return rc;
1331}
1332int mm_app_dtc_2143(mm_camera_app_t *cam_apps)
1333{
1334        int rc = MM_CAMERA_OK;
1335        int i,j;
1336        int result = 0;
1337        int front_camera = 1;
1338        int back_camera = 0;
1339
1340        printf("\n Verifying Preview on back Camera and RDI on Front camera...\n");
1341        LOGE("DUAL open front camera \n");
1342        if(mm_app_open(front_camera) != MM_CAMERA_OK) {
1343                LOGE("mm_app_open() back camera err=%d\n", rc);
1344                rc = -1;
1345                goto end;
1346        }
1347        if(system_dimension_set(front_camera) != MM_CAMERA_OK){
1348                LOGE("system_dimension_set() err=%d\n", rc);
1349                rc = -1;
1350                goto end;
1351        }
1352
1353        LOGE("DUAL open back camera \n");
1354        if(mm_app_open(back_camera) != MM_CAMERA_OK) {
1355                LOGE("mm_app_open() front camera err=%d\n", rc);
1356                rc = -1;
1357                goto end;
1358        }
1359
1360        if(system_dimension_set(back_camera) != MM_CAMERA_OK){
1361                LOGE("system_dimension_set() err=%d\n", rc);
1362                rc = -1;
1363                goto end;
1364        }
1365
1366        LOGE("DUAL start camera rdi for front \n");
1367        if( MM_CAMERA_OK != (rc = startRdi(front_camera))) {
1368               LOGE(" back camera startPreview() err=%d\n",  rc);
1369                goto end;
1370        }
1371        mm_camera_app_wait();
1372        sleep(1);
1373
1374        LOGE("DUAL start camera preview for back \n");
1375
1376        if( MM_CAMERA_OK != (rc = startPreview(back_camera))) {
1377                LOGE(" startPreview() backcamera err=%d\n",  rc);
1378                goto end;
1379        }
1380        mm_camera_app_wait();
1381        sleep(1);
1382        LOGE("DUAL end \n");
1383
1384end:
1385        if(rc == 0) {
1386                printf("\nPassed\n");
1387        }else{
1388                printf("\nFailed\n");
1389        }
1390        LOGD("END, rc = %d\n",  rc);
1391        return rc;
1392}
1393
1394int mm_app_dtc_2413(mm_camera_app_t *cam_apps)
1395{
1396        int rc = MM_CAMERA_OK;
1397        int i,j;
1398        int result = 0;
1399        int front_camera = 1;
1400        int back_camera = 0;
1401
1402        printf("\n Verifying Preview on back Camera and RDI on Front camera...\n");
1403        LOGE("DUAL open front camera \n");
1404        if(mm_app_open(front_camera) != MM_CAMERA_OK) {
1405                LOGE("mm_app_open() back camera err=%d\n", rc);
1406                rc = -1;
1407                goto end;
1408        }
1409        if(system_dimension_set(front_camera) != MM_CAMERA_OK){
1410                LOGE("system_dimension_set() err=%d\n", rc);
1411                rc = -1;
1412                goto end;
1413        }
1414
1415        LOGE("DUAL start camera rdi for front \n");
1416        if( MM_CAMERA_OK != (rc = startRdi(front_camera))) {
1417               LOGE(" back camera startPreview() err=%d\n",  rc);
1418                goto end;
1419        }
1420        mm_camera_app_wait();
1421        sleep(1);
1422
1423        LOGE("DUAL open back camera \n");
1424        if(mm_app_open(back_camera) != MM_CAMERA_OK) {
1425                LOGE("mm_app_open() front camera err=%d\n", rc);
1426                rc = -1;
1427                goto end;
1428        }
1429
1430        if(system_dimension_set(back_camera) != MM_CAMERA_OK){
1431                LOGE("system_dimension_set() err=%d\n", rc);
1432                rc = -1;
1433                goto end;
1434        }
1435
1436        LOGE("DUAL start camera preview for back \n");
1437
1438        if( MM_CAMERA_OK != (rc = startPreview(back_camera))) {
1439                LOGE(" startPreview() backcamera err=%d\n",  rc);
1440                goto end;
1441        }
1442        mm_camera_app_wait();
1443        sleep(1);
1444        LOGE("DUAL end \n");
1445
1446end:
1447        if(rc == 0) {
1448                printf("\nPassed\n");
1449        }else{
1450                printf("\nFailed\n");
1451        }
1452        LOGD("END, rc = %d\n",  rc);
1453        return rc;
1454}
1455
1456int mm_app_dtc_1234(mm_camera_app_t *cam_apps)
1457{
1458        int rc = MM_CAMERA_OK;
1459        int i,j;
1460        int result = 0;
1461        int front_camera = 1;
1462        int back_camera = 0;
1463
1464        printf("\n Verifying Preview on back Camera and RDI on Front camera...\n");
1465        LOGE("DUAL open back camera \n");
1466        if(mm_app_open(back_camera) != MM_CAMERA_OK) {
1467                LOGE("mm_app_open() back camera err=%d\n", rc);
1468                rc = -1;
1469                goto end;
1470        }
1471        if(system_dimension_set(back_camera) != MM_CAMERA_OK){
1472                LOGE("system_dimension_set() err=%d\n", rc);
1473                rc = -1;
1474                goto end;
1475        }
1476        LOGE("DUAL open front camera \n");
1477        if(mm_app_open(front_camera) != MM_CAMERA_OK) {
1478                LOGE("mm_app_open() front camera err=%d\n", rc);
1479                rc = -1;
1480                goto end;
1481        }
1482
1483        if(system_dimension_set(front_camera) != MM_CAMERA_OK){
1484                LOGE("system_dimension_set() err=%d\n", rc);
1485                rc = -1;
1486                goto end;
1487        }
1488
1489        LOGE("DUAL start camera preview for back \n");
1490        if( MM_CAMERA_OK != (rc = startPreview(back_camera))) {
1491               LOGE(" back camera startPreview() err=%d\n",  rc);
1492                goto end;
1493        }
1494        mm_camera_app_wait();
1495        sleep(1);
1496
1497        LOGE("DUAL start camera rdi for front \n");
1498
1499        if( MM_CAMERA_OK != (rc = startRdi(front_camera))) {
1500                LOGE(" startPreview() backcamera err=%d\n",  rc);
1501                goto end;
1502        }
1503        mm_camera_app_wait();
1504        sleep(1);
1505        LOGE("DUAL end \n");
1506
1507end:
1508        if(rc == 0) {
1509                printf("\nPassed\n");
1510        }else{
1511                printf("\nFailed\n");
1512        }
1513        LOGD("END, rc = %d\n",  rc);
1514        return rc;
1515}
1516
1517int mm_app_dtc_1324(mm_camera_app_t *cam_apps)
1518{
1519        int rc = MM_CAMERA_OK;
1520        int i,j;
1521        int result = 0;
1522        int front_camera = 1;
1523        int back_camera = 0;
1524
1525        printf("\n Verifying Preview on back Camera and RDI on Front camera...\n");
1526        LOGE("DUAL start back camera \n");
1527        if(mm_app_open(back_camera) != MM_CAMERA_OK) {
1528                LOGE("mm_app_open() back camera err=%d\n", rc);
1529                rc = -1;
1530                goto end;
1531        }
1532        if(system_dimension_set(back_camera) != MM_CAMERA_OK){
1533                LOGE("system_dimension_set() err=%d\n", rc);
1534                rc = -1;
1535                goto end;
1536        }
1537        LOGE("DUAL start camera preview for back \n");
1538        if( MM_CAMERA_OK != (rc = startPreview(back_camera))) {
1539                LOGE(" back camera startPreview() err=%d\n",  rc);
1540                goto end;
1541        }
1542        //mm_camera_app_wait();
1543        sleep(1);
1544        LOGE("DUAL start front camera \n");
1545        if(mm_app_open(front_camera) != MM_CAMERA_OK) {
1546                LOGE("mm_app_open() front camera err=%d\n", rc);
1547                rc = -1;
1548                goto end;
1549        }
1550
1551       if(system_dimension_set(front_camera) != MM_CAMERA_OK){
1552                LOGE("system_dimension_set() err=%d\n", rc);
1553                rc = -1;
1554                goto end;
1555        }
1556        LOGE("DUAL start rdi preview \n");
1557
1558        if( MM_CAMERA_OK != (rc = startRdi(front_camera))) {
1559                LOGE(" startPreview() backcamera err=%d\n",  rc);
1560                goto end;
1561        }
1562        mm_camera_app_wait();
1563        sleep(1);
1564        LOGE("DUAL end \n");
1565
1566end:
1567        if(rc == 0) {
1568          printf("\nPassed\n");
1569        }else{
1570          printf("\nFailed\n");
1571        }
1572        LOGD("END, rc = %d\n",  rc);
1573        return rc;
1574}
1575
1576/* single camera test cases*/
1577int mm_app_dtc_s_0(mm_camera_app_t *cam_apps)
1578{
1579    int rc = MM_CAMERA_OK;
1580    int i,j;
1581    int result = 0;
1582    int front_camera = 1;
1583    int back_camera = 0;
1584
1585    printf("\n Verifying Preview on back Camera and RDI on Front camera...\n");
1586
1587    if(mm_app_open(back_camera) != MM_CAMERA_OK) {
1588        LOGE("mm_app_open() back camera err=%d\n", rc);
1589        rc = -1;
1590        goto end;
1591    }
1592    if(system_dimension_set(back_camera) != MM_CAMERA_OK){
1593    LOGE("system_dimension_set() err=%d\n", rc);
1594        rc = -1;
1595        goto end;
1596    }
1597
1598    if( MM_CAMERA_OK != (rc = startPreview(back_camera))) {
1599        LOGE(" back camera startPreview() err=%d\n",  rc);
1600        goto end;
1601    }
1602
1603    mm_camera_app_wait();
1604    if(mm_app_open(front_camera) != MM_CAMERA_OK) {
1605        LOGE("mm_app_open() front camera err=%d\n", rc);
1606        rc = -1;
1607        goto end;
1608    }
1609    if(system_dimension_set(front_camera) != MM_CAMERA_OK){
1610        LOGE("system_dimension_set() err=%d\n", rc);
1611        rc = -1;
1612        goto end;
1613    }
1614
1615    if( MM_CAMERA_OK != (rc = startRdi(front_camera))) {
1616        LOGE(" startPreview() backcamera err=%d\n",  rc);
1617        goto end;
1618    }
1619    mm_camera_app_wait();
1620
1621    if( MM_CAMERA_OK != (rc = stopRdi(front_camera))) {
1622        LOGE(" startPreview() backcamera err=%d\n",  rc);
1623        goto end;
1624    }
1625
1626    if( MM_CAMERA_OK != (rc = stopPreview(my_cam_app.cam_open))) {
1627        LOGD(" startPreview() err=%d\n",  rc);
1628        goto end;
1629    }
1630
1631    if( mm_app_close(my_cam_app.cam_open) != MM_CAMERA_OK) {
1632        LOGE("mm_app_close() err=%d\n", rc);
1633        rc = -1;
1634        goto end;
1635    }
1636end:
1637    if(rc == 0) {
1638        printf("\nPassed\n");
1639    }else{
1640        printf("\nFailed\n");
1641    }
1642    LOGD("END, rc = %d\n",  rc);
1643    return rc;
1644}
1645
1646int mm_app_dtc_s_1(mm_camera_app_t *cam_apps)
1647{
1648    int rc = MM_CAMERA_OK;
1649    int i,j;
1650    int result = 0;
1651
1652    printf("\n Verifying Snapshot on front and back camera...\n");
1653    for(i = 0; i < cam_apps->num_cameras; i++) {
1654        if( mm_app_open(i) != MM_CAMERA_OK) {
1655            LOGE("mm_app_open() err=%d\n", rc);
1656            rc = -1;
1657            goto end;
1658        }
1659        if(system_dimension_set(my_cam_app.cam_open) != MM_CAMERA_OK){
1660            LOGE("system_dimension_set() err=%d\n", rc);
1661            rc = -1;
1662            goto end;
1663        }
1664
1665        if( MM_CAMERA_OK != (rc = startPreview(my_cam_app.cam_open))) {
1666                LOGE(" startPreview() err=%d\n",  rc);
1667                break;
1668        }
1669        for(j = 0; j < MM_QCAMERA_APP_INTERATION; j++) {
1670            if( MM_CAMERA_OK != (rc = takePicture_yuv(my_cam_app.cam_open))) {
1671                LOGE(" TakePicture() err=%d\n",  rc);
1672                break;
1673            }
1674            /*if(mm_camera_app_timedwait() == ETIMEDOUT) {
1675                LOGE(" Snapshot/Preview Callback not received in time or qbuf Faile\n");
1676                break;
1677            }*/
1678            mm_camera_app_wait();
1679            result++;
1680        }
1681        if( MM_CAMERA_OK != (rc = stopPreview(my_cam_app.cam_open))) {
1682            LOGD(" startPreview() err=%d\n",  rc);
1683            break;
1684        }
1685        if( mm_app_close(my_cam_app.cam_open) != MM_CAMERA_OK) {
1686            LOGE("mm_app_close() err=%d\n", rc);
1687            rc = -1;
1688            goto end;
1689        }
1690        if(result != MM_QCAMERA_APP_INTERATION) {
1691            printf(" Snapshot Start/Stop Fails for Camera %d in %d iteration",  i,j);
1692            rc = -1;
1693            break;
1694        }
1695
1696        result = 0;
1697    }
1698end:
1699    if(rc == 0) {
1700        printf("\t***Passed***\n");
1701    }else{
1702        printf("\t***Failed***\n");
1703    }
1704    LOGD("END, rc = %d\n",  rc);
1705    return rc;
1706}
1707
1708int mm_app_dtc_s_2(mm_camera_app_t *cam_apps)
1709{
1710    int rc = MM_CAMERA_OK;
1711    int i,j;
1712    int result = 0;
1713
1714    printf("\n Verifying Video on front and back camera...\n");
1715    for(i = 0; i < cam_apps->num_cameras; i++) {
1716        if( mm_app_open(i) != MM_CAMERA_OK) {
1717            LOGE("mm_app_open() err=%d\n", rc);
1718            rc = -1;
1719            goto end;
1720        }
1721        if(system_dimension_set(my_cam_app.cam_open) != MM_CAMERA_OK){
1722            LOGE("system_dimension_set() err=%d\n", rc);
1723            rc = -1;
1724            goto end;
1725        }
1726
1727        if( MM_CAMERA_OK != (rc = startPreview(my_cam_app.cam_open))) {
1728            LOGE(" startPreview() err=%d\n",  rc);
1729            break;
1730        }
1731        for(j = 0; j < MM_QCAMERA_APP_INTERATION; j++) {
1732            if( MM_CAMERA_OK != (rc = startRecording(my_cam_app.cam_open))) {
1733                LOGE(" StartVideorecording() err=%d\n",  rc);
1734                break;
1735            }
1736
1737            /*if(mm_camera_app_timedwait() == ETIMEDOUT) {
1738            LOGE(" Video Callback not received in time\n");
1739            break;
1740            }*/
1741            mm_camera_app_wait();
1742            if( MM_CAMERA_OK != (rc = stopRecording(my_cam_app.cam_open))) {
1743                LOGE(" Stopvideorecording() err=%d\n",  rc);
1744                break;
1745            }
1746            result++;
1747        }
1748        if( MM_CAMERA_OK != (rc = stopPreview(my_cam_app.cam_open))) {
1749            LOGD(" startPreview() err=%d\n",  rc);
1750            break;
1751        }
1752        if( mm_app_close(my_cam_app.cam_open) != MM_CAMERA_OK) {
1753            LOGE("mm_app_close() err=%d\n", rc);
1754            rc = -1;
1755            goto end;
1756        }
1757        if(result != MM_QCAMERA_APP_INTERATION) {
1758            printf(" Video Start/Stop Fails for Camera %d in %d iteration",  i,j);
1759            rc = -1;
1760            break;
1761        }
1762
1763        result = 0;
1764    }
1765end:
1766    if(rc == 0) {
1767        printf("\nPassed\n");
1768    }else{
1769        printf("\nFailed\n");
1770    }
1771    LOGD("END, rc = %d\n",  rc);
1772    return rc;
1773}
1774
1775int mm_app_dtc_s_3(mm_camera_app_t *cam_apps)
1776{
1777    int rc = MM_CAMERA_OK;
1778    int i,j;
1779    int result = 0;
1780
1781    printf("\n Verifying RDI Stream on front and back camera...\n");
1782    if(cam_apps->num_cameras == 0) {
1783        LOGE("Query Failed: Num of cameras = %d\n", cam_apps->num_cameras);
1784        rc = -1;
1785        goto end;
1786    }
1787    for(i = 0; i < cam_apps->num_cameras; i++) {
1788        if( mm_app_open(i) != MM_CAMERA_OK) {
1789            LOGE("mm_app_open() err=%d\n", rc);
1790            rc = -1;
1791            goto end;
1792        }
1793        if(system_dimension_set(my_cam_app.cam_open) != MM_CAMERA_OK){
1794            LOGE("system_dimension_set() err=%d\n", rc);
1795            rc = -1;
1796            goto end;
1797        }
1798        for(j = 0; j < MM_QCAMERA_APP_INTERATION; j++) {
1799            if( MM_CAMERA_OK != (rc = startRdi(my_cam_app.cam_open))) {
1800                LOGE(" StartVideorecording() err=%d\n",  rc);
1801                break;
1802            }
1803
1804            /*if(mm_camera_app_timedwait() == ETIMEDOUT) {
1805            LOGE(" Video Callback not received in time\n");
1806            break;
1807            }*/
1808            mm_camera_app_wait();
1809            if( MM_CAMERA_OK != (rc = stopRdi(my_cam_app.cam_open))) {
1810                LOGE(" Stopvideorecording() err=%d\n",  rc);
1811                break;
1812            }
1813            result++;
1814        }
1815        if( mm_app_close(my_cam_app.cam_open) != MM_CAMERA_OK) {
1816            LOGE("mm_app_close() err=%d\n", rc);
1817            rc = -1;
1818            goto end;
1819        }
1820        if(result != MM_QCAMERA_APP_INTERATION) {
1821            printf(" Video Start/Stop Fails for Camera %d in %d iteration",  i,j);
1822            rc = -1;
1823            break;
1824        }
1825
1826        result = 0;
1827    }
1828end:
1829    if(rc == 0) {
1830        printf("\nPassed\n");
1831    }else{
1832        printf("\nFailed\n");
1833    }
1834    LOGD("END, rc = %d\n",  rc);
1835    return rc;
1836}
1837
1838/*Stats Test Case*/
1839int mm_app_dtc_s_5(mm_camera_app_t *cam_apps)
1840{
1841    int rc = MM_CAMERA_OK;
1842    int i,j;
1843    int result = 0;
1844    int front_camera = 1;
1845    int back_camera = 0;
1846
1847    printf("\n Verifying Preview on back Camera and RDI on Front camera...\n");
1848
1849    if(mm_app_open(back_camera) != MM_CAMERA_OK) {
1850        LOGE("mm_app_open() back camera err=%d\n", rc);
1851        rc = -1;
1852        goto end;
1853    }
1854    if(system_dimension_set(back_camera) != MM_CAMERA_OK){
1855    LOGE("system_dimension_set() err=%d\n", rc);
1856        rc = -1;
1857        goto end;
1858    }
1859
1860    if( MM_CAMERA_OK != (rc = startStats(back_camera))) {
1861        LOGE(" back camera startPreview() err=%d\n",  rc);
1862        goto end;
1863    }
1864
1865    mm_camera_app_wait();
1866
1867    if( MM_CAMERA_OK != (rc = stopStats(my_cam_app.cam_open))) {
1868        LOGD(" startPreview() err=%d\n",  rc);
1869        goto end;
1870    }
1871
1872    if( mm_app_close(my_cam_app.cam_open) != MM_CAMERA_OK) {
1873        LOGE("mm_app_close() err=%d\n", rc);
1874        rc = -1;
1875        goto end;
1876    }
1877end:
1878    if(rc == 0) {
1879        printf("\nPassed\n");
1880    }else{
1881        printf("\nFailed\n");
1882    }
1883    LOGD("END, rc = %d\n",  rc);
1884    return rc;
1885}
1886
1887int mm_app_gen_dual_test_cases()
1888{
1889    int tc = 0;
1890    memset(mm_app_tc, 0, sizeof(mm_app_tc));
1891    if(tc < MM_QCAM_APP_TEST_NUM) mm_app_tc[tc++].f = mm_app_dtc_0;
1892    if(tc < MM_QCAM_APP_TEST_NUM) mm_app_tc[tc++].f = mm_app_dtc_1;
1893    if(tc < MM_QCAM_APP_TEST_NUM) mm_app_tc[tc++].f = mm_app_dtc_2;
1894    if(tc < MM_QCAM_APP_TEST_NUM) mm_app_tc[tc++].f = mm_app_dtc_3;
1895    if(tc < MM_QCAM_APP_TEST_NUM) mm_app_tc[tc++].f = mm_app_dtc_4;
1896    if(tc < MM_QCAM_APP_TEST_NUM) mm_app_tc[tc++].f = mm_app_dtc_5;
1897    if(tc < MM_QCAM_APP_TEST_NUM) mm_app_tc[tc++].f = mm_app_dtc_6;
1898    if(tc < MM_QCAM_APP_TEST_NUM) mm_app_tc[tc++].f = mm_app_dtc_7;
1899    if(tc < MM_QCAM_APP_TEST_NUM) mm_app_tc[tc++].f = mm_app_dtc_8;
1900    if(tc < MM_QCAM_APP_TEST_NUM) mm_app_tc[tc++].f = mm_app_dtc_9;
1901    if(tc < MM_QCAM_APP_TEST_NUM) mm_app_tc[tc++].f = mm_app_dtc_10;
1902    if(tc < MM_QCAM_APP_TEST_NUM) mm_app_tc[tc++].f = mm_app_dtc_11;
1903    if(tc < MM_QCAM_APP_TEST_NUM) mm_app_tc[tc++].f = mm_app_dtc_12;
1904    if(tc < MM_QCAM_APP_TEST_NUM) mm_app_tc[tc++].f = mm_app_dtc_13;
1905
1906    return tc;
1907}
1908
1909int mm_app_dual_test_entry(mm_camera_app_t *cam_app)
1910{
1911    int rc = MM_CAMERA_OK;
1912    int i, tc = 0;
1913    int cam_id = 0;
1914
1915    tc = mm_app_gen_dual_test_cases();
1916    LOGD("Running %d test cases\n",tc);
1917    for(i = 0; i < tc; i++) {
1918        mm_app_tc[i].r = mm_app_tc[i].f(cam_app);
1919        if(mm_app_tc[i].r != MM_CAMERA_OK) {
1920            printf(" test case %d error = %d, abort unit testing engine!!!!\n",
1921                     i, mm_app_tc[i].r);
1922            rc = mm_app_tc[i].r;
1923            goto end;
1924        }
1925    }
1926end:
1927    printf("nTOTAL_TSET_CASE = %d, NUM_TEST_RAN = %d, rc=%d\n", tc, i, rc);
1928    return rc;
1929}
1930
1931
1932
1933
1934