Warning, file /multimedia/k3b/libk3b/projects/videocd/mpeginfo/k3bmpeginfo.h was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001 /* 0002 SPDX-FileCopyrightText: 2003-2004 Christian Kvasny <chris@k3b.org> 0003 SPDX-FileCopyrightText: 1998-2007 Sebastian Trueg <trueg@k3b.org> 0004 0005 SPDX-License-Identifier: GPL-2.0-or-later 0006 */ 0007 0008 #ifndef K3BMPEGINFO 0009 #define K3BMPEGINFO 0010 0011 #include <stdio.h> 0012 0013 // #define BUFFERSIZE 16384 0014 #define BUFFERSIZE 65536 0015 0016 #define MPEG_START_CODE_PATTERN ((ulong) 0x00000100) 0017 #define MPEG_START_CODE_MASK ((ulong) 0xffffff00) 0018 0019 #define MPEG_PICTURE_CODE ((ulong) 0x00000100) 0020 /* [...slice codes... 0x1a7] */ 0021 0022 #define MPEG_USER_CODE ((uchar) 0xb2) 0023 #define MPEG_SEQUENCE_CODE ((uchar) 0xb3) 0024 #define MPEG_EXT_CODE ((uchar) 0xb5) 0025 #define MPEG_SEQ_END_CODE ((uchar) 0xb7) 0026 #define MPEG_GOP_CODE ((uchar) 0xb8) 0027 #define MPEG_PROGRAM_END_CODE ((uchar) 0xb9) 0028 #define MPEG_PACK_HEADER_CODE ((uchar) 0xba) 0029 #define MPEG_SYSTEM_HEADER_CODE ((uchar) 0xbb) 0030 #define MPEG_PRIVATE_1_CODE ((uchar) 0xbd) 0031 #define MPEG_PAD_CODE ((uchar) 0xbe) 0032 0033 #define MPEG_AUDIO_C0_CODE ((uchar) 0xc0) /* default */ 0034 #define MPEG_AUDIO_C1_CODE ((uchar) 0xc1) /* 2nd audio stream id (dual channel) */ 0035 #define MPEG_AUDIO_C2_CODE ((uchar) 0xc2) /* 3rd audio stream id (surround sound) */ 0036 0037 #define MPEG_VIDEO_E0_CODE ((uchar) 0xe0) /* motion */ 0038 #define MPEG_VIDEO_E1_CODE ((uchar) 0xe1) /* lowres still */ 0039 #define MPEG_VIDEO_E2_CODE ((uchar) 0xe2) /* hires still */ 0040 0041 #define FLOAT_0x10000 (double)((unsigned long)1 << 16) 0042 #define STD_SYSTEM_CLOCK_FREQ (unsigned long)90000 0043 0044 typedef unsigned char byte; 0045 typedef long long llong; 0046 0047 #include <QDebug> 0048 0049 namespace K3b { 0050 class video_info 0051 { 0052 public: 0053 bool seen; 0054 unsigned long hsize; 0055 unsigned long vsize; 0056 double aratio; 0057 double frate; 0058 unsigned long bitrate; 0059 unsigned long vbvsize; 0060 bool progressive; 0061 unsigned char video_format; 0062 unsigned char chroma_format; 0063 bool constrained_flag; 0064 }; 0065 0066 0067 class audio_info 0068 { 0069 public: 0070 bool seen; 0071 unsigned int version; 0072 unsigned int layer; 0073 unsigned int protect; 0074 unsigned long bitrate; 0075 float byterate; 0076 unsigned long sampfreq; 0077 int mode; 0078 bool copyright; 0079 bool original; 0080 }; 0081 0082 0083 class Mpeginfo 0084 { 0085 0086 public: 0087 Mpeginfo() 0088 : version( 0 ), 0089 muxrate( 0 ), 0090 playing_time( 0 ), 0091 has_video ( false ), 0092 has_audio ( false ) 0093 { 0094 for ( int i = 0; i < 3; i++ ) { 0095 video[ i ].seen = false; 0096 audio[ i ].seen = false; 0097 } 0098 }; 0099 0100 ~Mpeginfo() 0101 {} 0102 ; 0103 0104 unsigned int version; 0105 unsigned long muxrate; 0106 double playing_time; 0107 bool has_video; 0108 bool has_audio; 0109 video_info video[ 3 ]; 0110 audio_info audio[ 3 ]; 0111 }; 0112 0113 class MpegInfo 0114 { 0115 public: 0116 explicit MpegInfo( const char* filename ); 0117 ~MpegInfo(); 0118 enum mpeg_version { MPEG_VERS_INVALID = 0, MPEG_VERS_MPEG1 = 1, MPEG_VERS_MPEG2 = 2 }; 0119 enum mode { MPEG_STEREO = 1, MPEG_JOINT_STEREO, MPEG_DUAL_CHANNEL, MPEG_SINGLE_CHANNEL }; 0120 0121 int version() 0122 { 0123 return mpeg_info->version; 0124 }; 0125 const QString error_string() 0126 { 0127 return m_error_string; 0128 }; 0129 Mpeginfo* mpeg_info; 0130 0131 0132 private: 0133 // General ToolBox 0134 byte GetByte( llong offset ); 0135 byte bdGetByte( llong offset ); 0136 llong GetNBytes( llong, int ); 0137 unsigned short int GetSize( llong offset ); 0138 llong FindNextMarker( llong ); 0139 llong FindNextMarker( llong, byte* ); 0140 llong FindNextMarker( llong, byte ); 0141 llong bdFindNextMarker( llong, byte ); 0142 llong bdFindNextMarker( llong, byte* ); 0143 llong FindNextVideo( llong ); 0144 llong FindNextAudio( llong ); 0145 0146 int GetVideoIdx ( byte ); 0147 int GetAudioIdx ( byte ); 0148 bool EnsureMPEG( llong, byte ); 0149 void ParseVideo ( llong, byte ); 0150 void ParseAudio ( llong, byte ); 0151 bool MpegParsePacket (); 0152 llong MpegParsePacket ( llong ); 0153 llong SkipPacketHeader( llong ); 0154 0155 double ReadTS( llong offset ); 0156 double ReadTSMpeg2( llong offset ); 0157 0158 FILE* m_mpegfile; 0159 0160 const char* m_filename; 0161 llong m_filesize; 0162 0163 bool m_done; 0164 0165 llong m_buffstart; 0166 llong m_buffend; 0167 byte* m_buffer; 0168 double m_initial_TS; 0169 QString m_error_string; 0170 0171 }; 0172 } 0173 0174 #endif //MpegInfo