Project

General

Profile

« Previous | Next » 

Revision 5e80c35d

Added by David Sorber almost 8 years ago

Finished up packjpg_simple utility to demonstrate that the library
works correctly.

View differences:

software/packJPG_library/lib_src/bin/packjpg_simple.cc
#include <cstdint>
#include <cstring>
#include <fstream>
#include <iostream>
#include <string>
#include <vector>
#include <boost/filesystem.hpp>
......
namespace bfs = boost::filesystem;
const std::string JPG_EXTENSION(".jpg");
const std::string PJG_EXTENSION(".pjg");
int main(int argc, char** argv)
{
std::cout << "packJPG Simple Test Utility" << std::endl;
......
}
uint32_t file_size = bfs::file_size(file_path);
std::cout << "File size: " << file_size << std::endl;
std::vector<char>* file_buffer = new std::vector<char>(file_size);
std::cout << "File size: " << file_size << std::endl;
auto file_buffer = new std::vector<unsigned char>(file_size);
// Read in the input file
std::ifstream input_stream(file_path, std::ios::binary | std::ios::in);
if (! input_stream)
{
std::cerr << "ERROR: unable to read from \"" << file_path << "\""
std::cerr << "ERROR: unable to read from \"" << file_path << "\"\n"
<< std::endl;
return -1;
}
input_stream.read(file_buffer->data(), file_size);
input_stream.read((char*)file_buffer->data(), file_size);
input_stream.close();
//~ packJPG instance = packJPG();
// Determine input, and therefore output, filetype / extension
const std::string* output_file_extension = nullptr;
if ((file_buffer->at(0) == 0xFF) && (file_buffer->at(1) == 0xD8))
{
output_file_extension = &PJG_EXTENSION;
}
else if ((file_buffer->at(0) == packJPG::pjg_magic[0]) &&
(file_buffer->at(1) == packJPG::pjg_magic[1]))
{
output_file_extension = &JPG_EXTENSION;
}
else
{
std::cerr << "Input file does not appear to be valid\n" << std::endl;
return -1;
}
// Setup packJPG instance
packJPG* instance = new packJPG();
instance->pjglib_init_streams(file_buffer->data(), 1, file_size, nullptr, 1);
// Do compression/decompression
unsigned char* out_buffer = nullptr;
uint32_t out_size = 0;
char message[MSG_SIZE];
std::memset(message, 0, MSG_SIZE);
bool rc = instance->pjglib_convert_stream2mem(&out_buffer, &out_size, message);
if (!rc)
{
std::cout << "An error occurred during the compression/decompression "
<< "operation: " << message << "\n" << std::endl;
return -1;
}
std::cout << "Status message: " << message << std::endl;
std::cout << "Output size: " << out_size << std::endl;
bfs::path out_path = bfs::path(file_path).replace_extension(*output_file_extension);
std::cout << "Output file: " << out_path << std::endl;
// Write output file
std::ofstream output_stream(out_path.string(), std::ios::binary | std::ios::out);
if (! input_stream)
{
std::cerr << "ERROR: unable to read from \"" << file_path << "\""
<< std::endl;
return -1;
}
output_stream.write((const char*)out_buffer, out_size);
output_stream.close();
// Clean up
std::free(out_buffer);
delete instance;
delete file_buffer;
return 0;
software/packJPG_library/lib_src/packjpg.h
bool unpack_pjg(void);
/* -----------------------------------------------
global variables: info about program
----------------------------------------------- */
static const unsigned char appversion;
static const char* subversion;
static const char* apptitle;
static const char* appname;
static const char* versiondate;
static const char* author;
static const char pjg_magic[2];
private:
/**************************************************************************
......
unsigned char nois_trs[4]; // bit pattern noise threshold
unsigned char segm_cnt[4]; // number of segments
/* -----------------------------------------------
global variables: info about program
----------------------------------------------- */
static const unsigned char appversion;
static const char* subversion;
static const char* apptitle;
static const char* appname;
static const char* versiondate;
static const char* author;
static const char pjg_magic[2];
};

Also available in: Unified diff