/usr/include/Gem/plugins/film.h is in gem-dev 1:0.93.3-13.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 | /* -----------------------------------------------------------------
GEM - Graphics Environment for Multimedia
Load an digital video (like AVI, Mpeg, Quicktime) into a pix block
(OS independant parent-class)
Copyright (c) 1997-1999 Mark Danks. mark@danks.org
Copyright (c) Günther Geiger. geiger@epy.co.at
Copyright (c) 2001-2011 IOhannes m zmölnig. forum::für::umläute. IEM. zmoelnig@iem.at
For information on usage and redistribution, and for a DISCLAIMER OF ALL
WARRANTIES, see the file, "GEM.LICENSE.TERMS" in this distribution.
-----------------------------------------------------------------*/
#ifndef _INCLUDE__GEM_PLUGINS_FILM_H_
#define _INCLUDE__GEM_PLUGINS_FILM_H_
#include "Gem/ExportDef.h"
#include "Gem/GemGL.h"
#include <string>
/*-----------------------------------------------------------------
-------------------------------------------------------------------
CLASS
film
parent class for the system- and library-dependent film-loader classes
KEYWORDS
pix film movie
DESCRIPTION
-----------------------------------------------------------------*/
struct pixBlock;
namespace gem {
class Properties;
}
namespace gem { namespace plugins {
class GEM_EXTERN film
{
public:
//////////
// returns an instance wrapping all plugins or NULL
// if NULL is returned, you might still try your luck with manually accessing the
// PluginFactory
static film*getInstance(void);
/////////
// dtor must be virtual
virtual ~film(void);
//////////
// open a movie up
/* open the film "filename" (think better about URIs ?)
*
* try to open the film with the requested properties
*
* about properties:
* requestprops: are properties that can change the behaviour of how the
* film is opened; examples are "colorspace" (e.g. GL_RGBA) or
* "streaming" (rather than random frame access)
* the backend need not implement any of the properties
*
* resultprops: give feedback about the opened film
* if the film could not be opened, the content is undefined
* if the film was successfully opened, following properties should be set
* if a property can not be determined (e.g. variable fps), it should be set unset
*
*
* discussion: should the colourspace be only a hint or should we force it
* (evt. by converting the actual cs by hand to the desired one)
* more discussion: i guess the cs should really be forced somehow by [pix_film]
* now i don't know, whether the cs-conversion should be done by [pix_film] itself or
* rather by the film*-classes.
* but i guess film* makes more sense, because then, [pix_film] doesn't have to know
* anything about the internal cs of the decoder
*/
/* returns TRUE if loading was successfull, FALSE otherwise */
virtual bool open(const std::string,
const gem::Properties&requestprops) = 0;
/* some error codes */
enum errCode { SUCCESS = 0,
FAILURE = 1,
DONTKNOW= 2 };
//////////
// Change which image to display
/* this is the second core function of this class:
* most decoding-libraries can set the frame-number on a random-access basis.
* some cannot, then this might do nothing
* you could also switch between various tracks of a file (if the format supports it)
* specifying trackNum as -1 means "same track as before"
*/
virtual errCode changeImage(int imgNum, int trackNum=-1) = 0;
//////////
// get the next frame
/* this is the core-function of this class !!!!
* when called it returns the current frame in the *pixBlock structure
* dev: you can use "m_image" for this (and "return &m_image;")
* if the image cannot be read, returns 0
* dev: you probably want to set the whole meta-information
* (xsize,ysize,csize,format) over again
* if you are smart and the colour-space is fine, just point
* if this is a "new" frame (e.g. freshly decoded),
* pixblock.newimage should be set to 1
*/
virtual pixBlock* getFrame(void) = 0;
//////////
// close the movie file
/* close the file and clean up temporary things */
virtual void close(void) = 0;
////////
// returns true if instance can be used in thread
virtual bool isThreadable(void) = 0;
/**
* list all properties the currently opened film supports
* if no film is opened, this returns generic backend properties
* which can be different from media specific properties
* after calling, "readable" will hold a list of all properties that can be read
* and "writeable" will hold a list of all properties that can be set
* if the enumeration fails, this returns <code>false</code>
*/
virtual bool enumProperties(gem::Properties&readable,
gem::Properties&writeable) = 0;
/**
* set a number of properties (as defined by "props")
* the "props" may hold properties not supported by the currently opened media,
* which is legal; in this case the superfluous properties are simply ignored
* this function MAY modify the props;
* namely one-shot properties should be removed from the props
*
* examples: "colorspace" GL_RGBA
* "auto" 1
*/
virtual void setProperties(gem::Properties&props) = 0;
/**
* get the current value of the given properties from the media
* if props holds properties that can not be read for the media, they are set to UNSET
*
* "width" (width of each frame in pixels)
* "height" (height of each frame in pixels)
* "fps" (frames per second)
* "frames" (framecount)
*/
virtual void getProperties(gem::Properties&props) = 0;
};
};}; // namespace gem::plugins
/**
* \fn REGISTER_FILMFACTORY(const char *id, Class filmClass)
* registers a new class "filmClass" with the film-factory
*
* \param id a symbolic (const char*) ID for the given class
* \param filmClass a class derived from "film"
*/
#define REGISTER_FILMFACTORY(id, TYP) static gem::PluginFactoryRegistrar::registrar<TYP, gem::plugins::film> fac_film_ ## TYP (id)
#endif // for header file
|