historical/toontown-classic.git/panda/include/movieVideoCursor.h
2024-01-16 11:20:27 -06:00

154 lines
4.1 KiB
C++

/**
* PANDA 3D SOFTWARE
* Copyright (c) Carnegie Mellon University. All rights reserved.
*
* All use of this software is subject to the terms of the revised BSD
* license. You should have received a copy of this license along
* with this source code in a file named "LICENSE."
*
* @file movieVideoCursor.h
* @author jyelon
* @date 2007-07-02
*/
#ifndef MOVIEVIDEOCURSOR_H
#define MOVIEVIDEOCURSOR_H
#include "pandabase.h"
#include "texture.h"
#include "pointerTo.h"
#include "memoryBase.h"
#include "pStatCollector.h"
#include "deletedChain.h"
#include "typedReferenceCount.h"
class MovieVideo;
class FactoryParams;
class BamWriter;
class BamReader;
/**
* A MovieVideo is actually any source that provides a sequence of video
* frames. That could include an AVI file, a digital camera, or an internet
* TV station. A MovieVideoCursor is a handle that lets you read data
* sequentially from a MovieVideo.
*
* Thread safety: each individual MovieVideoCursor must be owned and accessed
* by a single thread. It is OK for two different threads to open the same
* file at the same time, as long as they use separate MovieVideoCursor
* objects.
*/
class EXPCL_PANDA_MOVIES MovieVideoCursor : public TypedWritableReferenceCount {
protected:
MovieVideoCursor(MovieVideo *src = nullptr);
PUBLISHED:
virtual ~MovieVideoCursor();
PT(MovieVideo) get_source() const;
INLINE int size_x() const;
INLINE int size_y() const;
INLINE int get_num_components() const;
INLINE double length() const;
INLINE bool can_seek() const;
INLINE bool can_seek_fast() const;
INLINE bool aborted() const;
INLINE bool ready() const;
INLINE bool streaming() const;
void setup_texture(Texture *tex) const;
virtual bool set_time(double timestamp, int loop_count);
class EXPCL_PANDA_MOVIES Buffer : public TypedReferenceCount {
public:
ALLOC_DELETED_CHAIN(Buffer);
Buffer(size_t block_size);
PUBLISHED:
virtual ~Buffer();
virtual int compare_timestamp(const Buffer *other) const;
virtual double get_timestamp() const;
public:
unsigned char *_block;
size_t _block_size;
private:
DeletedBufferChain *_deleted_chain;
public:
static TypeHandle get_class_type() {
return _type_handle;
}
static void init_type() {
TypedReferenceCount::init_type();
register_type(_type_handle, "MovieVideoCursor::Buffer",
TypedReferenceCount::get_class_type());
}
virtual TypeHandle get_type() const {
return get_class_type();
}
virtual TypeHandle force_init_type() {init_type(); return get_class_type();}
private:
static TypeHandle _type_handle;
};
virtual PT(Buffer) fetch_buffer();
virtual void apply_to_texture(const Buffer *buffer, Texture *t, int page);
virtual void apply_to_texture_rgb(const Buffer *buffer, Texture *t, int page);
virtual void apply_to_texture_alpha(const Buffer *buffer, Texture *t, int page, int alpha_src);
protected:
Buffer *get_standard_buffer();
virtual PT(Buffer) make_new_buffer();
protected:
PT(MovieVideo) _source;
int _size_x;
int _size_y;
int _num_components;
double _length;
bool _can_seek;
bool _can_seek_fast;
bool _aborted;
bool _streaming;
bool _ready;
PT(Buffer) _standard_buffer;
static PStatCollector _copy_pcollector;
static PStatCollector _copy_pcollector_ram;
static PStatCollector _copy_pcollector_copy;
public:
virtual void write_datagram(BamWriter *manager, Datagram &dg);
virtual int complete_pointers(TypedWritable **plist, BamReader *manager);
protected:
void fillin(DatagramIterator &scan, BamReader *manager);
public:
static TypeHandle get_class_type() {
return _type_handle;
}
static void init_type() {
TypedWritableReferenceCount::init_type();
register_type(_type_handle, "MovieVideoCursor",
TypedWritableReferenceCount::get_class_type());
Buffer::init_type();
}
virtual TypeHandle get_type() const {
return get_class_type();
}
virtual TypeHandle force_init_type() {init_type(); return get_class_type();}
private:
static TypeHandle _type_handle;
};
#include "movieVideoCursor.I"
#include "movieVideo.h"
#endif