]> git.sesse.net Git - vlc/blob - modules/demux/mkv/Ebml_parser.hpp
macosx: move fullscreen-related method to VideoWindowCommon class
[vlc] / modules / demux / mkv / Ebml_parser.hpp
1
2 /*****************************************************************************
3  * mkv.cpp : matroska demuxer
4  *****************************************************************************
5  * Copyright (C) 2003-2004 VLC authors and VideoLAN
6  * $Id$
7  *
8  * Authors: Laurent Aimar <fenrir@via.ecp.fr>
9  *          Steve Lhomme <steve.lhomme@free.fr>
10  *
11  * This program is free software; you can redistribute it and/or modify it
12  * under the terms of the GNU Lesser General Public License as published by
13  * the Free Software Foundation; either version 2.1 of the License, or
14  * (at your option) any later version.
15  *
16  * This program is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19  * GNU Lesser General Public License for more details.
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * along with this program; if not, write to the Free Software Foundation,
23  * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
24  *****************************************************************************/
25 #ifndef _EBML_PARSER_HPP_
26 #define _EBML_PARSER_HPP_
27
28 #include "mkv.hpp"
29
30 /*****************************************************************************
31  * Ebml Stream parser
32  *****************************************************************************/
33 class EbmlParser
34 {
35   public:
36     EbmlParser( EbmlStream *es, EbmlElement *el_start, demux_t *p_demux );
37     ~EbmlParser( void );
38
39     void Up( void );
40     void Down( void );
41     void Reset( demux_t *p_demux );
42     EbmlElement *Get( int n_call = 0 );
43     void        Keep( void );
44     EbmlElement *UnGet( uint64 i_block_pos, uint64 i_cluster_pos );
45
46     int  GetLevel( void ) const;
47
48     /* Is the provided element presents in our upper elements */
49     bool IsTopPresent( EbmlElement * ) const;
50
51   private:
52     demux_t     *p_demux;
53     EbmlStream  *m_es;
54     int          mi_level;
55     EbmlElement *m_el[10];
56     int64_t      mi_remain_size[10];
57
58     EbmlElement *m_got;
59
60     int          mi_user_level;
61     bool         mb_keep;
62     bool         mb_dummy;
63 };
64
65 /* This class works around a bug in KaxBlockVirtual implementation */
66 class KaxBlockVirtualWorkaround : public KaxBlockVirtual
67 {
68 public:
69     void Fix()
70     {
71         if( GetBuffer() == DataBlock )
72             SetBuffer( NULL, 0 );
73     }
74 };
75
76 #endif