Browse Source

Removed class Movie

Josh Yelon 18 years ago
parent
commit
136882b1cd

+ 1 - 1
panda/src/grutil/config_grutil.cxx

@@ -76,7 +76,7 @@ init_libgrutil() {
   MovieTexture::init_type();
   MovieTexture::register_with_read_factory();
   TexturePool *ts = TexturePool::get_global_ptr();
-  ts->register_texture_type(MovieTexture::make_texture, "dummyvideo");
+  ts->register_texture_type(MovieTexture::make_texture, "inkblot dummyvideo");
 
 #ifdef HAVE_OPENCV
   

+ 53 - 42
panda/src/grutil/movieTexture.cxx

@@ -30,7 +30,8 @@ TypeHandle MovieTexture::_type_handle;
 ////////////////////////////////////////////////////////////////////
 //     Function: MovieTexture::Constructor
 //       Access: Published
-//  Description: Sets up the texture to read frames from a camera
+//  Description: Creates a blank movie texture.  Movies must be 
+//               added using do_read_one or do_load_one.
 ////////////////////////////////////////////////////////////////////
 MovieTexture::
 MovieTexture(const string &name) : 
@@ -38,6 +39,18 @@ MovieTexture(const string &name) :
 {
 }
 
+////////////////////////////////////////////////////////////////////
+//     Function: MovieTexture::Constructor
+//       Access: Published
+//  Description: Creates a texture playing the specified movie.
+////////////////////////////////////////////////////////////////////
+MovieTexture::
+MovieTexture(PT(MovieVideo) video) : 
+  Texture(video->get_name())
+{
+  do_load_one(video, NULL, 0);
+}
+
 ////////////////////////////////////////////////////////////////////
 //     Function: MovieTexture::CData::Constructor
 //       Access: public
@@ -81,9 +94,9 @@ MovieTexture::
 MovieTexture(const MovieTexture &copy) : 
   Texture(copy)
 {
-  // Since 'get_video' can be a slow operation, 
-  // I release the read lock before calling get_video.
-
+  // Since 'make_copy' can be a slow operation, 
+  // I release the read lock before calling make_copy.
+  
   pvector<MovieVideo *> color;
   pvector<MovieVideo *> alpha;
   {
@@ -101,10 +114,10 @@ MovieTexture(const MovieTexture &copy) :
     cdata->_pages.resize(color.size());
     for (int i=0; i<(int)(color.size()); i++) {
       if (color[i]) {
-        cdata->_pages[i]._color = color[i]->get_source()->get_video(0.0);
+        cdata->_pages[i]._color = color[i]->make_copy();
       }
       if (alpha[i]) {
-        cdata->_pages[i]._alpha = color[i]->get_source()->get_video(0.0);
+        cdata->_pages[i]._alpha = color[i]->make_copy();
       }
     }
   }
@@ -218,35 +231,26 @@ bool MovieTexture::
 do_read_one(const Filename &fullpath, const Filename &alpha_fullpath,
             int z, int n, int primary_file_num_channels, int alpha_file_channel,
             bool header_only, BamCacheRecord *record) {
-  if (record != (BamCacheRecord *)NULL) {
-    record->add_dependent_file(fullpath);
-  }
 
   nassertr(n == 0, false);
   nassertr(z >= 0 && z < get_z_size(), false);
+  
+  if (record != (BamCacheRecord *)NULL) {
+    record->add_dependent_file(fullpath);
+  }
 
-  PT(Movie) color;
-  PT(MovieVideo) color_video;
-  PT(Movie) alpha;
-  PT(MovieVideo) alpha_video;
-
-  color = Movie::load(fullpath);
+  PT(MovieVideo) color;
+  PT(MovieVideo) alpha;
+  
+  color = MovieVideo::load(fullpath);
   if (color == 0) {
     return false;
   }
-  color_video = color->get_video(0.0);
-  if (color_video == 0) {
-    return false;
-  }
   if (!alpha_fullpath.empty()) {
-    alpha = Movie::load(alpha_fullpath);
+    alpha = MovieVideo::load(alpha_fullpath);
     if (alpha == 0) {
       return false;
     }
-    alpha_video = alpha->get_video(0.0);
-    if (alpha_video == 0) {
-      return false;
-    }
   }
   
   if (z == 0) {
@@ -261,23 +265,32 @@ do_read_one(const Filename &fullpath, const Filename &alpha_fullpath,
     set_fullpath(fullpath);
     set_alpha_fullpath(alpha_fullpath);
   }
-  
-  _primary_file_num_channels = 4;
+
+  _primary_file_num_channels = primary_file_num_channels;
   _alpha_file_channel = alpha_file_channel;
   
+  return do_load_one(color, alpha, z);
+
+  set_loaded_from_image();
+}
+
+////////////////////////////////////////////////////////////////////
+//     Function: MovieTexture::do_load_one
+//       Access: Protected, Virtual
+//  Description: Loads movie objects into the texture.
+////////////////////////////////////////////////////////////////////
+bool MovieTexture::
+do_load_one(PT(MovieVideo) color, PT(MovieVideo) alpha, int z) {
+  
   {
     CDWriter cdata(_cycler);
     cdata->_pages.resize(z+1);
-    cdata->_pages[z]._color = color_video;
-    cdata->_pages[z]._alpha = alpha_video;
+    cdata->_pages[z]._color = color;
+    cdata->_pages[z]._alpha = alpha;
     cdata->_pages[z]._base_clock = ClockObject::get_global_clock()->get_frame_time();
     recalculate_image_properties(cdata);
   }
   
-  // Fetch the first frame.  We ignore the timestamp
-  // of the first frame, and assume it starts at zero.
-  
-  set_loaded_from_image();
   return true;
 }
 
@@ -347,20 +360,18 @@ cull_callback(CullTraverser *, const CullTraverserData &) const {
     MovieVideo *alpha = cdata->_pages[i]._alpha;
     if (color) {
       double offset = delta;
-      if (offset > color->next_start()) {
-        color->seek_ahead(offset);
-	color->fetch_into_texture((MovieTexture*)this, i);
-      } else if (offset < color->last_start()) {
-        color = color->get_source()->get_video(offset);
+      if ((offset < color->last_start()) || (offset >= color->next_start())) {
+        if (alpha) {
+          color->fetch_into_texture_rgb(offset, (MovieTexture*)this, i);
+        } else {
+          color->fetch_into_texture(offset, (MovieTexture*)this, i);
+        }
       }
     }
     if (alpha) {
       double offset = delta;
-      if (offset > alpha->next_start()) {
-        alpha->seek_ahead(offset);
-	alpha->fetch_into_texture_alpha((MovieTexture*)this, i, _alpha_file_channel);
-      } else if (offset < alpha->last_start()) {
-        alpha = alpha->get_source()->get_video(offset);
+      if ((offset < alpha->last_start()) || (offset >= alpha->next_start())) {
+	alpha->fetch_into_texture_alpha(offset, (MovieTexture*)this, i, _alpha_file_channel);
       }
     }
   }

+ 2 - 2
panda/src/grutil/movieTexture.h

@@ -20,9 +20,7 @@
 #define MOVIETEXTURE_H
 
 #include "pandabase.h"
-#include "movie.h"
 #include "movieVideo.h"
-#include "movieAudio.h"
 
 ////////////////////////////////////////////////////////////////////
 //       Class : MovieTexture
@@ -32,6 +30,7 @@
 class EXPCL_PANDA_GRUTIL MovieTexture : public Texture {
 PUBLISHED:
   MovieTexture(const string &name);
+  MovieTexture(PT(MovieVideo) video);
 protected:
   MovieTexture(const MovieTexture &copy);
 PUBLISHED:
@@ -56,6 +55,7 @@ protected:
                            bool header_only, BamCacheRecord *record);
   virtual bool do_load_one(const PNMImage &pnmimage, const string &name,
                            int z, int n);
+  bool do_load_one(PT(MovieVideo) color, PT(MovieVideo) alpha, int z);
 
   class VideoPage {
   public:

+ 0 - 2
panda/src/movies/Sources.pp

@@ -11,7 +11,6 @@
   #define COMBINED_SOURCES $[TARGET]_composite1.cxx 
 
   #define SOURCES \
-	movie.h movie.I \
 	movieAudio.h movieAudio.I \
 	movieVideo.h movieVideo.I \
         inkblotVideo.h inkblotVideo.I \
@@ -28,7 +27,6 @@
         config_movies.cxx
     
   #define INSTALL_HEADERS \
-	movie.h movie.I \
 	movieAudio.h movieAudio.I \
 	movieVideo.h movieVideo.I \
         inkblotVideo.h inkblotVideo.I \