Blender V4.3
blender_thumbnailer.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
23#include <fstream>
24#include <iostream>
25#include <optional>
26
27#include <fcntl.h>
28#ifndef WIN32
29# include <unistd.h> /* For read close. */
30#else
31# include "BLI_winstuff.h"
32# include "winsock2.h"
33# include <io.h> /* For open close read. */
34#endif
35
36#include "BLI_fileops.h"
37#include "BLI_filereader.h"
38#include "BLI_vector.hh"
39
40#include "blendthumb.hh"
41
47static eThumbStatus extract_png_from_blend_file(const char *src_blend, const char *dst_png)
48{
49 eThumbStatus err;
50
51 /* Open source file `src_blend`. */
52 const int src_file = BLI_open(src_blend, O_BINARY | O_RDONLY, 0);
53 if (src_file == -1) {
54 return BT_FILE_ERR;
55 }
56
57 /* Thumbnail reading is responsible for freeing `file` and closing `src_file`. */
58 FileReader *file = BLI_filereader_new_file(src_file);
59 if (file == nullptr) {
60 close(src_file);
61 return BT_FILE_ERR;
62 }
63
64 /* Extract thumbnail from file. */
65 Thumbnail thumb;
66 err = blendthumb_create_thumb_from_file(file, &thumb);
67 if (err != BT_OK) {
68 return err;
69 }
70
71 /* Write thumbnail to `dst_png`. */
72 const int dst_file = BLI_open(dst_png, O_BINARY | O_WRONLY | O_CREAT | O_TRUNC, 0666);
73 if (dst_file == -1) {
74 return BT_FILE_ERR;
75 }
76
77 std::optional<blender::Vector<uint8_t>> png_buf_opt = blendthumb_create_png_data_from_thumb(
78 &thumb);
79 if (!png_buf_opt) {
80 err = BT_ERROR;
81 }
82 else {
83 blender::Vector<uint8_t> png_buf = *png_buf_opt;
84 err = (write(dst_file, png_buf.data(), png_buf.size()) == png_buf.size()) ? BT_OK :
86 }
87 close(dst_file);
88
89 return err;
90}
91
92int main(int argc, char *argv[])
93{
94 if (argc < 3) {
95 std::cerr << "Usage: blender-thumbnailer <input.blend> <output.png>" << std::endl;
96 return -1;
97 }
98
100
101 return int(ret);
102}
File and directory operations.
#define O_BINARY
int BLI_open(const char *filepath, int oflag, int pmode) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
Wrapper for reading from various sources (e.g. raw files, compressed files, memory....
FileReader * BLI_filereader_new_file(int filedes) ATTR_WARN_UNUSED_RESULT
Compatibility-like things for windows.
static eThumbStatus extract_png_from_blend_file(const char *src_blend, const char *dst_png)
eThumbStatus blendthumb_create_thumb_from_file(FileReader *rawfile, Thumbnail *thumb)
eThumbStatus
Definition blendthumb.hh:28
@ BT_ERROR
Definition blendthumb.hh:36
@ BT_FILE_ERR
Definition blendthumb.hh:30
@ BT_OK
Definition blendthumb.hh:29
std::optional< blender::Vector< uint8_t > > blendthumb_create_png_data_from_thumb(const Thumbnail *thumb)
int64_t size() const
draw_view push_constant(Type::INT, "radiance_src") .push_constant(Type capture_info_buf storage_buf(1, Qualifier::READ, "ObjectBounds", "bounds_buf[]") .push_constant(Type draw_view int
int main()
return ret