Blender  V3.3
COM_MetaData.cc
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later
2  * Copyright 2021 Blender Foundation. */
3 
4 #include "COM_MetaData.h"
5 
6 #include "BKE_image.h"
7 
8 #include "RE_pipeline.h"
9 
10 namespace blender::compositor {
11 
13 {
14  entries_.add(key, value);
15 }
16 
17 void MetaData::add_cryptomatte_entry(const blender::StringRef layer_name,
18  const blender::StringRefNull key,
19  const blender::StringRef value)
20 {
22 }
23 
25 {
26  std::string cryptomatte_hash = entries_.pop_default(META_DATA_KEY_CRYPTOMATTE_HASH, "");
27  std::string cryptomatte_conversion = entries_.pop_default(META_DATA_KEY_CRYPTOMATTE_CONVERSION,
28  "");
29  std::string cryptomatte_manifest = entries_.pop_default(META_DATA_KEY_CRYPTOMATTE_MANIFEST, "");
30 
31  if (cryptomatte_hash.length() || cryptomatte_conversion.length() ||
32  cryptomatte_manifest.length()) {
33  add_cryptomatte_entry(layer_name, "name", layer_name);
34  }
35  if (cryptomatte_hash.length()) {
36  add_cryptomatte_entry(layer_name, "hash", cryptomatte_hash);
37  }
38  if (cryptomatte_conversion.length()) {
39  add_cryptomatte_entry(layer_name, "conversion", cryptomatte_conversion);
40  }
41  if (cryptomatte_manifest.length()) {
42  add_cryptomatte_entry(layer_name, "manifest", cryptomatte_manifest);
43  }
44 }
45 
46 void MetaData::add_to_render_result(RenderResult *render_result) const
47 {
48  for (Map<std::string, std::string>::Item entry : entries_.items()) {
49  BKE_render_result_stamp_data(render_result, entry.key.c_str(), entry.value.c_str());
50  }
51 }
52 
55 {
56  if (!meta_data) {
57  meta_data = std::make_unique<MetaData>();
58  }
59  meta_data->add(key, value);
60 }
61 
63 {
65  "manifest");
67  "hash");
69  "conversion");
70 }
71 
73  const char *propname,
74  char *propvalue,
75  int UNUSED(len))
76 {
78  blender::StringRefNull key(propname);
79  if (key == data->hash_key) {
80  data->add_meta_data(META_DATA_KEY_CRYPTOMATTE_HASH, propvalue);
81  }
82  else if (key == data->conversion_key) {
83  data->add_meta_data(META_DATA_KEY_CRYPTOMATTE_CONVERSION, propvalue);
84  }
85  else if (key == data->manifest_key) {
86  data->add_meta_data(META_DATA_KEY_CRYPTOMATTE_MANIFEST, propvalue);
87  }
88 }
89 
90 } // namespace blender::compositor
void BKE_render_result_stamp_data(struct RenderResult *rr, const char *key, const char *value)
#define UNUSED(x)
uint64_t hash_key
Definition: array_store.c:200
bool add(const Key &key, const Value &value)
Definition: BLI_map.hh:250
ItemIterator items() const
Definition: BLI_map.hh:859
Value pop_default(const Key &key, const Value &default_value)
Definition: BLI_map.hh:394
void add_to_render_result(RenderResult *render_result) const
Definition: COM_MetaData.cc:46
void add(const blender::StringRef key, const blender::StringRef value)
Definition: COM_MetaData.cc:12
void replace_hash_neutral_cryptomatte_keys(const blender::StringRef layer_name)
Definition: COM_MetaData.cc:24
int len
Definition: draw_manager.c:108
std::string BKE_cryptomatte_meta_data_key(const StringRef layer_name, const StringRefNull key_name)
Definition: cryptomatte.cc:470
constexpr blender::StringRef META_DATA_KEY_CRYPTOMATTE_CONVERSION("cryptomatte/{hash}/conversion")
constexpr blender::StringRef META_DATA_KEY_CRYPTOMATTE_HASH("cryptomatte/{hash}/hash")
constexpr blender::StringRef META_DATA_KEY_CRYPTOMATTE_MANIFEST("cryptomatte/{hash}/manifest")
void add_meta_data(blender::StringRef key, blender::StringRefNull value)
Definition: COM_MetaData.cc:53
void set_cryptomatte_keys(blender::StringRef cryptomatte_layer_name)
Definition: COM_MetaData.cc:62
static void extract_cryptomatte_meta_data(void *_data, const char *propname, char *propvalue, int UNUSED(len))
Definition: COM_MetaData.cc:72