Merging gst-plugins-ugly
[platform/upstream/gstreamer.git] / subprojects / gst-plugins-ugly / ext / dvdread / dvdreadsrc.h
1 /* GStreamer DVD title source
2  * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
3  * Copyright (C) <2001> Billy Biggs <vektor@dumbterm.net>.
4  * Copyright (C) <2006> Tim-Philipp Müller <tim centricular net>
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Library General Public
8  * License as published by the Free Software Foundation; either
9  * version 2 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Library General Public License for more details.
15  *
16  * You should have received a copy of the GNU Library General Public
17  * License along with this library; if not, write to the
18  * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
19  * Boston, MA 02110-1301, USA.
20  */
21
22 #ifndef __GST_DVD_READ_SRC_H__
23 #define __GST_DVD_READ_SRC_H__
24
25 #include <gst/gst.h>
26 #include <gst/base/gstpushsrc.h>
27
28 #include <dvdread/dvd_reader.h>
29 #include <dvdread/ifo_types.h>
30 #include <dvdread/ifo_read.h>
31 #include <dvdread/nav_read.h>
32 #include <dvdread/nav_print.h>
33
34 G_BEGIN_DECLS
35
36 #define GST_TYPE_DVD_READ_SRC            (gst_dvd_read_src_get_type())
37 #define GST_DVD_READ_SRC(obj)            (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_DVD_READ_SRC,GstDvdReadSrc))
38 #define GST_DVD_READ_SRC_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_DVD_READ_SRC,GstDvdReadSrcClass))
39 #define GST_IS_DVD_READ_SRC(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DVD_READ_SRC))
40 #define GST_IS_DVD_READ_SRC_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_DVD_READ_SRC))
41
42 typedef struct _GstDvdReadSrc GstDvdReadSrc;
43 typedef struct _GstDvdReadSrcClass GstDvdReadSrcClass;
44
45 struct _GstDvdReadSrc {
46   GstPushSrc       pushsrc;
47
48   /* location */
49   gchar           *location;
50
51   gboolean         first_seek;
52   gboolean         new_seek;
53   gboolean         change_cell;
54
55   gboolean         new_cell;
56
57   gint             uri_title;     /* set via the URI handler or properties,  */
58   gint             uri_chapter;   /* otherwise not touched; these values     */
59   gint             uri_angle;     /* start from 1                            */
60
61   gint             title;         /* current position while open, set to the */
62   gint             chapter;       /* URI-set values in ::start(). these      */
63   gint             angle;         /* values start from 0                     */
64
65   gint             start_cell, last_cell, cur_cell;
66   gint             cur_pack;
67   gint             next_cell;
68   dvd_reader_t    *dvd;
69   ifo_handle_t    *vmg_file;
70
71   /* title stuff */
72   gint             ttn;
73   tt_srpt_t       *tt_srpt;
74   ifo_handle_t    *vts_file;
75   vts_ptt_srpt_t  *vts_ptt_srpt;
76   vts_tmapt_t     *vts_tmapt;
77   dvd_file_t      *dvd_title;
78   gint             num_chapters;
79   gint             num_angles;
80
81   GstClockTime    *chapter_starts;  /* start time of chapters within title   */
82
83   /* which program chain to watch (based on title and chapter number) */
84   pgc_t           *cur_pgc;
85   gint             pgc_id;
86   gint             pgn;
87
88   gboolean         need_newsegment;
89   GstEvent        *title_lang_event_pending;
90   GstEvent        *pending_clut_event;
91 };
92
93 struct _GstDvdReadSrcClass {
94   GstPushSrcClass parent_class;
95 };
96
97 GType gst_dvd_read_src_get_type (void);
98 GST_ELEMENT_REGISTER_DECLARE (dvdreadsrc);
99
100 G_END_DECLS
101
102 #endif /* __GST_DVD_READ_SRC_H__ */
103