Initial commit
[glsdk/omapdrmtest.git] / dmabuftest.c
1 /*
2  * Copyright (C) 2011 Texas Instruments
3  * Author: Rob Clark <rob.clark@linaro.org>
4  *
5  * This program is free software; you can redistribute it and/or modify it
6  * under the terms of the GNU General Public License version 2 as published by
7  * the Free Software Foundation.
8  *
9  * This program is distributed in the hope that it will be useful, but WITHOUT
10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
12  * more details.
13  *
14  * You should have received a copy of the GNU General Public License along with
15  * this program.  If not, see <http://www.gnu.org/licenses/>.
16  */
19 #include "util.h"
21 #define NBUF 3
22 #define CNT  500
24 void
25 usage(char *name)
26 {
27         MSG("Usage: %s [OPTION]...", name);
28         MSG("Test of buffer passing between v4l2 camera and display.");
29         MSG("");
30         disp_usage();
31         v4l2_usage();
32 }
34 int
35 main(int argc, char **argv)
36 {
37         struct display *disp;
38         struct v4l2 *v4l2;
39         struct buffer **buffers;
40         int ret, i;
42         MSG("Opening Display..");
43         disp = disp_open(argc, argv);
44         if (!disp) {
45                 usage(argv[0]);
46                 return 1;
47         }
49         MSG("Opening V4L2..");
50         v4l2 = v4l2_open(argc, argv);
51         if (!v4l2) {
52                 usage(argv[0]);
53                 return 1;
54         }
56         if (check_args(argc, argv)) {
57                 /* remaining args.. print usage msg */
58                 usage(argv[0]);
59                 return 0;
60         }
62         buffers = disp_get_buffers(disp, NBUF);
63         if (!buffers) {
64                 return 1;
65         }
67         ret = v4l2_reqbufs(v4l2, buffers, NBUF);
68         if (ret) {
69                 return 1;
70         }
72         v4l2_qbuf(v4l2, buffers[0]);
73         v4l2_streamon(v4l2);
74         for (i = 1; i < CNT; i++) {
75                 v4l2_qbuf(v4l2, buffers[i % NBUF]);
76                 ret = disp_post_buffer(disp, v4l2_dqbuf(v4l2));
77                 if (ret) {
78                         return ret;
79                 }
80         }
81         v4l2_streamoff(v4l2);
82         v4l2_dqbuf(v4l2);
84         MSG("Ok!");
86         return ret;
87 }