Panda3D

movieVideoCursor.h

00001 // Filename: movieVideoCursor.h
00002 // Created by: jyelon (02Jul07)
00003 //
00004 ////////////////////////////////////////////////////////////////////
00005 //
00006 // PANDA 3D SOFTWARE
00007 // Copyright (c) Carnegie Mellon University.  All rights reserved.
00008 //
00009 // All use of this software is subject to the terms of the revised BSD
00010 // license.  You should have received a copy of this license along
00011 // with this source code in a file named "LICENSE."
00012 //
00013 ////////////////////////////////////////////////////////////////////
00014 
00015 #ifndef MOVIEVIDEOCURSOR_H
00016 #define MOVIEVIDEOCURSOR_H
00017 
00018 #include "pandabase.h"
00019 #include "texture.h"
00020 #include "pointerTo.h"
00021 #include "memoryBase.h"
00022 #include "pStatCollector.h"
00023 #include "deletedChain.h"
00024 #include "typedReferenceCount.h"
00025 
00026 class MovieVideo;
00027 class FactoryParams;
00028 class BamWriter;
00029 class BamReader;
00030 
00031 ////////////////////////////////////////////////////////////////////
00032 //       Class : MovieVideoCursor
00033 // Description : A MovieVideo is actually any source that provides
00034 //               a sequence of video frames.  That could include an
00035 //               AVI file, a digital camera, or an internet TV station.
00036 //               A MovieVideoCursor is a handle that lets you read
00037 //               data sequentially from a MovieVideo.
00038 //
00039 //               Thread safety: each individual MovieVideoCursor
00040 //               must be owned and accessed by a single thread.
00041 //               It is OK for two different threads to open
00042 //               the same file at the same time, as long as they
00043 //               use separate MovieVideoCursor objects.
00044 ////////////////////////////////////////////////////////////////////
00045 class EXPCL_PANDA_MOVIES MovieVideoCursor : public TypedWritableReferenceCount {
00046 protected:
00047   MovieVideoCursor(MovieVideo *src = NULL);
00048 
00049 PUBLISHED:
00050   virtual ~MovieVideoCursor();
00051   PT(MovieVideo) get_source() const;
00052   INLINE int size_x() const;
00053   INLINE int size_y() const;
00054   INLINE int get_num_components() const;
00055   INLINE double length() const;
00056   INLINE bool can_seek() const;
00057   INLINE bool can_seek_fast() const;
00058   INLINE bool aborted() const;
00059 
00060   INLINE bool ready() const;
00061   INLINE bool streaming() const;
00062   void setup_texture(Texture *tex) const;
00063 
00064   virtual bool set_time(double timestamp, int loop_count);
00065 
00066   class EXPCL_PANDA_MOVIES Buffer : public TypedReferenceCount {
00067   public:
00068     ALLOC_DELETED_CHAIN(Buffer);
00069     Buffer(size_t block_size);
00070 
00071   PUBLISHED:
00072     virtual ~Buffer();
00073 
00074     virtual int compare_timestamp(const Buffer *other) const;
00075     virtual double get_timestamp() const;
00076 
00077   public:
00078     unsigned char *_block;
00079     size_t _block_size;
00080 
00081   private:
00082     DeletedBufferChain *_deleted_chain;
00083 
00084   public:
00085     static TypeHandle get_class_type() {
00086       return _type_handle;
00087     }
00088     static void init_type() {
00089       TypedReferenceCount::init_type();
00090       register_type(_type_handle, "MovieVideoCursor::Buffer",
00091                     TypedReferenceCount::get_class_type());
00092     }
00093     virtual TypeHandle get_type() const {
00094       return get_class_type();
00095     }
00096     virtual TypeHandle force_init_type() {init_type(); return get_class_type();}
00097 
00098   private:
00099     static TypeHandle _type_handle;
00100   };
00101   virtual PT(Buffer) fetch_buffer();
00102 
00103   virtual void apply_to_texture(const Buffer *buffer, Texture *t, int page);
00104   virtual void apply_to_texture_rgb(const Buffer *buffer, Texture *t, int page);
00105   virtual void apply_to_texture_alpha(const Buffer *buffer, Texture *t, int page, int alpha_src);
00106   
00107 protected:
00108   Buffer *get_standard_buffer();
00109   virtual PT(Buffer) make_new_buffer();
00110   
00111 protected:
00112   PT(MovieVideo) _source;
00113   int _size_x;
00114   int _size_y;
00115   int _num_components;
00116   double _length;
00117   bool _can_seek;
00118   bool _can_seek_fast;
00119   bool _aborted;
00120   bool _streaming;
00121   bool _ready;
00122 
00123   PT(Buffer) _standard_buffer;
00124 
00125   static PStatCollector _copy_pcollector;
00126   static PStatCollector _copy_pcollector_ram;
00127   static PStatCollector _copy_pcollector_copy;
00128 
00129 public:
00130   virtual void write_datagram(BamWriter *manager, Datagram &dg);
00131   virtual int complete_pointers(TypedWritable **plist, BamReader *manager);
00132 
00133 protected:
00134   void fillin(DatagramIterator &scan, BamReader *manager);
00135   
00136 public:
00137   static TypeHandle get_class_type() {
00138     return _type_handle;
00139   }
00140   static void init_type() {
00141     TypedWritableReferenceCount::init_type();
00142     register_type(_type_handle, "MovieVideoCursor",
00143                   TypedWritableReferenceCount::get_class_type());
00144     Buffer::init_type();
00145   }
00146   virtual TypeHandle get_type() const {
00147     return get_class_type();
00148   }
00149   virtual TypeHandle force_init_type() {init_type(); return get_class_type();}
00150 
00151 private:
00152   static TypeHandle _type_handle;
00153 };
00154 
00155 #include "movieVideoCursor.I"
00156 #include "movieVideo.h"
00157 
00158 #endif
 All Classes Functions Variables Enumerations