1 /* 2 * pvidfile.cxx 3 * 4 * Video file declaration 5 * 6 * Portable Windows Library 7 * 8 * Copyright (C) 2004 Post Increment 9 * 10 * The contents of this file are subject to the Mozilla Public License 11 * Version 1.0 (the "License"); you may not use this file except in 12 * compliance with the License. You may obtain a copy of the License at 13 * http://www.mozilla.org/MPL/ 14 * 15 * Software distributed under the License is distributed on an "AS IS" 16 * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See 17 * the License for the specific language governing rights and limitations 18 * under the License. 19 * 20 * The Original Code is Portable Windows Library. 21 * 22 * The Initial Developer of the Original Code is 23 * Craig Southeren <craigs@postincrement.com> 24 * 25 * All Rights Reserved. 26 * 27 * Contributor(s): ______________________________________. 28 * 29 * $Revision: 25197 $ 30 * $Author: rjongbloed $ 31 * $Date: 2011-02-24 21:03:12 -0600 (Thu, 24 Feb 2011) $ 32 */ 33 34 #ifndef PTLIB_PVIDFILE_H 35 #define PTLIB_PVIDFILE_H 36 37 #ifdef P_USE_PRAGMA 38 #pragma interface 39 #endif 40 41 #include <ptlib.h> 42 43 #if P_VIDEO 44 #if P_VIDFILE 45 46 #include <ptlib/videoio.h> 47 48 49 /** 50 * Abstract class for a file containing a sequence of video frames 51 */ 52 class PVideoFile : public PVideoFrameInfo 53 { 54 PCLASSINFO(PVideoFile, PVideoFrameInfo); 55 protected: 56 PVideoFile(); 57 58 public: 59 virtual PBoolean Open( 60 const PFilePath & name, // Name of file to open. 61 PFile::OpenMode mode = PFile::ReadWrite, // Mode in which to open the file. 62 int opts = PFile::ModeDefault // <code>OpenOptions</code> enum# for open operation. 63 ); 64 IsOpen()65 virtual PBoolean IsOpen() const { return m_file.IsOpen(); } Close()66 virtual PBoolean Close() { return m_file.Close(); } 67 68 virtual PBoolean WriteFrame(const void * frame); 69 virtual PBoolean ReadFrame(void * frame); 70 71 virtual off_t GetLength() const; 72 virtual PBoolean SetLength( 73 off_t len // New length of file in frames. 74 ); 75 76 virtual off_t GetPosition() const; 77 virtual PBoolean SetPosition( 78 off_t pos, ///< New position to set. 79 PFile::FilePositionOrigin origin = PFile::Start ///< Origin for position change. 80 ); 81 82 virtual PBoolean SetFrameSize( 83 unsigned width, ///< New width of frame 84 unsigned height ///< New height of frame 85 ); 86 virtual PBoolean SetFrameRate( 87 unsigned rate ///< Frames per second 88 ); 89 GetFilePath()90 const PFilePath & GetFilePath() const { return m_file.GetFilePath(); } GetFrameBytes()91 PINDEX GetFrameBytes() const { return m_frameBytes; } 92 93 94 protected: 95 bool m_fixedFrameSize; 96 bool m_fixedFrameRate; 97 PINDEX m_frameBytes; 98 off_t m_headerOffset; 99 PFile m_file; 100 }; 101 102 /** 103 * A file containing a sequence of raw YUV files in planar 4:2:0 format 104 * Example files can be found at http://media.xiph.org/video/derf/ 105 */ 106 107 class PYUVFile : public PVideoFile 108 { 109 PCLASSINFO(PYUVFile, PVideoFile); 110 public: 111 PYUVFile(); 112 113 virtual PBoolean Open( 114 const PFilePath & name, // Name of file to open. 115 PFile::OpenMode mode = PFile::ReadWrite, // Mode in which to open the file. 116 int opts = PFile::ModeDefault // <code>OpenOptions</code> enum# for open operation. 117 ); 118 119 virtual PBoolean WriteFrame(const void * frame); 120 virtual PBoolean ReadFrame(void * frame); 121 122 protected: 123 bool m_y4mMode; 124 }; 125 126 PFACTORY_LOAD(PYUVFile); 127 128 #endif 129 #endif 130 131 #endif // PTLIB_PVIDFILE_H 132 133 134 // End Of File /////////////////////////////////////////////////////////////// 135