mirror of
https://github.com/Telecominfraproject/OpenCellular.git
synced 2025-11-26 19:25:02 +00:00
This lets bmpbklk_utility generate BMPBLOCKs with EFIv1-compressed bitmaps. It also adds the ability to display or unpack BMPBLOCK blobs. The compression/decompression routines come from the tianocore EDK on sourceforge and are written in C, so now there's a mix of C and C++, but it works just fine. BUG=chromium-os:11491 TEST=manual cd src/platform/vboot_reference make make runbmptests Review URL: http://codereview.chromium.org/6508006 Change-Id: Ie05e1a3fd42f4694447c8c440b2432af4ac0f601
120 lines
3.5 KiB
C++
120 lines
3.5 KiB
C++
// Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
|
|
#ifndef VBOOT_REFERENCE_BMPBLK_UTILITY_H_
|
|
#define VBOOT_REFERENCE_BMPBLK_UTILITY_H_
|
|
|
|
#include "bmpblk_header.h"
|
|
|
|
#include <yaml.h>
|
|
|
|
#include <map>
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
using std::map;
|
|
using std::string;
|
|
using std::vector;
|
|
|
|
namespace vboot_reference {
|
|
|
|
/* Internal struct for contructing ImageInfo. */
|
|
typedef struct ImageConfig {
|
|
ImageInfo data;
|
|
string filename;
|
|
string raw_content;
|
|
string compressed_content;
|
|
uint32_t offset;
|
|
} ImageConfig;
|
|
|
|
/* Internal struct for contructing ScreenLayout. */
|
|
typedef struct ScreenConfig {
|
|
ScreenLayout data;
|
|
string image_names[MAX_IMAGE_IN_LAYOUT];
|
|
} ScreenConfig;
|
|
|
|
typedef map<string, ImageConfig> StrImageConfigMap;
|
|
typedef map<string, ScreenConfig> StrScreenConfigMap;
|
|
|
|
/* Internal struct for contructing the whole BmpBlock. */
|
|
typedef struct BmpBlockConfig {
|
|
string config_filename;
|
|
BmpBlockHeader header;
|
|
StrImageConfigMap images_map;
|
|
StrScreenConfigMap screens_map;
|
|
vector<vector<string> > localizations;
|
|
} BmpBlockConfig;
|
|
|
|
class BmpBlockUtil {
|
|
public:
|
|
BmpBlockUtil();
|
|
~BmpBlockUtil();
|
|
|
|
/* Load all the images and related infomations according to a config file. */
|
|
void load_from_config(const char *filename);
|
|
|
|
/* Compress all the images using a given comression method. */
|
|
void compress_all_images(const Compression compress);
|
|
|
|
/* Contruct the bmpblock. */
|
|
void pack_bmpblock();
|
|
|
|
/* Write the bmpblock to a file */
|
|
void write_to_bmpblock(const char *filename);
|
|
|
|
/* What compression to use for the images */
|
|
void force_compression(uint32_t compression);
|
|
|
|
private:
|
|
/* Clear all internal data. */
|
|
void initialize();
|
|
|
|
/* Elemental function called from load_from_config.
|
|
* Load the config file (yaml format) and parse it. */
|
|
void load_yaml_config(const char *filename);
|
|
|
|
/* Elemental function called from load_from_config.
|
|
* Load all image files into the internal variables. */
|
|
void load_all_image_files();
|
|
|
|
/* Elemental function called from load_from_config.
|
|
* Contruct all ImageInfo structs. */
|
|
void fill_all_image_infos();
|
|
|
|
/* Elemental function called from load_from_config.
|
|
* Contruct the BmpBlockHeader struct. */
|
|
void fill_bmpblock_header();
|
|
|
|
/* Helper functions for parsing a YAML config file. */
|
|
void expect_event(yaml_parser_t *parser, const yaml_event_type_e type);
|
|
void parse_config(yaml_parser_t *parser);
|
|
void parse_first_layer(yaml_parser_t *parser);
|
|
void parse_bmpblock(yaml_parser_t *parser);
|
|
void parse_images(yaml_parser_t *parser);
|
|
void parse_layout(yaml_parser_t *parser, ScreenConfig &screen);
|
|
void parse_screens(yaml_parser_t *parser);
|
|
void parse_localizations(yaml_parser_t *parser);
|
|
|
|
/* Useful functions */
|
|
const string read_image_file(const char *filename);
|
|
ImageFormat get_image_format(const string content);
|
|
uint32_t get_bmp_image_width(const string content);
|
|
uint32_t get_bmp_image_height(const string content);
|
|
|
|
/* Internal variable for storing the config of BmpBlock. */
|
|
BmpBlockConfig config_;
|
|
|
|
/* Internal variable for storing the content of BmpBlock. */
|
|
string bmpblock_;
|
|
|
|
/* Internal variables to determine whether or not to specify compression */
|
|
bool set_compression_; // true if we force it
|
|
uint32_t compression_; // what we force it to
|
|
};
|
|
|
|
} // namespace vboot_reference
|
|
|
|
#endif // VBOOT_REFERENCE_BMPBLK_UTILITY_H_
|