Commit: e7bdd2919250f87eb4b3e2338847cfca16a5e9fd
Author: Lukas Tönne
Date:   Fri Feb 13 17:16:47 2015 +0100
Branches: alembic_pointcache
https://developer.blender.org/rBe7bdd2919250f87eb4b3e2338847cfca16a5e9fd

Return a boolean value indicating success when getting the frame range
of a cache.

Also the default cache range is return in case no archive exists.

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

M       source/blender/pointcache/PTC_api.cpp
M       source/blender/pointcache/PTC_api.h
M       source/blender/pointcache/alembic/abc_reader.cpp
M       source/blender/pointcache/alembic/abc_reader.h
M       source/blender/pointcache/intern/reader.h

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

diff --git a/source/blender/pointcache/PTC_api.cpp 
b/source/blender/pointcache/PTC_api.cpp
index 78f2d63..6d5c2b3 100644
--- a/source/blender/pointcache/PTC_api.cpp
+++ b/source/blender/pointcache/PTC_api.cpp
@@ -130,13 +130,20 @@ void PTC_reader_free(PTCReader *_reader)
        delete reader;
 }
 
-void PTC_reader_get_frame_range(PTCReader *_reader, int *start_frame, int 
*end_frame)
+bool PTC_reader_get_frame_range(PTCReader *_reader, int *start_frame, int 
*end_frame)
 {
        PTC::Reader *reader = (PTC::Reader *)_reader;
        int sfra, efra;
-       reader->get_frame_range(sfra, efra);
-       if (start_frame) *start_frame = sfra;
-       if (end_frame) *end_frame = efra;
+       if (reader->get_frame_range(sfra, efra)) {
+               if (start_frame) *start_frame = sfra;
+               if (end_frame) *end_frame = efra;
+               return true;
+       }
+       else {
+               if (start_frame) *start_frame = reader->cache()->startframe;
+               if (end_frame) *end_frame = reader->cache()->endframe;
+               return false;
+       }
 }
 
 PTCReadSampleResult PTC_read_sample(PTCReader *_reader, float frame)
diff --git a/source/blender/pointcache/PTC_api.h 
b/source/blender/pointcache/PTC_api.h
index 5ea7cd8..411757a 100644
--- a/source/blender/pointcache/PTC_api.h
+++ b/source/blender/pointcache/PTC_api.h
@@ -64,7 +64,7 @@ void PTC_writer_free(struct PTCWriter *writer);
 void PTC_write_sample(struct PTCWriter *writer);
 
 void PTC_reader_free(struct PTCReader *reader);
-void PTC_reader_get_frame_range(struct PTCReader *reader, int *start_frame, 
int *end_frame);
+bool PTC_reader_get_frame_range(struct PTCReader *reader, int *start_frame, 
int *end_frame);
 PTCReadSampleResult PTC_read_sample(struct PTCReader *reader, float frame);
 PTCReadSampleResult PTC_test_sample(struct PTCReader *reader, float frame);
 
diff --git a/source/blender/pointcache/alembic/abc_reader.cpp 
b/source/blender/pointcache/alembic/abc_reader.cpp
index 772cc21..d445196 100644
--- a/source/blender/pointcache/alembic/abc_reader.cpp
+++ b/source/blender/pointcache/alembic/abc_reader.cpp
@@ -48,16 +48,18 @@ AbcReaderArchive::~AbcReaderArchive()
 {
 }
 
-void AbcReaderArchive::get_frame_range(int &start_frame, int &end_frame)
+bool AbcReaderArchive::get_frame_range(int &start_frame, int &end_frame)
 {
        if (archive.valid()) {
                double start_time, end_time;
                GetArchiveStartAndEndTime(archive, start_time, end_time);
                start_frame = (int)time_to_frame(start_time);
                end_frame = (int)time_to_frame(end_time);
+               return true;
        }
        else {
                start_frame = end_frame = 1;
+               return false;
        }
 }
 
diff --git a/source/blender/pointcache/alembic/abc_reader.h 
b/source/blender/pointcache/alembic/abc_reader.h
index e52e896..ff43425 100644
--- a/source/blender/pointcache/alembic/abc_reader.h
+++ b/source/blender/pointcache/alembic/abc_reader.h
@@ -44,7 +44,7 @@ public:
        AbcReaderArchive(Scene *scene, ID *id, PointCache *cache, ErrorHandler 
*error_handler);
        virtual ~AbcReaderArchive();
        
-       void get_frame_range(int &start_frame, int &end_frame);
+       bool get_frame_range(int &start_frame, int &end_frame);
        Abc::ISampleSelector get_frame_sample_selector(float frame);
        
        PTCReadSampleResult test_sample(float frame);
diff --git a/source/blender/pointcache/intern/reader.h 
b/source/blender/pointcache/intern/reader.h
index 0f253e4..f59f16f 100644
--- a/source/blender/pointcache/intern/reader.h
+++ b/source/blender/pointcache/intern/reader.h
@@ -34,7 +34,7 @@ class ReaderArchive {
 public:
        virtual ~ReaderArchive() {}
        
-       virtual void get_frame_range(int &start_frame, int &end_frame) = 0;
+       virtual bool get_frame_range(int &start_frame, int &end_frame) = 0;
        
        virtual PTCReadSampleResult test_sample(float frame) = 0;
 };
@@ -48,7 +48,7 @@ public:
        ErrorHandler *get_error_handler() const { return m_error_handler; }
        bool valid() const;
        
-       inline void get_frame_range(int &start_frame, int &end_frame)
+       inline bool get_frame_range(int &start_frame, int &end_frame)
        {
                return m_archive->get_frame_range(start_frame, end_frame);
        }

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to