omx cam: add test app
[glsdk/omapdrmtest.git] / omx_cam / output.h
1 /*
2  *  Copyright (C) 2009-2012 Texas Instruments, Inc.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *  http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
17 #ifndef _OUTPUT_H
18 #define _OUTPUT_H
20 #include <stdio.h>
22 extern "C" {
23 #include <util.h>
24 }
26 struct BufferMeta {
27   struct buffer* buffer;
28   int fd[4];
29   void* map[4];
30   BufferMeta() {
31     for (size_t i = 0; i < 4; ++i) {
32       fd[i] = 0;
33       map[i] = NULL;
34     }
35   }
36 };
38 /*!
39  * \file output.h
40  * \brief Allocation code based on Rob's
41  * \author HervĂ© Fache
42  */
44 class Output {
45 protected:
46   uint32_t display_width_;
47   uint32_t display_height_;
48   uint32_t image_width_;
49   uint32_t image_height_;
50   uint32_t buffer_width_;
51   uint32_t buffer_height_;
52   uint32_t color_;
53   uint32_t numBuffers_;
54   bool     twoD_;
55   FILE*    fd_;
56   void* handle_;
57   void* buffers_;
58 public:
59   /**
60   * @param display_width The width of the display, needs to be supported!
61   * @param display_height The height of the display, needs to be supported!
62   * @param image_width The width of the raw image
63   * @param image_height The height of the raw image
64   * @param buffer_width The requested width of the buffer
65   * @param buffer_height The requested height of the buffer
66   * @param color The FOURCC color space to use.
67   * @param numBuffers The number of desired buffers to internally allocate.
68   */
69   Output(
70       uint32_t display_width, uint32_t display_height,
71       uint32_t image_width, uint32_t image_height,
72       uint32_t buffer_width, uint32_t buffer_height,
73       uint32_t color, uint32_t numBuffers, bool twoD, bool save = false):
74     display_width_(display_width), display_height_(display_height),
75     image_width_(image_width), image_height_(image_height),
76     buffer_width_(buffer_width), buffer_height_(buffer_height),
77     color_(color), numBuffers_(numBuffers), twoD_(twoD),
78     fd_(save ? stdout /* does not matter, just not NULL */ : NULL) {}
79   int open();
80   int close();
81   struct buffer* alloc(BufferMeta* meta);
82   int free(BufferMeta* meta);
83   int render(BufferMeta* meta);
84 };
86 #endif // _OUTPUT_H