annotate stream/stream_bluray.c @ 34748:f86e300072f0

Small fixes to make it easier to compiler for OpenGL ES without linking against libGL (which is not used for GL ES).
author reimar
date Sat, 31 Mar 2012 21:03:45 +0000
parents 6dcc91eb3cf8
children 3b2c280da1af
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
31565
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
1 /*
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
2 * Copyright (C) 2010 Benjamin Zores <ben@geexbox.org>
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
3 *
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
4 * This file is part of MPlayer.
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
5 *
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
6 * MPlayer is free software; you can redistribute it and/or modify
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
7 * it under the terms of the GNU General Public License as published by
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
8 * the Free Software Foundation; either version 2 of the License, or
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
9 * (at your option) any later version.
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
10 *
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
11 * MPlayer is distributed in the hope that it will be useful,
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
14 * GNU General Public License for more details.
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
15 *
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
16 * You should have received a copy of the GNU General Public License along
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
17 * with MPlayer; if not, write to the Free Software Foundation, Inc.,
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
19 */
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
20
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
21 /*
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
22 * Blu-ray parser/reader using libbluray
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
23 * Use 'git clone git://git.videolan.org/libbluray' to get it.
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
24 *
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
25 * TODO:
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
26 * - Add libbdnav support for menus navigation
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
27 * - Add AACS/BD+ protection detection
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
28 * - Add descrambled keys database support (KEYDB.cfg)
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
29 *
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
30 */
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
31
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
32 #include <libbluray/bluray.h>
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
33
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
34 #include "config.h"
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
35 #include "libavutil/common.h"
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
36 #include "libmpdemux/demuxer.h"
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
37 #include "mp_msg.h"
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
38 #include "help_mp.h"
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
39 #include "m_struct.h"
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
40 #include "m_option.h"
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
41 #include "stream.h"
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
42
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
43 #define BLURAY_SECTOR_SIZE 6144
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
44
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
45 #define BLURAY_DEFAULT_ANGLE 0
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
46 #define BLURAY_DEFAULT_CHAPTER 0
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
47 #define BLURAY_DEFAULT_TITLE 0
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
48
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
49 int bluray_angle = 0;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
50 int bluray_chapter = 0;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
51
31574
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
52 struct bluray_priv_s {
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
53 BLURAY *bd;
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
54 int current_angle;
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
55 int current_chapter;
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
56 int current_title;
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
57 };
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
58
31565
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
59 static struct stream_priv_s {
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
60 int title;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
61 char *device;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
62 } bluray_stream_priv_dflts = {
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
63 BLURAY_DEFAULT_TITLE,
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
64 NULL
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
65 };
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
66
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
67 #define ST_OFF(f) M_ST_OFF(struct stream_priv_s,f)
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
68 static const m_option_t bluray_stream_opts_fields[] = {
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
69 { "hostname", ST_OFF(title), CONF_TYPE_INT, M_OPT_RANGE, 0, 99999, NULL},
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
70 { "filename", ST_OFF(device), CONF_TYPE_STRING, 0, 0 ,0, NULL},
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
71 { NULL, NULL, 0, 0, 0, 0, NULL }
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
72 };
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
73
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
74 static const struct m_struct_st bluray_stream_opts = {
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
75 "bluray",
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
76 sizeof(struct stream_priv_s),
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
77 &bluray_stream_priv_dflts,
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
78 bluray_stream_opts_fields
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
79 };
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
80
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
81 static void bluray_stream_close(stream_t *s)
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
82 {
31574
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
83 struct bluray_priv_s *b = s->priv;
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
84
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
85 bd_close(b->bd);
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
86 b->bd = NULL;
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
87 free(b);
31565
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
88 }
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
89
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
90 static int bluray_stream_seek(stream_t *s, off_t pos)
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
91 {
31574
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
92 struct bluray_priv_s *b = s->priv;
31565
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
93 off_t p;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
94
31574
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
95 p = bd_seek(b->bd, pos);
31565
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
96 if (p == -1)
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
97 return 0;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
98
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
99 s->pos = p;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
100 return 1;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
101 }
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
102
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
103 static int bluray_stream_fill_buffer(stream_t *s, char *buf, int len)
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
104 {
31574
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
105 struct bluray_priv_s *b = s->priv;
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
106
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
107 return bd_read(b->bd, buf, len);
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
108 }
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
109
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
110 static int bluray_stream_control(stream_t *s, int cmd, void *arg)
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
111 {
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
112 struct bluray_priv_s *b = s->priv;
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
113
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
114 switch (cmd) {
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
115
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
116 case STREAM_CTRL_GET_NUM_CHAPTERS: {
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
117 BLURAY_TITLE_INFO *ti;
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
118
34038
422eb76aee70 stream_bluray: switch to new libbluray API
diego
parents: 33827
diff changeset
119 ti = bd_get_title_info(b->bd, b->current_title, b->current_angle);
31574
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
120 if (!ti)
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
121 return STREAM_UNSUPPORTED;
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
122
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
123 *((unsigned int *) arg) = ti->chapter_count;
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
124 bd_free_title_info(ti);
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
125
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
126 return 1;
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
127 }
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
128
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
129 case STREAM_CTRL_GET_CURRENT_CHAPTER: {
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
130 *((unsigned int *) arg) = b->current_chapter;
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
131 return 1;
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
132 }
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
133
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
134 case STREAM_CTRL_SEEK_TO_CHAPTER: {
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
135 BLURAY_TITLE_INFO *ti;
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
136 int chapter = *((unsigned int *) arg);
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
137 int64_t pos;
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
138 int r;
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
139
34038
422eb76aee70 stream_bluray: switch to new libbluray API
diego
parents: 33827
diff changeset
140 ti = bd_get_title_info(b->bd, b->current_title, b->current_angle);
31574
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
141 if (!ti)
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
142 return STREAM_UNSUPPORTED;
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
143
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
144 if (chapter < 0 || chapter > ti->chapter_count) {
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
145 bd_free_title_info(ti);
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
146 return STREAM_UNSUPPORTED;
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
147 }
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
148
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
149 pos = bd_chapter_pos(b->bd, chapter);
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
150 r = bluray_stream_seek(s, pos);
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
151 bd_free_title_info(ti);
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
152
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
153 return r ? 1 : STREAM_UNSUPPORTED;
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
154 }
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
155
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
156 case STREAM_CTRL_GET_NUM_ANGLES: {
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
157 BLURAY_TITLE_INFO *ti;
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
158
34038
422eb76aee70 stream_bluray: switch to new libbluray API
diego
parents: 33827
diff changeset
159 ti = bd_get_title_info(b->bd, b->current_title, b->current_angle);
31574
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
160 if (!ti)
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
161 return STREAM_UNSUPPORTED;
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
162
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
163 *((int *) arg) = ti->angle_count;
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
164 bd_free_title_info(ti);
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
165
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
166 return 1;
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
167 }
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
168
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
169 case STREAM_CTRL_GET_ANGLE: {
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
170 *((int *) arg) = b->current_angle;
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
171 return 1;
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
172 }
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
173
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
174 case STREAM_CTRL_SET_ANGLE: {
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
175 BLURAY_TITLE_INFO *ti;
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
176 int angle = *((int *) arg);
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
177
34038
422eb76aee70 stream_bluray: switch to new libbluray API
diego
parents: 33827
diff changeset
178 ti = bd_get_title_info(b->bd, b->current_title, b->current_angle);
31574
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
179 if (!ti)
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
180 return STREAM_UNSUPPORTED;
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
181
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
182 if (angle < 0 || angle > ti->angle_count) {
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
183 bd_free_title_info(ti);
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
184 return STREAM_UNSUPPORTED;
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
185 }
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
186
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
187 b->current_angle = angle;
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
188 bd_seamless_angle_change(b->bd, angle);
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
189 bd_free_title_info(ti);
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
190
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
191 return 1;
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
192 }
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
193
34649
6dcc91eb3cf8 Support showing the stream language with br:// playback.
reimar
parents: 34038
diff changeset
194 case STREAM_CTRL_GET_LANG: {
6dcc91eb3cf8 Support showing the stream language with br:// playback.
reimar
parents: 34038
diff changeset
195 struct stream_lang_req *req = arg;
6dcc91eb3cf8 Support showing the stream language with br:// playback.
reimar
parents: 34038
diff changeset
196 BLURAY_TITLE_INFO *ti = bd_get_title_info(b->bd, b->current_title, b->current_angle);
6dcc91eb3cf8 Support showing the stream language with br:// playback.
reimar
parents: 34038
diff changeset
197 if (ti->clip_count) {
6dcc91eb3cf8 Support showing the stream language with br:// playback.
reimar
parents: 34038
diff changeset
198 BLURAY_STREAM_INFO *si = NULL;
6dcc91eb3cf8 Support showing the stream language with br:// playback.
reimar
parents: 34038
diff changeset
199 int count = 0;
6dcc91eb3cf8 Support showing the stream language with br:// playback.
reimar
parents: 34038
diff changeset
200 switch (req->type) {
6dcc91eb3cf8 Support showing the stream language with br:// playback.
reimar
parents: 34038
diff changeset
201 case stream_ctrl_audio:
6dcc91eb3cf8 Support showing the stream language with br:// playback.
reimar
parents: 34038
diff changeset
202 count = ti->clips[0].audio_stream_count;
6dcc91eb3cf8 Support showing the stream language with br:// playback.
reimar
parents: 34038
diff changeset
203 si = ti->clips[0].audio_streams;
6dcc91eb3cf8 Support showing the stream language with br:// playback.
reimar
parents: 34038
diff changeset
204 break;
6dcc91eb3cf8 Support showing the stream language with br:// playback.
reimar
parents: 34038
diff changeset
205 case stream_ctrl_sub:
6dcc91eb3cf8 Support showing the stream language with br:// playback.
reimar
parents: 34038
diff changeset
206 count = ti->clips[0].pg_stream_count;
6dcc91eb3cf8 Support showing the stream language with br:// playback.
reimar
parents: 34038
diff changeset
207 si = ti->clips[0].pg_streams;
6dcc91eb3cf8 Support showing the stream language with br:// playback.
reimar
parents: 34038
diff changeset
208 break;
6dcc91eb3cf8 Support showing the stream language with br:// playback.
reimar
parents: 34038
diff changeset
209 }
6dcc91eb3cf8 Support showing the stream language with br:// playback.
reimar
parents: 34038
diff changeset
210 while (count-- > 0) {
6dcc91eb3cf8 Support showing the stream language with br:// playback.
reimar
parents: 34038
diff changeset
211 if (si->pid == req->id) {
6dcc91eb3cf8 Support showing the stream language with br:// playback.
reimar
parents: 34038
diff changeset
212 memcpy(req->buf, si->lang, 4);
6dcc91eb3cf8 Support showing the stream language with br:// playback.
reimar
parents: 34038
diff changeset
213 req->buf[4] = 0;
6dcc91eb3cf8 Support showing the stream language with br:// playback.
reimar
parents: 34038
diff changeset
214 bd_free_title_info(ti);
6dcc91eb3cf8 Support showing the stream language with br:// playback.
reimar
parents: 34038
diff changeset
215 return STREAM_OK;
6dcc91eb3cf8 Support showing the stream language with br:// playback.
reimar
parents: 34038
diff changeset
216 }
6dcc91eb3cf8 Support showing the stream language with br:// playback.
reimar
parents: 34038
diff changeset
217 si++;
6dcc91eb3cf8 Support showing the stream language with br:// playback.
reimar
parents: 34038
diff changeset
218 }
6dcc91eb3cf8 Support showing the stream language with br:// playback.
reimar
parents: 34038
diff changeset
219 }
6dcc91eb3cf8 Support showing the stream language with br:// playback.
reimar
parents: 34038
diff changeset
220 bd_free_title_info(ti);
6dcc91eb3cf8 Support showing the stream language with br:// playback.
reimar
parents: 34038
diff changeset
221 return STREAM_ERROR;
6dcc91eb3cf8 Support showing the stream language with br:// playback.
reimar
parents: 34038
diff changeset
222 }
6dcc91eb3cf8 Support showing the stream language with br:// playback.
reimar
parents: 34038
diff changeset
223
31574
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
224 default:
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
225 break;
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
226 }
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
227
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
228 return STREAM_UNSUPPORTED;
31565
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
229 }
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
230
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
231 static int bluray_stream_open(stream_t *s, int mode,
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
232 void *opts, int *file_format)
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
233 {
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
234 struct stream_priv_s *p = opts;
31574
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
235 struct bluray_priv_s *b;
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
236
31565
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
237 BLURAY_TITLE_INFO *info = NULL;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
238 BLURAY *bd;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
239
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
240 int title, title_guess, title_count;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
241 uint64_t title_size;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
242
31574
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
243 unsigned int chapter = 0, angle = 0;
31565
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
244 uint64_t max_duration = 0;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
245 int64_t chapter_pos = 0;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
246
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
247 char *device = NULL;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
248 int i;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
249
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
250 /* find the requested device */
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
251 if (p->device)
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
252 device = p->device;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
253 else if (bluray_device)
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
254 device = bluray_device;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
255
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
256 if (!device) {
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
257 mp_msg(MSGT_OPEN, MSGL_ERR, MSGTR_BlurayNoDevice);
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
258 return STREAM_UNSUPPORTED;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
259 }
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
260
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
261 /* open device */
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
262 bd = bd_open(device, NULL);
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
263 if (!bd) {
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
264 mp_msg(MSGT_OPEN, MSGL_ERR, MSGTR_CantOpenBluray, device);
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
265 return STREAM_UNSUPPORTED;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
266 }
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
267
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
268 /* check for available titles on disc */
34038
422eb76aee70 stream_bluray: switch to new libbluray API
diego
parents: 33827
diff changeset
269 title_count = bd_get_titles(bd, TITLES_RELEVANT, angle);
31565
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
270 mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_BLURAY_TITLES=%d\n", title_count);
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
271 if (!title_count) {
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
272 mp_msg(MSGT_OPEN, MSGL_ERR, MSGTR_BlurayNoTitles);
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
273 bd_close(bd);
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
274 return STREAM_UNSUPPORTED;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
275 }
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
276
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
277 /* parse titles information */
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
278 title_guess = BLURAY_DEFAULT_TITLE;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
279 for (i = 0; i < title_count; i++) {
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
280 BLURAY_TITLE_INFO *ti;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
281 int sec, msec;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
282
34038
422eb76aee70 stream_bluray: switch to new libbluray API
diego
parents: 33827
diff changeset
283 ti = bd_get_title_info(bd, i, angle);
31565
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
284 if (!ti)
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
285 continue;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
286
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
287 sec = ti->duration / 90000;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
288 msec = (ti->duration - sec) % 1000;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
289
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
290 mp_msg(MSGT_IDENTIFY, MSGL_INFO,
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
291 "ID_BLURAY_TITLE_%d_CHAPTERS=%d\n", i + 1, ti->chapter_count);
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
292 mp_msg(MSGT_IDENTIFY, MSGL_INFO,
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
293 "ID_BLURAY_TITLE_%d_ANGLE=%d\n", i + 1, ti->angle_count);
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
294 mp_msg(MSGT_IDENTIFY, MSGL_V,
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
295 "ID_BLURAY_TITLE_%d_LENGTH=%d.%03d\n", i + 1, sec, msec);
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
296
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
297 /* try to guess which title may contain the main movie */
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
298 if (ti->duration > max_duration) {
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
299 max_duration = ti->duration;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
300 title_guess = i;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
301 }
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
302
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
303 bd_free_title_info(ti);
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
304 }
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
305
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
306 /* Select current title */
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
307 title = p->title ? p->title - 1: title_guess;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
308 title = FFMIN(title, title_count - 1);
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
309
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
310 bd_select_title(bd, title);
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
311
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
312 title_size = bd_get_title_size(bd);
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
313 mp_msg(MSGT_IDENTIFY, MSGL_INFO,
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
314 "ID_BLURAY_CURRENT_TITLE=%d\n", title + 1);
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
315
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
316 /* Get current title information */
34038
422eb76aee70 stream_bluray: switch to new libbluray API
diego
parents: 33827
diff changeset
317 info = bd_get_title_info(bd, title, angle);
31565
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
318 if (!info)
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
319 goto err_no_info;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
320
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
321 /* Select chapter */
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
322 chapter = bluray_chapter ? bluray_chapter : BLURAY_DEFAULT_CHAPTER;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
323 chapter = FFMIN(chapter, info->chapter_count);
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
324
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
325 if (chapter)
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
326 chapter_pos = bd_chapter_pos(bd, chapter);
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
327
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
328 mp_msg(MSGT_IDENTIFY, MSGL_INFO,
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
329 "ID_BLURAY_CURRENT_CHAPTER=%d\n", chapter + 1);
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
330
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
331 /* Select angle */
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
332 angle = bluray_angle ? bluray_angle : BLURAY_DEFAULT_ANGLE;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
333 angle = FFMIN(angle, info->angle_count);
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
334
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
335 if (angle)
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
336 bd_select_angle(bd, angle);
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
337
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
338 mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_BLURAY_CURRENT_ANGLE=%d\n", angle + 1);
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
339
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
340 bd_free_title_info(info);
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
341
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
342 err_no_info:
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
343 s->fill_buffer = bluray_stream_fill_buffer;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
344 s->seek = bluray_stream_seek;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
345 s->close = bluray_stream_close;
31574
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
346 s->control = bluray_stream_control;
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
347
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
348 b = calloc(1, sizeof(struct bluray_priv_s));
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
349 b->bd = bd;
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
350 b->current_angle = angle;
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
351 b->current_chapter = chapter;
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
352 b->current_title = title;
31565
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
353
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
354 s->start_pos = chapter_pos;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
355 s->end_pos = title_size;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
356 s->sector_size = BLURAY_SECTOR_SIZE;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
357 s->flags = mode | MP_STREAM_SEEK;
31574
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
358 s->priv = b;
31565
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
359 s->type = STREAMTYPE_BLURAY;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
360 s->url = strdup("br://");
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
361
33827
277ec491a8a7 Do not translate console messages of verbosity level MSGL_V and above.
diego
parents: 32326
diff changeset
362 mp_msg(MSGT_OPEN, MSGL_V, "Blu-ray successfully opened.\n");
31565
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
363
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
364 return STREAM_OK;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
365 }
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
366
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
367 const stream_info_t stream_info_bluray = {
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
368 "Blu-ray Disc",
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
369 "bd",
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
370 "Benjamin Zores",
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
371 "Play Blu-ray discs through external libbluray",
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
372 bluray_stream_open,
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
373 { "br", "bluray", NULL },
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
374 &bluray_stream_opts,
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
375 1
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
376 };