diff options
author | Ed Tanous <ed.tanous@intel.com> | 2017-03-25 02:39:25 +0300 |
---|---|---|
committer | Ed Tanous <ed.tanous@intel.com> | 2017-03-25 02:39:25 +0300 |
commit | b4d29f40923bd2d6af2666e10109469a9e557493 (patch) | |
tree | d8a46133fd2f17baa4605d483ac94cf4c8adcade /src/getvideo_main.cpp | |
parent | c81ca4220c48f0f754c47480c26b67d840f6a79e (diff) | |
download | bmcweb-b4d29f40923bd2d6af2666e10109469a9e557493.tar.xz |
incremental
Diffstat (limited to 'src/getvideo_main.cpp')
-rw-r--r-- | src/getvideo_main.cpp | 100 |
1 files changed, 80 insertions, 20 deletions
diff --git a/src/getvideo_main.cpp b/src/getvideo_main.cpp index f73ee30e78..2259b8c8bc 100644 --- a/src/getvideo_main.cpp +++ b/src/getvideo_main.cpp @@ -1,7 +1,14 @@ #include <video.h> -#include <fstream> -#include <iostream> + #include <iomanip> +#include <iostream> +#include <chrono> +#include <thread> +#include <vector> +#include <fstream> +#include <fcntl.h> +#include <unistd.h> + namespace AstVideo { class VideoPuller { @@ -10,40 +17,91 @@ class VideoPuller { void initialize() { std::cout << "Opening /dev/video\n"; - file.open("/dev/video", std::ios::out | std::ios::in | std::ios::binary); - if (!file.is_open()) { + video_fd = open("/dev/video", O_RDWR); + if (!video_fd) { std::cout << "Failed to open /dev/video\n"; + } else { + std::cout << "Opened successfully\n"; } - IMAGE_INFO image_info{}; - file.write(reinterpret_cast<char*>(&image_info), sizeof(image_info)); + std::vector<unsigned char> buffer(1024 * 1024, 0); - file.read(reinterpret_cast<char*>(&image_info), sizeof(image_info)); + IMAGE_INFO image_info{}; + image_info.do_image_refresh = 1; // full frame refresh + image_info.qc_valid = 0; // quick cursor disabled + image_info.parameter.features.w = 800; + image_info.parameter.features.h = 600; + image_info.parameter.features.chrom_tbl = 0; // level + image_info.parameter.features.lumin_tbl = 0; + image_info.parameter.features.jpg_fmt = 1; + image_info.parameter.features.buf = buffer.data(); + image_info.crypttype = -1; + std::cout << "Writing\n"; - if (file){ - std::cout << "Read succeeded\n"; + int status; + /* + status = write(video_fd, reinterpret_cast<char*>(&image_info), + sizeof(image_info)); + if (status != 0) { + std::cout << "Write failed. Return: " << status <<"\n"; + perror("perror output:"); } + */ + std::cout << "Write done\n"; + //std::this_thread::sleep_for(std::chrono::milliseconds(2000)); + std::cout << "Reading\n"; + status = read(video_fd, reinterpret_cast<char*>(&image_info), sizeof(image_info)); + std::cout << "Reading\n"; + + if (status != 0) { + std::cout << "Read failed with status " << status << "\n"; + } + auto pt = reinterpret_cast<char*>(&image_info); - for(int i=0; i<sizeof(image_info); i++){ - std::cout << std::hex << std::setfill('0') << std::setw(2) << int(*(pt + i)) << " "; + for (int i = 0; i < sizeof(image_info); i++) { + std::cout << std::hex << std::setfill('0') << std::setw(2) + << int(*(pt + i)) << " "; + } + std::cout << "\n"; + /* + for(int i = 0; i < 1024; i++){ + if (i % 16 == 0){ + std::cout << "\n"; + } + std::cout << std::hex << std::setfill('0') << std::setw(2) + << int(buffer[i]) << " "; } + */ + buffer.resize(image_info.len); + std::ofstream f("/tmp/screen.jpg",std::ios::out | std::ios::binary); + + f.write(reinterpret_cast<char*>(buffer.data()), buffer.size()); + std::cout << "\n"; std::cout << "typedef struct _video_features {\n"; - std::cout << "short jpg_fmt: " << image_info.parameter.features.jpg_fmt << "\n"; - std::cout << "short lumin_tbl;" << image_info.parameter.features.lumin_tbl << "\n"; - std::cout << "short chrom_tbl;" << image_info.parameter.features.chrom_tbl << "\n"; - std::cout << "short tolerance_noise;" << image_info.parameter.features.tolerance_noise << "\n"; - std::cout << "int w;" << image_info.parameter.features.w << "\n"; - std::cout << "int h;" << image_info.parameter.features.h << "\n"; - //std::cout << "unsigned char *buf;" << image_info.parameter.features.buf << "\n"; + std::cout << "short jpg_fmt: " << image_info.parameter.features.jpg_fmt + << "\n"; + std::cout << "short lumin_tbl;" << image_info.parameter.features.lumin_tbl + << "\n"; + std::cout << "short chrom_tbl;" << image_info.parameter.features.chrom_tbl + << "\n"; + std::cout << "short tolerance_noise;" + << image_info.parameter.features.tolerance_noise << "\n"; + std::cout << "int w; 0X" << image_info.parameter.features.w << "\n"; + std::cout << "int h; 0X" << image_info.parameter.features.h << "\n"; + + std::cout << "void* buf; 0X" << static_cast<void*>(image_info.parameter.features.buf) << "\n"; + // std::cout << "unsigned char *buf;" << image_info.parameter.features.buf + // << "\n"; std::cout << "} FEATURES_TAG;\n"; std::cout << "typedef struct _image_info {"; - std::cout << "short do_image_refresh;" << image_info.do_image_refresh << "\n"; + std::cout << "short do_image_refresh;" << image_info.do_image_refresh + << "\n"; std::cout << "char qc_valid;" << image_info.qc_valid << "\n"; std::cout << "unsigned int len;" << image_info.len << "\n"; std::cout << "int crypttype;" << image_info.crypttype << "\n"; @@ -54,8 +112,10 @@ class VideoPuller { std::cout << "} parameter;\n"; std::cout << "} IMAGE_INFO;\n"; std::cout << std::endl; + + close(video_fd); } - std::fstream file; + int video_fd; }; } |