blob: 60d1cba48cd35fd6704b3b8b8e5b18f289e51e35 [file] [log] [blame]
//*********************************************************************************
// Rendition.h
//---------------------------------------------------------------------------------
//
//---------------------------------------------------------------------------------
// Hugo Mercier <hmercier31[at]gmail.com> (c) 2008
// Carlos Garcia Campos <carlosgc@gnome.org> (c) 2010
// Albert Astals Cid <aacid@kde.org> (C) 2017, 2018
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//*********************************************************************************
#ifndef _RENDITION_H_
#define _RENDITION_H_
#include "Object.h"
struct MediaWindowParameters {
MediaWindowParameters();
~MediaWindowParameters();
// parse from a floating window parameters dictionary
void parseFWParams(Object* obj);
enum MediaWindowType {
windowFloating = 0,
windowFullscreen,
windowHidden,
windowEmbedded
};
enum MediaWindowRelativeTo {
windowRelativeToDocument = 0,
windowRelativeToApplication,
windowRelativeToDesktop
};
// DEFAULT VALUE
MediaWindowType type; // movieWindowEmbedded
int width; // -1
int height; // -1
// floating window position
MediaWindowRelativeTo relativeTo; // windowRelativeToDocument (or to desktop)
double XPosition; // 0.5
double YPosition; // 0.5
bool hasTitleBar; // true
bool hasCloseButton; // true
bool isResizeable; // true
};
struct MediaParameters {
MediaParameters();
~MediaParameters();
// parse from a "Media Play Parameters" dictionary
void parseMediaPlayParameters(Object* playObj);
// parse from a "Media Screen Parameters" dictionary
void parseMediaScreenParameters(Object* screenObj);
enum MediaFittingPolicy {
fittingMeet = 0,
fittingSlice,
fittingFill,
fittingScroll,
fittingHidden,
fittingUndefined
};
struct Color {
double r, g, b;
};
int duration; // 0
int volume; // 100
// defined in media play parameters, p 770
// correspond to 'fit' SMIL's attribute
MediaFittingPolicy fittingPolicy; // fittingUndefined
bool autoPlay; // true
// repeat count, can be real values, 0 means forever
double repeatCount; // 1.0
// background color // black = (0.0 0.0 0.0)
Color bgColor;
// opacity in [0.0 1.0]
double opacity; // 1.0
bool showControls; // false
MediaWindowParameters windowParams;
};
class MediaRendition {
public:
MediaRendition(Object *obj);
MediaRendition(const MediaRendition &other);
~MediaRendition();
MediaRendition& operator=(const MediaRendition &) = delete;
bool isOk () const { return ok; }
const MediaParameters* getMHParameters() const { return &MH; }
const MediaParameters* getBEParameters() const { return &BE; }
const GooString* getContentType() const { return contentType; }
const GooString* getFileName() const { return fileName; }
bool getIsEmbedded() const { return isEmbedded; }
Stream* getEmbbededStream() const { return isEmbedded ? embeddedStreamObject.getStream() : nullptr; }
const Object* getEmbbededStreamObject() const { return isEmbedded ? &embeddedStreamObject : nullptr; }
// write embedded stream to file
void outputToFile(FILE*);
MediaRendition* copy() const;
private:
bool ok;
// "Must Honor" parameters
MediaParameters MH;
// "Best Effort" parameters
MediaParameters BE;
bool isEmbedded;
GooString* contentType;
// if it's embedded
Object embeddedStreamObject;
// if it's not embedded
GooString* fileName;
};
#endif /* _RENDITION_H_ */