changed: Add logic to properly handle subtitles for stacked files
[vuplus_xbmc] / xbmc / cores / dvdplayer / DVDCodecs / Video / DllLibMpeg2.h
1 #pragma once
2
3 /*
4  *      Copyright (C) 2005-2013 Team XBMC
5  *      http://xbmc.org
6  *
7  *  This Program is free software; you can redistribute it and/or modify
8  *  it under the terms of the GNU General Public License as published by
9  *  the Free Software Foundation; either version 2, or (at your option)
10  *  any later version.
11  *
12  *  This Program is distributed in the hope that it will be useful,
13  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
14  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  *  GNU General Public License for more details.
16  *
17  *  You should have received a copy of the GNU General Public License
18  *  along with XBMC; see the file COPYING.  If not, see
19  *  <http://www.gnu.org/licenses/>.
20  *
21  */
22
23 #if (defined HAVE_CONFIG_H) && (!defined TARGET_WINDOWS)
24   #include "config.h"
25 #endif
26 extern "C" {
27 #if defined(TARGET_WINDOWS)
28   #include "libmpeg2/mpeg2.h"
29   #include "libmpeg2/mpeg2convert.h"
30 #else
31   #include <mpeg2dec/mpeg2.h>
32   #include <mpeg2dec/mpeg2convert.h>
33 #endif
34 }
35 #include "DynamicDll.h"
36 #include "utils/log.h"
37
38 class DllLibMpeg2Interface
39 {
40 public:
41   virtual ~DllLibMpeg2Interface() {}
42   virtual uint32_t mpeg2_accel (uint32_t accel)=0;
43   virtual mpeg2dec_t * mpeg2_init (void)=0;
44   virtual const mpeg2_info_t * mpeg2_info (mpeg2dec_t * mpeg2dec)=0;
45   virtual void mpeg2_close (mpeg2dec_t * mpeg2dec)=0;
46   virtual void mpeg2_buffer (mpeg2dec_t * mpeg2dec, uint8_t * start, uint8_t * end)=0;
47   virtual void mpeg2_tag_picture (mpeg2dec_t * mpeg2dec, uint32_t tag, uint32_t tag2)=0;
48   virtual mpeg2_state_t mpeg2_parse (mpeg2dec_t * mpeg2dec)=0;
49   virtual void mpeg2_reset (mpeg2dec_t * mpeg2dec, int full_reset)=0;
50   virtual void mpeg2_set_buf (mpeg2dec_t * mpeg2dec, uint8_t * buf[3], void * id)=0;
51   virtual void mpeg2_custom_fbuf (mpeg2dec_t * mpeg2dec, int custom_fbuf)=0;
52   virtual int mpeg2_convert (mpeg2dec_t * mpeg2dec, mpeg2_convert_t convert, void * arg)=0;
53   virtual void mpeg2_skip(mpeg2dec_t * mpeg2dec, int skip)=0;
54 };
55
56 class DllLibMpeg2 : public DllDynamic, DllLibMpeg2Interface
57 {
58   DECLARE_DLL_WRAPPER(DllLibMpeg2, DLL_PATH_LIBMPEG2)
59   DEFINE_METHOD1(uint32_t, mpeg2_accel, (uint32_t p1))
60   DEFINE_METHOD0(mpeg2dec_t *, mpeg2_init)
61   DEFINE_METHOD1(const mpeg2_info_t *, mpeg2_info, (mpeg2dec_t * p1))
62   DEFINE_METHOD1(void, mpeg2_close, (mpeg2dec_t * p1))
63   DEFINE_METHOD3(void, mpeg2_buffer, (mpeg2dec_t * p1, uint8_t * p2, uint8_t * p3))
64   DEFINE_METHOD3(void, mpeg2_tag_picture, (mpeg2dec_t * p1, uint32_t p2, uint32_t p3))
65   DEFINE_METHOD1(mpeg2_state_t, mpeg2_parse, (mpeg2dec_t * p1))
66   DEFINE_METHOD2(void, mpeg2_reset, (mpeg2dec_t * p1, int p2))
67   DEFINE_METHOD3(void, mpeg2_set_buf, (mpeg2dec_t * p1, uint8_t * p2[3], void * p3))
68   DEFINE_METHOD2(void, mpeg2_custom_fbuf, (mpeg2dec_t * p1, int p2))
69   DEFINE_METHOD3(int, mpeg2_convert, (mpeg2dec_t * p1, mpeg2_convert_t p2, void * p3))
70   DEFINE_METHOD2(void,mpeg2_skip, (mpeg2dec_t * p1, int p2))
71   BEGIN_METHOD_RESOLVE()
72     RESOLVE_METHOD(mpeg2_accel)
73     RESOLVE_METHOD(mpeg2_init)
74     RESOLVE_METHOD(mpeg2_info)
75     RESOLVE_METHOD(mpeg2_close)
76     RESOLVE_METHOD(mpeg2_buffer)
77     RESOLVE_METHOD(mpeg2_tag_picture)
78     RESOLVE_METHOD(mpeg2_parse)
79     RESOLVE_METHOD(mpeg2_reset)
80     RESOLVE_METHOD(mpeg2_set_buf)
81     RESOLVE_METHOD(mpeg2_custom_fbuf)
82     RESOLVE_METHOD(mpeg2_convert)
83     RESOLVE_METHOD(mpeg2_skip)
84   END_METHOD_RESOLVE()
85 };