[b79a9e2eaf9] temp-sybren-alembic: Same split-up for abc_archive.{cc,h} → abc_{reader,writer}_archive.{cc,h}

Sybren A. Stüvel noreply at git.blender.org
Fri Jan 31 15:05:21 CET 2020


Commit: b79a9e2eaf94f0485d5120bd83d3f3bea5fb42e7
Author: Sybren A. Stüvel
Date:   Fri Jan 31 13:05:26 2020 +0100
Branches: temp-sybren-alembic
https://developer.blender.org/rBb79a9e2eaf94f0485d5120bd83d3f3bea5fb42e7

Same split-up for abc_archive.{cc,h} → abc_{reader,writer}_archive.{cc,h}

===================================================================

M	source/blender/alembic/CMakeLists.txt
M	source/blender/alembic/intern/abc_exporter.cc
R062	source/blender/alembic/intern/abc_archive.cc	source/blender/alembic/intern/abc_reader_archive.cc
R083	source/blender/alembic/intern/abc_archive.h	source/blender/alembic/intern/abc_reader_archive.h
A	source/blender/alembic/intern/abc_writer_archive.cc
A	source/blender/alembic/intern/abc_writer_archive.h
M	source/blender/alembic/intern/alembic_capi.cc

===================================================================

diff --git a/source/blender/alembic/CMakeLists.txt b/source/blender/alembic/CMakeLists.txt
index 2909b2f1792..8bb7051982a 100644
--- a/source/blender/alembic/CMakeLists.txt
+++ b/source/blender/alembic/CMakeLists.txt
@@ -41,9 +41,9 @@ set(INC_SYS
 )
 
 set(SRC
-  intern/abc_archive.cc
   intern/abc_customdata.cc
   intern/abc_exporter.cc
+  intern/abc_reader_archive.cc
   intern/abc_reader_camera.cc
   intern/abc_reader_curves.cc
   intern/abc_reader_mesh.cc
@@ -52,6 +52,7 @@ set(SRC
   intern/abc_reader_points.cc
   intern/abc_reader_transform.cc
   intern/abc_util.cc
+  intern/abc_writer_archive.cc
   intern/abc_writer_camera.cc
   intern/abc_writer_curves.cc
   intern/abc_writer_hair.cc
@@ -64,9 +65,9 @@ set(SRC
   intern/alembic_capi.cc
 
   ABC_alembic.h
-  intern/abc_archive.h
   intern/abc_customdata.h
   intern/abc_exporter.h
+  intern/abc_reader_archive.h
   intern/abc_reader_camera.h
   intern/abc_reader_curves.h
   intern/abc_reader_mesh.h
@@ -75,6 +76,7 @@ set(SRC
   intern/abc_reader_points.h
   intern/abc_reader_transform.h
   intern/abc_util.h
+  intern/abc_writer_archive.h
   intern/abc_writer_camera.h
   intern/abc_writer_curves.h
   intern/abc_writer_hair.h
diff --git a/source/blender/alembic/intern/abc_exporter.cc b/source/blender/alembic/intern/abc_exporter.cc
index 404124f702b..a2dd57868b5 100644
--- a/source/blender/alembic/intern/abc_exporter.cc
+++ b/source/blender/alembic/intern/abc_exporter.cc
@@ -22,7 +22,7 @@
 
 #include <cmath>
 
-#include "abc_archive.h"
+#include "abc_writer_archive.h"
 #include "abc_writer_camera.h"
 #include "abc_writer_curves.h"
 #include "abc_writer_hair.h"
diff --git a/source/blender/alembic/intern/abc_archive.cc b/source/blender/alembic/intern/abc_reader_archive.cc
similarity index 62%
copy from source/blender/alembic/intern/abc_archive.cc
copy to source/blender/alembic/intern/abc_reader_archive.cc
index 15e7efad1c3..69c50c5e56d 100644
--- a/source/blender/alembic/intern/abc_archive.cc
+++ b/source/blender/alembic/intern/abc_reader_archive.cc
@@ -21,7 +21,8 @@
  * \ingroup balembic
  */
 
-#include "abc_archive.h"
+#include "abc_reader_archive.h"
+
 extern "C" {
 #include "BKE_blender_version.h"
 #include "BKE_main.h"
@@ -42,7 +43,6 @@ using Alembic::Abc::ErrorHandler;
 using Alembic::Abc::Exception;
 using Alembic::Abc::IArchive;
 using Alembic::Abc::kWrapExisting;
-using Alembic::Abc::OArchive;
 
 static IArchive open_archive(const std::string &filename,
                              const std::vector<std::istream *> &input_streams,
@@ -141,77 +141,3 @@ Alembic::Abc::IObject ArchiveReader::getTop()
 {
   return m_archive.getTop();
 }
-
-/* ************************************************************************** */
-
-/* This kinda duplicates CreateArchiveWithInfo, but Alembic does not seem to
- * have a version supporting streams. */
-static OArchive create_archive(std::ostream *ostream,
-                               const std::string &filename,
-                               const std::string &scene_name,
-                               double scene_fps,
-                               bool ogawa)
-{
-  Alembic::Abc::MetaData abc_metadata;
-
-  abc_metadata.set(Alembic::Abc::kApplicationNameKey, "Blender");
-  abc_metadata.set(Alembic::Abc::kUserDescriptionKey, scene_name);
-  abc_metadata.set("blender_version", versionstr);
-  abc_metadata.set("FramesPerTimeUnit", std::to_string(scene_fps));
-
-  time_t raw_time;
-  time(&raw_time);
-  char buffer[128];
-
-#if defined _WIN32 || defined _WIN64
-  ctime_s(buffer, 128, &raw_time);
-#else
-  ctime_r(&raw_time, buffer);
-#endif
-
-  const std::size_t buffer_len = strlen(buffer);
-  if (buffer_len > 0 && buffer[buffer_len - 1] == '\n') {
-    buffer[buffer_len - 1] = '\0';
-  }
-
-  abc_metadata.set(Alembic::Abc::kDateWrittenKey, buffer);
-
-  ErrorHandler::Policy policy = ErrorHandler::kThrowPolicy;
-
-#ifdef WITH_ALEMBIC_HDF5
-  if (!ogawa) {
-    return OArchive(Alembic::AbcCoreHDF5::WriteArchive(), filename, abc_metadata, policy);
-  }
-#else
-  static_cast<void>(filename);
-  static_cast<void>(ogawa);
-#endif
-
-  Alembic::AbcCoreOgawa::WriteArchive archive_writer;
-  return OArchive(archive_writer(ostream, abc_metadata), kWrapExisting, policy);
-}
-
-ArchiveWriter::ArchiveWriter(const char *filename,
-                             const std::string &abc_scene_name,
-                             const Scene *scene,
-                             bool do_ogawa)
-{
-  /* Use stream to support unicode character paths on Windows. */
-  if (do_ogawa) {
-#ifdef WIN32
-    UTF16_ENCODE(filename);
-    std::wstring wstr(filename_16);
-    m_outfile.open(wstr.c_str(), std::ios::out | std::ios::binary);
-    UTF16_UN_ENCODE(filename);
-#else
-    m_outfile.open(filename, std::ios::out | std::ios::binary);
-#endif
-  }
-
-  m_archive = create_archive(&m_outfile, filename, abc_scene_name, FPS, do_ogawa);
-}
-
-OArchive &ArchiveWriter::archive()
-{
-  return m_archive;
-}
diff --git a/source/blender/alembic/intern/abc_archive.h b/source/blender/alembic/intern/abc_reader_archive.h
similarity index 83%
copy from source/blender/alembic/intern/abc_archive.h
copy to source/blender/alembic/intern/abc_reader_archive.h
index 32b1b72747f..bdb53bd0b8c 100644
--- a/source/blender/alembic/intern/abc_archive.h
+++ b/source/blender/alembic/intern/abc_reader_archive.h
@@ -21,8 +21,8 @@
  * \ingroup balembic
  */
 
-#ifndef __ABC_ARCHIVE_H__
-#define __ABC_ARCHIVE_H__
+#ifndef __ABC_READER_ARCHIVE_H__
+#define __ABC_READER_ARCHIVE_H__
 
 #include <Alembic/Abc/All.h>
 
@@ -64,17 +64,4 @@ class ArchiveReader {
   Alembic::Abc::IObject getTop();
 };
 
-class ArchiveWriter {
-  std::ofstream m_outfile;
-  Alembic::Abc::OArchive m_archive;
-
- public:
-  ArchiveWriter(const char *filename,
-                const std::string &abc_scene_name,
-                const Scene *scene,
-                bool do_ogawa);
-
-  Alembic::Abc::OArchive &archive();
-};
-
-#endif /* __ABC_ARCHIVE_H__ */
+#endif /* __ABC_READER_ARCHIVE_H__ */
diff --git a/source/blender/alembic/intern/abc_archive.cc b/source/blender/alembic/intern/abc_writer_archive.cc
similarity index 54%
rename from source/blender/alembic/intern/abc_archive.cc
rename to source/blender/alembic/intern/abc_writer_archive.cc
index 15e7efad1c3..199d8136760 100644
--- a/source/blender/alembic/intern/abc_archive.cc
+++ b/source/blender/alembic/intern/abc_writer_archive.cc
@@ -21,7 +21,7 @@
  * \ingroup balembic
  */
 
-#include "abc_archive.h"
+#include "abc_writer_archive.h"
 extern "C" {
 #include "BKE_blender_version.h"
 #include "BKE_main.h"
@@ -39,111 +39,9 @@ extern "C" {
 #include <fstream>
 
 using Alembic::Abc::ErrorHandler;
-using Alembic::Abc::Exception;
-using Alembic::Abc::IArchive;
 using Alembic::Abc::kWrapExisting;
 using Alembic::Abc::OArchive;
 
-static IArchive open_archive(const std::string &filename,
-                             const std::vector<std::istream *> &input_streams,
-                             bool &is_hdf5)
-{
-  is_hdf5 = false;
-
-  try {
-    Alembic::AbcCoreOgawa::ReadArchive archive_reader(input_streams);
-
-    return IArchive(archive_reader(filename), kWrapExisting, ErrorHandler::kThrowPolicy);
-  }
-  catch (const Exception &e) {
-    std::cerr << e.what() << '\n';
-
-#ifdef WITH_ALEMBIC_HDF5
-    try {
-      is_hdf5 = true;
-      Alembic::AbcCoreAbstract::ReadArraySampleCachePtr cache_ptr;
-
-      return IArchive(Alembic::AbcCoreHDF5::ReadArchive(),
-                      filename.c_str(),
-                      ErrorHandler::kThrowPolicy,
-                      cache_ptr);
-    }
-    catch (const Exception &) {
-      std::cerr << e.what() << '\n';
-      return IArchive();
-    }
-#else
-    /* Inspect the file to see whether it's really a HDF5 file. */
-    char header[4]; /* char(0x89) + "HDF" */
-    std::ifstream the_file(filename.c_str(), std::ios::in | std::ios::binary);
-    if (!the_file) {
-      std::cerr << "Unable to open " << filename << std::endl;
-    }
-    else if (!the_file.read(header, sizeof(header))) {
-      std::cerr << "Unable to read from " << filename << std::endl;
-    }
-    else if (strncmp(header + 1, "HDF", 3)) {
-      std::cerr << filename << " has an unknown file format, unable to read." << std::endl;
-    }
-    else {
-      is_hdf5 = true;
-      std::cerr << filename << " is in the obsolete HDF5 format, unable to read." << std::endl;
-    }
-
-    if (the_file.is_open()) {
-      the_file.close();
-    }
-
-    return IArchive();
-#endif
-  }
-
-  return IArchive();
-}
-
-ArchiveReader::ArchiveReader(struct Main *bmain, const char *filename)
-{
-  char abs_filename[FILE_MAX];
-  BLI_strncpy(abs_filename, filename, FILE_MAX);
-  BLI_path_abs(abs_filename, BKE_main_blendfile_path(bmain));
-
-#ifdef WIN32
-  UTF16_ENCODE(abs_filename);
-  std::wstring wstr(abs_filename_16);
-  m_infile.open(wstr.c_str(), std::ios::in | std::ios::binary);
-  UTF16_UN_ENCODE(abs_filename);
-#else
-  m_infile.open(abs_filename, std::ios::in | std::ios::binary);
-#endif
-
-  m_streams.push_back(&m_infile);
-
-  m_archive = open_archive(abs_filename, m_streams, m_is_hdf5);
-
-  /* We can't open an HDF5 file from a stream, so close it. */
-  if (m_is_hdf5) {
-    m_infile.close();
-    m_streams.clear();
-  }
-}
-
-bool ArchiveReader::is_hdf5() const
-{
-  return m_is_hdf5;
-}
-
-bool ArchiveReader::valid() const
-{
-  return m_archive.valid();
-}
-
-Alembic::Abc::IObject ArchiveReader::getTop()
-{
-  return m_archive.getTop();
-}
-
-/* ************************************************************************** */
-
 /* This kinda duplicates CreateArchiveWithInfo, but Alembic does not seem to
  * have a version supporting streams. */
 static OArchive create_archive(std::ostream *ostream,
diff --git a/source/blender/alembic/intern/abc_archive.h b/source/blender/alembic/intern/abc_writer_archive.h
similarity index 70%
rename from source/blender/alembic/intern/abc_archive.h
rename to source/blender/alembic/intern/abc_writer_archive.h
index 32b1b72747f..e261e60990a 100644
--- a/source/blender/alembic/intern/abc_archive.h
+++ b/source/blender/alembic/intern/abc_writer_archive.h
@@ -21,8 +21,8 @@
  * \ingroup balembic
  */
 
-#ifndef __ABC_ARCHIVE_H__
-#define __ABC_ARC

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list