Removed class Movie

This commit is contained in:
Josh Yelon 2007-08-13 06:50:04 +00:00
parent 8317d040ae
commit 136882b1cd
4 changed files with 56 additions and 47 deletions

View File

@ -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

View File

@ -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) {
nassertr(n == 0, false);
nassertr(z >= 0 && z < get_z_size(), false);
if (record != (BamCacheRecord *)NULL) {
record->add_dependent_file(fullpath);
}
nassertr(n == 0, false);
nassertr(z >= 0 && z < get_z_size(), false);
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);
}
}
}

View File

@ -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:

View File

@ -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 \