]> git.sesse.net Git - vlc/blob - modules/demux/mkv/Ebml_parser.hpp
Use var_Inherit* instead of var_CreateGet*.
[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 /*****************************************************************************
31  * Ebml Stream parser
32  *****************************************************************************/
33 class EbmlParser
34 {
35   public:
36     EbmlParser( EbmlStream *es, EbmlElement *el_start, demux_t *p_demux );
37     virtual ~EbmlParser( void );
38
39     void Up( void );
40     void Down( void );
41     void Reset( demux_t *p_demux );
42     EbmlElement *Get( void );
43     void        Keep( void );
44     EbmlElement *UnGet( uint64 i_block_pos, uint64 i_cluster_pos );
45
46     int  GetLevel( void );
47
48     /* Is the provided element presents in our upper elements */
49     bool IsTopPresent( EbmlElement * );
50
51   private:
52     EbmlStream  *m_es;
53     int         mi_level;
54     EbmlElement *m_el[10];
55     int64_t      mi_remain_size[10];
56
57     EbmlElement *m_got;
58
59     int         mi_user_level;
60     bool        mb_keep;
61     bool        mb_dummy;
62 };
63
64 /* This class works around a bug in KaxBlockVirtual implementation */
65 class KaxBlockVirtualWorkaround : public KaxBlockVirtual
66 {
67 public:
68     void Fix()
69     {
70         if( Data == DataBlock )
71             SetBuffer( NULL, 0 );
72     }
73 };
74
75 #endif