mirror of
https://github.com/WinampDesktop/winamp.git
synced 2025-06-17 18:35:45 -04:00
Initial community commit
This commit is contained in:
198
Src/libvp6/include/Rvd.hpp
Normal file
198
Src/libvp6/include/Rvd.hpp
Normal file
@ -0,0 +1,198 @@
|
||||
#ifndef RVD_HPP
|
||||
#define RVD_HPP
|
||||
|
||||
#pragma warning(disable:4786)
|
||||
|
||||
#include "FourCC.hpp"
|
||||
//#include <io.h>
|
||||
#include <windows.h>
|
||||
#include <exception>
|
||||
#include <cstdlib>
|
||||
#include <cstddef>
|
||||
#include <string>
|
||||
#include <map>
|
||||
|
||||
namespace Rvd
|
||||
{
|
||||
class FileError : public exception
|
||||
{
|
||||
public:
|
||||
explicit FileError(const char*);
|
||||
explicit FileError(DWORD);
|
||||
const char* what() const;
|
||||
private:
|
||||
std::string message;
|
||||
};
|
||||
|
||||
bool nameIsOK(const char* name);
|
||||
|
||||
enum Format { rgb24, rgb32, yuv12 };
|
||||
const char* asStr(Format f);
|
||||
|
||||
struct Header
|
||||
{
|
||||
FourCC code;
|
||||
__int32 width;
|
||||
__int32 height;
|
||||
__int32 blockSize;
|
||||
FourCC compression;
|
||||
__int32 unknown; //frame count?
|
||||
__int32 rate;
|
||||
__int32 scale;
|
||||
__int8 pad[480];
|
||||
};
|
||||
|
||||
typedef unsigned __int64 size_type;
|
||||
|
||||
size_type estimatedFileSize(
|
||||
int width,
|
||||
int height,
|
||||
Format format,
|
||||
int frameCount);
|
||||
|
||||
|
||||
class File
|
||||
{
|
||||
public:
|
||||
|
||||
enum mode_t {in, out, inout};
|
||||
|
||||
File();
|
||||
File(const char* name, mode_t mode);
|
||||
|
||||
~File();
|
||||
|
||||
void open(const char* name, mode_t mode, DWORD flags = 0);
|
||||
void close();
|
||||
|
||||
void setFormat(Format);
|
||||
|
||||
void setWidth(int w);
|
||||
void setHeight(int h);
|
||||
|
||||
void setRate(int rate);
|
||||
void setScale(int scale);
|
||||
|
||||
void reset(int frameNum) const;
|
||||
void advance(int count) const;
|
||||
|
||||
void read(void* frame) const;
|
||||
void write(const void* frame);
|
||||
|
||||
void writeHeader();
|
||||
|
||||
bool isOpen() const;
|
||||
bool eof() const;
|
||||
|
||||
mode_t mode() const;
|
||||
const char* name() const;
|
||||
|
||||
int frameNum() const;
|
||||
|
||||
int frameCount() const;
|
||||
bool frameCountIsOK() const;
|
||||
|
||||
Format format() const;
|
||||
const FourCC compression() const;
|
||||
|
||||
int width() const;
|
||||
int height() const;
|
||||
|
||||
int rate() const;
|
||||
int scale() const;
|
||||
|
||||
size_t frameSize() const;
|
||||
size_t paddedFrameSize() const;
|
||||
|
||||
private:
|
||||
|
||||
File& operator=(const File&);
|
||||
File(const File&);
|
||||
|
||||
//int file;
|
||||
HANDLE m_handle;
|
||||
|
||||
mutable int frameNum_;
|
||||
int frameCount_;
|
||||
bool frameCountIsOK_;
|
||||
char name_[_MAX_PATH];
|
||||
mode_t mode_;
|
||||
|
||||
Header* const m_header;
|
||||
Format format_;
|
||||
size_t frameSize_;
|
||||
size_t paddedFrameSize_;
|
||||
size_t paddingSize_;
|
||||
|
||||
bool unbuffered;
|
||||
};
|
||||
|
||||
|
||||
class MappedFile
|
||||
{
|
||||
public:
|
||||
|
||||
MappedFile();
|
||||
MappedFile(const char* name);
|
||||
|
||||
~MappedFile();
|
||||
|
||||
void open(const char* name);
|
||||
void close();
|
||||
|
||||
bool isOpen() const;
|
||||
const char* name() const;
|
||||
|
||||
int frameCount() const;
|
||||
|
||||
Format format() const;
|
||||
|
||||
int width() const;
|
||||
int height() const;
|
||||
|
||||
int rate() const;
|
||||
int scale() const;
|
||||
|
||||
size_t frameSize() const;
|
||||
|
||||
void* map(int frameNum) const;
|
||||
|
||||
void unmap(int frameNum) const;
|
||||
void unmap() const;
|
||||
|
||||
bool isMapped(int frameNum) const;
|
||||
|
||||
private:
|
||||
|
||||
MappedFile(const MappedFile&);
|
||||
MappedFile& operator=(const MappedFile&);
|
||||
|
||||
void init();
|
||||
|
||||
Header header;
|
||||
Format m_format;
|
||||
size_t m_frameSize;
|
||||
size_t m_paddedFrameSize;
|
||||
|
||||
std::string m_name;
|
||||
|
||||
HANDLE file;
|
||||
HANDLE mapping;
|
||||
|
||||
DWORD allocationGranularity;
|
||||
|
||||
int m_frameCount;
|
||||
|
||||
struct ViewInfo
|
||||
{
|
||||
void* view;
|
||||
void* frame;
|
||||
};
|
||||
|
||||
typedef std::map<int, ViewInfo> Views;
|
||||
mutable Views views;
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
#endif
|
Reference in New Issue
Block a user