71 lines
1.9 KiB
C++
71 lines
1.9 KiB
C++
#include "rawspeed3_capi.h"
|
|
#include <fstream>
|
|
#include <iostream>
|
|
#include <vector>
|
|
#include <stdint.h>
|
|
|
|
|
|
|
|
std::vector<uint8_t> readfile(char *fn)
|
|
{
|
|
std::ifstream is(fn,std::ifstream::binary);
|
|
if(is)
|
|
{
|
|
is.seekg(0, is.end);
|
|
size_t length = is.tellg();
|
|
is.seekg(0, is.beg);
|
|
std::vector<uint8_t> ret;
|
|
ret.resize(length+1);
|
|
is.read ((char*)ret.data(),length);
|
|
is.close();
|
|
ret[length] = 0; // zero terminated
|
|
std::cout << "File: " << fn << " size:" << ret.size() << std::endl;
|
|
return ret;
|
|
}
|
|
else
|
|
return std::vector<uint8_t>();
|
|
}
|
|
|
|
|
|
int main(int ac, char *av[])
|
|
{
|
|
if(ac < 2)
|
|
{
|
|
std::cout << "Usage: " << av[0] << " rawfile rawfile2 ...." << std::endl;
|
|
return 1;
|
|
}
|
|
rawspeed3_handle_t handle = rawspeed3_initdefault();
|
|
if(!handle)
|
|
{
|
|
std::cerr << "Unable to init rs3" << std::endl;
|
|
return 2;
|
|
}
|
|
|
|
for(int i = 1; i < ac; i++)
|
|
{
|
|
std::vector<uint8_t> rawdata = readfile(av[i]);
|
|
if (rawdata.size() < 100) {
|
|
std::cerr << "Input file " << av[i] << " too small or nonexistent" << std::endl;
|
|
continue;
|
|
}
|
|
rawspeed3_ret_t result;
|
|
int q = rawspeed3_decodefile(handle, &result, rawdata.data(),
|
|
rawdata.size(), true);
|
|
if (q >= rawspeed3_ok && q <= rawspeed3_ok_warnings) {
|
|
std::cout << "File decoded code=" << result.status <<" width=" << result.width
|
|
<< " height=" << result.height
|
|
<< " pitch=" << result.pitch
|
|
<< " filters=" << std::hex << result.filters << std::dec
|
|
<< " channels=" << result.cpp
|
|
<< " bpp=" << result.bpp
|
|
<< std::endl;
|
|
} else
|
|
std::cout << "RawSpeed wrapper error code:" << result.status
|
|
<< std::endl;
|
|
|
|
rawspeed3_release(handle);
|
|
}
|
|
|
|
rawspeed3_close(handle);
|
|
|
|
} |