aboutsummaryrefslogtreecommitdiff
path: root/samples/amber.cc
diff options
context:
space:
mode:
Diffstat (limited to 'samples/amber.cc')
-rw-r--r--samples/amber.cc43
1 files changed, 35 insertions, 8 deletions
diff --git a/samples/amber.cc b/samples/amber.cc
index 4d772ab..fc69f44 100644
--- a/samples/amber.cc
+++ b/samples/amber.cc
@@ -14,6 +14,7 @@
#include <cassert>
#include <cstdlib>
+#include <fstream>
#include <iostream>
#include <set>
#include <utility>
@@ -22,6 +23,7 @@
#include "amber/amber.h"
#include "amber/recipe.h"
#include "samples/config_helper.h"
+#include "samples/ppm.h"
#include "src/build-versions.h"
#include "src/make_unique.h"
@@ -247,26 +249,51 @@ int main(int argc, const char** argv) {
amber_options.config = config.get();
+ if (!options.buffer_filename.empty()) {
+ // TODO(dsinclair): Write buffer file
+ assert(false);
+ }
+
+ if (!options.image_filename.empty()) {
+ amber::BufferInfo buffer_info;
+ buffer_info.buffer_name = "framebuffer";
+ amber_options.extractions.push_back(buffer_info);
+ }
+
for (const auto& recipe_data_elem : recipe_data) {
const auto* recipe = recipe_data_elem.recipe.get();
const auto& file = recipe_data_elem.file;
amber::Amber am;
- result = am.Execute(recipe, amber_options);
+ result = am.Execute(recipe, &amber_options);
if (!result.IsSuccess()) {
std::cerr << file << ": " << result.Error() << std::endl;
failures.push_back(file);
continue;
}
- if (!options.buffer_filename.empty()) {
- // TODO(dsinclair): Write buffer file
- assert(false);
- }
-
if (!options.image_filename.empty()) {
- // TODO(dsinclair): Write image file
- assert(false);
+ std::string image;
+ for (amber::BufferInfo buffer_info : amber_options.extractions) {
+ if (buffer_info.buffer_name == "framebuffer") {
+ std::tie(result, image) = ppm::ConvertToPPM(
+ buffer_info.width, buffer_info.height, buffer_info.values);
+ break;
+ }
+ }
+ if (!result.IsSuccess()) {
+ std::cerr << result.Error() << std::endl;
+ continue;
+ }
+ std::ofstream image_file;
+ image_file.open(options.image_filename, std::ios::out | std::ios::binary);
+ if (!image_file.is_open()) {
+ std::cerr << "Cannot open file for image dump: ";
+ std::cerr << options.image_filename << std::endl;
+ continue;
+ }
+ image_file << image;
+ image_file.close();
}
}