]> git.sesse.net Git - vlc/blob - modules/demux/mkv/Ebml_parser.hpp
Merge commit 'origin/1.0-bugfix'
[vlc] / modules / demux / mkv / Ebml_parser.hpp
1
2 /*****************************************************************************
3  * mkv.cpp : matroska demuxer
4  *****************************************************************************
5  * Copyright (C) 2003-2004 the VideoLAN team
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
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  * 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 General Public License for more details.
20  *
21  * You should have received a copy of the GNU General Public License
22  * along with this program; if not, write to the Free Software
23  * Foundation, 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  * Ebml Stream parser
31  *****************************************************************************/
32 class EbmlParser
33 {
34   public:
35     EbmlParser( EbmlStream *es, EbmlElement *el_start, demux_t *p_demux );
36     virtual ~EbmlParser( void );
37
38     void Up( void );
39     void Down( void );
40     void Reset( demux_t *p_demux );
41     EbmlElement *Get( void );
42     void        Keep( void );
43     EbmlElement *UnGet( uint64 i_block_pos, uint64 i_cluster_pos );
44
45     int  GetLevel( void );
46
47     /* Is the provided element presents in our upper elements */
48     bool IsTopPresent( EbmlElement * );
49
50   private:
51     EbmlStream  *m_es;
52     int         mi_level;
53     EbmlElement *m_el[10];
54     int64_t      mi_remain_size[10];
55
56     EbmlElement *m_got;
57
58     int         mi_user_level;
59     bool        mb_keep;
60     bool        mb_dummy;
61 };
62
63 #endif