~ubuntu-branches/ubuntu/hardy/avidemux/hardy

« back to all changes in this revision

Viewing changes to avidemux/ADM_inputs/ADM_matroska/ADM_mkv.h

  • Committer: Bazaar Package Importer
  • Author(s): Matvey Kozhev
  • Date: 2007-12-18 13:53:04 UTC
  • mfrom: (1.1.7 upstream)
  • Revision ID: james.westby@ubuntu.com-20071218135304-cdqec2lg2bglyz15
Tags: 1:2.4~preview3-0.0ubuntu1
* Upload to Ubuntu. (LP: #163287, LP: #126572)
* debian/changelog: re-added Ubuntu releases.
* debian/control:
  - Require debhelper >= 5.0.51 (for dh_icons) and imagemagick.
  - Build-depend on libsdl1.2-dev instead of libsdl-dev.
  - Build against newer libx264-dev. (LP: #138854)
  - Removed libamrnb-dev, not in Ubuntu yet.
* debian/rules:
  - Install all icon sizes, using convert (upstream installs none).
  - Added missing calls to dh_installmenu, dh_installman, dh_icons and
    dh_desktop.
* debian/menu, debian/avidemux-qt.menu:
  - Corrected package and executable names.
* debian/avidemux-common.install: Install icons.
* debian/avidemux.common.manpages: Install man/avidemux.1.
* debian/links, debian/avidemux-cli.links, debian/avidemux-gtk.links:
  - Link manpages to avidemux.1.gz.
* debian/install, debian/avidemux-qt.install, debian/avidemux-gtk.desktop,
  debian/avidemux-qt.desktop: Install desktop files.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/***************************************************************************
 
2
                          ADM_pics.h  -  description
 
3
                             -------------------
 
4
    begin                : Mon Jun 3 2002
 
5
    copyright            : (C) 2002 by mean
 
6
    email                : fixounet@free.fr
 
7
 ***************************************************************************/
 
8
 
 
9
/***************************************************************************
 
10
 *                                                                         *
 
11
 *   This program is free software; you can redistribute it and/or modify  *
 
12
 *   it under the terms of the GNU General Public License as published by  *
 
13
 *   the Free Software Foundation; either version 2 of the License, or     *
 
14
 *   (at your option) any later version.                                   *
 
15
 *                                                                         *
 
16
 ***************************************************************************/
 
17
 
 
18
 
 
19
 
 
20
#ifndef ADM_MKV_H
 
21
#define ADM_MKV_H
 
22
 
 
23
#include "ADM_editor/ADM_Video.h"
 
24
#include "ADM_audio/aviaudio.hxx"
 
25
#include "ADM_inputs/ADM_matroska/ADM_ebml.h"
 
26
 
 
27
 
 
28
typedef struct 
 
29
{
 
30
    uint64_t pos;
 
31
    uint32_t size;
 
32
    uint32_t flags;
 
33
    uint32_t timeCode;  // In fact it is delta between DTS and PTS for audio...
 
34
}mkvIndex;
 
35
//**********************************************
 
36
typedef struct 
 
37
{
 
38
  /* Index in mkv */
 
39
  uint32_t  streamIndex;
 
40
  
 
41
  /* Used for audio */
 
42
  WAVHeader wavHeader;
 
43
  uint32_t  nbPackets;
 
44
  uint32_t  length;
 
45
  /* Used for both */
 
46
  uint8_t    *extraData;
 
47
  uint32_t   extraDataLen;
 
48
  mkvIndex  *_index;
 
49
  uint32_t  _nbIndex;  // current size of the index
 
50
  uint32_t  _indexMax; // Max size of the index
 
51
  uint32_t  _sizeInBytes; // Approximate size in bytes of that stream
 
52
  uint32_t  _defaultFrameDuration; // in us!
 
53
}mkvTrak;
 
54
 
 
55
#define MKV_MAX_LACES 20 // ?
 
56
//**********************************************
 
57
class mkvAudio : public AVDMGenericAudioStream
 
58
{
 
59
  protected:
 
60
    mkvTrak                     *_track;
 
61
    ADM_ebml_file               *_parser;
 
62
    ADM_ebml_file               *_clusterParser;
 
63
    mkvIndex                    *_clusters;
 
64
    uint32_t                    _nbClusters;
 
65
    uint32_t                    _currentCluster;
 
66
    
 
67
    uint32_t                    _frameDurationInSample; // Nb Samples per frame
 
68
    
 
69
    uint32_t                    _currentLace;
 
70
    uint32_t                    _maxLace;
 
71
    uint32_t                    _Laces[MKV_MAX_LACES];
 
72
 
 
73
    uint8_t                     goToCluster(uint32_t x);
 
74
    uint8_t                     getPacket(uint8_t *dest, uint32_t *packlen, uint32_t *samples,uint32_t *timecode);
 
75
    uint32_t                    _curTimeCode;
 
76
  public:
 
77
                                mkvAudio(const char *name,mkvTrak *track,mkvIndex *clust,uint32_t nbClusters);
 
78
                                
 
79
                                
 
80
    virtual                     ~mkvAudio();
 
81
    virtual uint32_t            read(uint32_t len,uint8_t *buffer);
 
82
    virtual uint8_t             goTo(uint32_t newoffset);
 
83
            uint8_t             goToTime(uint32_t mstime);
 
84
    virtual uint8_t             getPacket(uint8_t *dest, uint32_t *len, uint32_t *samples);
 
85
  //  virtual uint8_t             goToTime(uint32_t mstime);
 
86
    virtual uint8_t             extraData(uint32_t *l,uint8_t **d);
 
87
};
 
88
 
 
89
 
 
90
#define ADM_MKV_MAX_TRACKS 20
 
91
 
 
92
class mkvHeader         :public vidHeader
 
93
{
 
94
  protected:
 
95
                                
 
96
    ADM_ebml_file           *_parser;
 
97
    char                    *_filename;
 
98
    mkvTrak                 _tracks[ADM_MKV_MAX_TRACKS+1];
 
99
 
 
100
    mkvIndex                    *_clusters;
 
101
    uint32_t                    _nbClusters;
 
102
    uint32_t                    _clustersCeil;
 
103
 
 
104
    uint32_t                _nbAudioTrack;
 
105
    uint32_t                _currentAudioTrack;
 
106
    uint32_t                _reordered;
 
107
    
 
108
    uint8_t                 checkHeader(void *head,uint32_t headlen);
 
109
    uint8_t                 analyzeTracks(void *head,uint32_t headlen);
 
110
    uint8_t                 analyzeOneTrack(void *head,uint32_t headlen);
 
111
    uint8_t                 walk(void *seed);
 
112
    int                     searchTrackFromTid(uint32_t tid);
 
113
    //
 
114
    uint8_t                 reformatVorbisHeader(mkvTrak *trk);  
 
115
    // Indexers
 
116
    
 
117
    uint8_t                 addIndexEntry(uint32_t track,uint64_t where, uint32_t size,uint32_t flags,
 
118
                                            uint32_t timecodeMS);
 
119
    uint8_t                 videoIndexer(ADM_ebml_file *parser);
 
120
    uint8_t                 readCue(ADM_ebml_file *parser);
 
121
    uint8_t                 indexClusters(ADM_ebml_file *parser);
 
122
    uint8_t                 indexBlock(ADM_ebml_file *parser,uint32_t count,uint32_t timecodeMS);
 
123
    
 
124
    uint8_t                 changeAudioStream(uint32_t newstream);
 
125
    uint32_t                getCurrentAudioStreamNumber(void);
 
126
    uint8_t                 getAudioStreamsInfo(uint32_t *nbStreams, audioInfo **infos);
 
127
    
 
128
  public:
 
129
 
 
130
      uint8_t               hasPtsDts(void) {return 1;} // Return 1 if the container gives PTS & DTS info
 
131
      uint32_t              ptsDtsDelta(uint32_t framenum);
 
132
 
 
133
    virtual   void          Dump(void);
 
134
 
 
135
            mkvHeader( void );
 
136
   virtual  ~mkvHeader(  ) ;
 
137
// AVI io
 
138
    virtual uint8_t  open(char *name);
 
139
    virtual uint8_t  close(void) ;
 
140
  //__________________________
 
141
  //  Info
 
142
  //__________________________
 
143
 
 
144
  //__________________________
 
145
  //  Audio
 
146
  //__________________________
 
147
 
 
148
    virtual   WAVHeader *getAudioInfo(void ) ;
 
149
    virtual uint8_t getAudioStream(AVDMGenericAudioStream **audio);
 
150
 
 
151
 
 
152
// Frames
 
153
  //__________________________
 
154
  //  video
 
155
  //__________________________
 
156
 
 
157
    virtual uint8_t  setFlag(uint32_t frame,uint32_t flags);
 
158
    virtual uint32_t getFlags(uint32_t frame,uint32_t *flags);
 
159
    virtual uint8_t  getFrameNoAlloc(uint32_t framenum,ADMCompressedImage *img);
 
160
 
 
161
            uint8_t  getExtraHeaderData(uint32_t *len, uint8_t **data);
 
162
            uint8_t  isReordered( void );
 
163
            uint8_t  reorder( void );
 
164
 
 
165
};
 
166
#endif
 
167
 
 
168