blob: 99c718b296d598bf2a83858368ee595dc8ec2e46 [file] [log] [blame]
Ed Tanous93f987d2017-04-17 17:52:36 -07001#pragma once
2
3#include <vector>
4#include <assert.h>
5
6#include <ast_video_types.hpp>
7
8#include <video.h>
9#include <iostream>
10
11namespace AstVideo {
12class VideoPuller {
13 public:
14 VideoPuller() : image_info(){};
15
16 void initialize() {
17 std::cout << "Opening /dev/video\n";
18 video_fd = open("/dev/video", O_RDWR);
19 if (!video_fd) {
20 std::cout << "Failed to open /dev/video\n";
21 // TODO(Ed) throw exception?
22 } else {
23 std::cout << "Opened successfully\n";
24 }
25 }
26
27 RawVideoBuffer read_video() {
28 assert(video_fd != 0);
29 RawVideoBuffer raw;
30
31 IMAGE_INFO image_info{};
32 image_info.do_image_refresh = 1; // full frame refresh
33 image_info.qc_valid = 0; // quick cursor disabled
34 image_info.parameter.features.w = 0;
35 image_info.parameter.features.h = 0;
36 image_info.parameter.features.chrom_tbl = 0; // level
37 image_info.parameter.features.lumin_tbl = 0;
38 image_info.parameter.features.jpg_fmt = 1;
39 image_info.parameter.features.buf =
40 reinterpret_cast<unsigned char *>(raw.buffer.data());
41 image_info.crypttype = -1;
42 std::cout << "Writing\n";
43
44 int status;
45 /*
46 status = write(video_fd, reinterpret_cast<char*>(&image_info),
47 sizeof(image_info));
48 if (status != sizeof(image_info)) {
49 std::cout << "Write failed. Return: " << status << "\n";
50 perror("perror output:");
51 }
52
53 std::cout << "Write done\n";
54 */
55 std::cout << "Reading\n";
56 status = read(video_fd, reinterpret_cast<char *>(&image_info),
57 sizeof(image_info));
58 std::cout << "Reading\n";
59
60 if (status != 0) {
61 std::cout << "Read failed with status " << status << "\n";
62 }
63
64 raw.buffer.resize(image_info.len);
65
66 raw.height = image_info.parameter.features.h;
67 raw.width = image_info.parameter.features.w;
68 if (image_info.parameter.features.jpg_fmt == 422) {
69 raw.mode = YuvMode::YUV420;
70 } else {
71 raw.mode = YuvMode::YUV444;
72 }
73 return raw;
74 }
75
76 private:
77 int video_fd;
78 IMAGE_INFO image_info;
79};
80}