annotate stream/stream_bluray.c @ 36126:fd34a83228ca

Switch OpenGL ES renderer to 2.0. 1.0 is too limited to be really useful for video, and 2.0 is almost universally available anyway. This also adds support for YUV conversion in hardware, however this code is still very rough and limited in features. A lot of work, like being able to change the coefficients, supporting gamma, supporting EOSD (ASS rendering) still needs to be done for this to be really usable. Unfortunately development is difficult since almost no working implementations are available: MESA seems currently completely broken unless you use and Intel card _and_ force software rendering, Galaxy S2 still crashes regularly (certainly in part my fault for doing something weird, but still).
author reimar
date Sat, 04 May 2013 13:28:14 +0000
parents eadb3ddad605
children 805ff0c5b699
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
31574
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
51 struct bluray_priv_s {
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
52 BLURAY *bd;
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
53 int current_angle;
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
54 int current_title;
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
55 };
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
56
31565
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
57 static struct stream_priv_s {
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
58 int title;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
59 char *device;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
60 } bluray_stream_priv_dflts = {
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
61 BLURAY_DEFAULT_TITLE,
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
62 NULL
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
63 };
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
64
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
65 #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
66 static const m_option_t bluray_stream_opts_fields[] = {
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
67 { "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
68 { "filename", ST_OFF(device), CONF_TYPE_STRING, 0, 0 ,0, NULL},
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
69 { NULL, NULL, 0, 0, 0, 0, NULL }
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
70 };
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
71
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
72 static const struct m_struct_st bluray_stream_opts = {
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
73 "bluray",
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
74 sizeof(struct stream_priv_s),
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
75 &bluray_stream_priv_dflts,
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
76 bluray_stream_opts_fields
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
77 };
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
78
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
79 static void bluray_stream_close(stream_t *s)
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
80 {
31574
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
81 struct bluray_priv_s *b = s->priv;
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
82
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
83 bd_close(b->bd);
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
84 b->bd = NULL;
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
85 free(b);
31565
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
86 }
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
87
35885
3389262720da Fix previous commit, off_t must be replaced by int64_t
reimar
parents: 35881
diff changeset
88 static int bluray_stream_seek(stream_t *s, int64_t pos)
31565
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
89 {
31574
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
90 struct bluray_priv_s *b = s->priv;
35885
3389262720da Fix previous commit, off_t must be replaced by int64_t
reimar
parents: 35881
diff changeset
91 int64_t p;
31565
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
92
31574
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
93 p = bd_seek(b->bd, pos);
31565
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
94 if (p == -1)
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
95 return 0;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
96
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
97 s->pos = p;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
98 return 1;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
99 }
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
100
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
101 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
102 {
31574
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
103 struct bluray_priv_s *b = s->priv;
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
104
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
105 return bd_read(b->bd, buf, len);
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
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
108 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
109 {
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
110 struct bluray_priv_s *b = s->priv;
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 switch (cmd) {
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 case STREAM_CTRL_GET_NUM_CHAPTERS: {
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
115 BLURAY_TITLE_INFO *ti;
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
116
34038
422eb76aee70 stream_bluray: switch to new libbluray API
diego
parents: 33827
diff changeset
117 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
118 if (!ti)
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
119 return STREAM_UNSUPPORTED;
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
120
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
121 *((unsigned int *) arg) = ti->chapter_count;
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
122 bd_free_title_info(ti);
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
123
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
124 return 1;
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
35169
3b2c280da1af Add new stream control command STREAM_CTRL_GET_CURRENT_TITLE for DVDs.
ib
parents: 34649
diff changeset
127 case STREAM_CTRL_GET_CURRENT_TITLE: {
3b2c280da1af Add new stream control command STREAM_CTRL_GET_CURRENT_TITLE for DVDs.
ib
parents: 34649
diff changeset
128 *((unsigned int *) arg) = b->current_title;
3b2c280da1af Add new stream control command STREAM_CTRL_GET_CURRENT_TITLE for DVDs.
ib
parents: 34649
diff changeset
129 return 1;
3b2c280da1af Add new stream control command STREAM_CTRL_GET_CURRENT_TITLE for DVDs.
ib
parents: 34649
diff changeset
130 }
3b2c280da1af Add new stream control command STREAM_CTRL_GET_CURRENT_TITLE for DVDs.
ib
parents: 34649
diff changeset
131
31574
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
132 case STREAM_CTRL_GET_CURRENT_CHAPTER: {
36079
4c42154f7aa3 br://: Fix querying current chapter.
reimar
parents: 35885
diff changeset
133 *((unsigned int *) arg) = bd_get_current_chapter(b->bd);
31574
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
134 return 1;
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
135 }
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
136
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
137 case STREAM_CTRL_SEEK_TO_CHAPTER: {
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
138 BLURAY_TITLE_INFO *ti;
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
139 int chapter = *((unsigned int *) arg);
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
140 int64_t pos;
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
141 int r;
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
142
34038
422eb76aee70 stream_bluray: switch to new libbluray API
diego
parents: 33827
diff changeset
143 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
144 if (!ti)
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
145 return STREAM_UNSUPPORTED;
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
146
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
147 if (chapter < 0 || chapter > ti->chapter_count) {
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
148 bd_free_title_info(ti);
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
149 return STREAM_UNSUPPORTED;
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
150 }
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
151
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
152 pos = bd_chapter_pos(b->bd, chapter);
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
153 r = bluray_stream_seek(s, pos);
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
154 bd_free_title_info(ti);
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 return r ? 1 : STREAM_UNSUPPORTED;
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
157 }
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
158
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
159 case STREAM_CTRL_GET_NUM_ANGLES: {
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
160 BLURAY_TITLE_INFO *ti;
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
161
34038
422eb76aee70 stream_bluray: switch to new libbluray API
diego
parents: 33827
diff changeset
162 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
163 if (!ti)
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
164 return STREAM_UNSUPPORTED;
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 *((int *) arg) = ti->angle_count;
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
167 bd_free_title_info(ti);
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 return 1;
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
170 }
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
171
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
172 case STREAM_CTRL_GET_ANGLE: {
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
173 *((int *) arg) = b->current_angle;
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
174 return 1;
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
175 }
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
176
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
177 case STREAM_CTRL_SET_ANGLE: {
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
178 BLURAY_TITLE_INFO *ti;
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
179 int angle = *((int *) arg);
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
180
34038
422eb76aee70 stream_bluray: switch to new libbluray API
diego
parents: 33827
diff changeset
181 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
182 if (!ti)
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
183 return STREAM_UNSUPPORTED;
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
184
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
185 if (angle < 0 || angle > ti->angle_count) {
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
186 bd_free_title_info(ti);
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
187 return STREAM_UNSUPPORTED;
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
188 }
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
189
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
190 b->current_angle = angle;
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
191 bd_seamless_angle_change(b->bd, angle);
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
192 bd_free_title_info(ti);
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
193
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
194 return 1;
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
195 }
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
196
34649
6dcc91eb3cf8 Support showing the stream language with br:// playback.
reimar
parents: 34038
diff changeset
197 case STREAM_CTRL_GET_LANG: {
6dcc91eb3cf8 Support showing the stream language with br:// playback.
reimar
parents: 34038
diff changeset
198 struct stream_lang_req *req = arg;
6dcc91eb3cf8 Support showing the stream language with br:// playback.
reimar
parents: 34038
diff changeset
199 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
200 if (ti->clip_count) {
6dcc91eb3cf8 Support showing the stream language with br:// playback.
reimar
parents: 34038
diff changeset
201 BLURAY_STREAM_INFO *si = NULL;
6dcc91eb3cf8 Support showing the stream language with br:// playback.
reimar
parents: 34038
diff changeset
202 int count = 0;
6dcc91eb3cf8 Support showing the stream language with br:// playback.
reimar
parents: 34038
diff changeset
203 switch (req->type) {
6dcc91eb3cf8 Support showing the stream language with br:// playback.
reimar
parents: 34038
diff changeset
204 case stream_ctrl_audio:
6dcc91eb3cf8 Support showing the stream language with br:// playback.
reimar
parents: 34038
diff changeset
205 count = ti->clips[0].audio_stream_count;
6dcc91eb3cf8 Support showing the stream language with br:// playback.
reimar
parents: 34038
diff changeset
206 si = ti->clips[0].audio_streams;
6dcc91eb3cf8 Support showing the stream language with br:// playback.
reimar
parents: 34038
diff changeset
207 break;
6dcc91eb3cf8 Support showing the stream language with br:// playback.
reimar
parents: 34038
diff changeset
208 case stream_ctrl_sub:
6dcc91eb3cf8 Support showing the stream language with br:// playback.
reimar
parents: 34038
diff changeset
209 count = ti->clips[0].pg_stream_count;
6dcc91eb3cf8 Support showing the stream language with br:// playback.
reimar
parents: 34038
diff changeset
210 si = ti->clips[0].pg_streams;
6dcc91eb3cf8 Support showing the stream language with br:// playback.
reimar
parents: 34038
diff changeset
211 break;
6dcc91eb3cf8 Support showing the stream language with br:// playback.
reimar
parents: 34038
diff changeset
212 }
6dcc91eb3cf8 Support showing the stream language with br:// playback.
reimar
parents: 34038
diff changeset
213 while (count-- > 0) {
6dcc91eb3cf8 Support showing the stream language with br:// playback.
reimar
parents: 34038
diff changeset
214 if (si->pid == req->id) {
6dcc91eb3cf8 Support showing the stream language with br:// playback.
reimar
parents: 34038
diff changeset
215 memcpy(req->buf, si->lang, 4);
6dcc91eb3cf8 Support showing the stream language with br:// playback.
reimar
parents: 34038
diff changeset
216 req->buf[4] = 0;
6dcc91eb3cf8 Support showing the stream language with br:// playback.
reimar
parents: 34038
diff changeset
217 bd_free_title_info(ti);
6dcc91eb3cf8 Support showing the stream language with br:// playback.
reimar
parents: 34038
diff changeset
218 return STREAM_OK;
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 si++;
6dcc91eb3cf8 Support showing the stream language with br:// playback.
reimar
parents: 34038
diff changeset
221 }
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 bd_free_title_info(ti);
6dcc91eb3cf8 Support showing the stream language with br:// playback.
reimar
parents: 34038
diff changeset
224 return STREAM_ERROR;
6dcc91eb3cf8 Support showing the stream language with br:// playback.
reimar
parents: 34038
diff changeset
225 }
6dcc91eb3cf8 Support showing the stream language with br:// playback.
reimar
parents: 34038
diff changeset
226
31574
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
227 default:
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
228 break;
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
229 }
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
230
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
231 return STREAM_UNSUPPORTED;
31565
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
232 }
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 static int bluray_stream_open(stream_t *s, int mode,
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
235 void *opts, int *file_format)
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
236 {
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
237 struct stream_priv_s *p = opts;
31574
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
238 struct bluray_priv_s *b;
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
239
31565
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
240 BLURAY_TITLE_INFO *info = NULL;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
241 BLURAY *bd;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
242
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
243 int title, title_guess, title_count;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
244 uint64_t title_size;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
245
36081
eadb3ddad605 Remove the broken -bluray-chapter option.
reimar
parents: 36079
diff changeset
246 unsigned int angle = 0;
31565
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
247 uint64_t max_duration = 0;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
248
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
249 char *device = NULL;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
250 int i;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
251
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
252 /* find the requested device */
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
253 if (p->device)
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
254 device = p->device;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
255 else if (bluray_device)
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
256 device = bluray_device;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
257
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
258 if (!device) {
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
259 mp_msg(MSGT_OPEN, MSGL_ERR, MSGTR_BlurayNoDevice);
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
260 return STREAM_UNSUPPORTED;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
261 }
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
262
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
263 /* open device */
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
264 bd = bd_open(device, NULL);
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
265 if (!bd) {
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
266 mp_msg(MSGT_OPEN, MSGL_ERR, MSGTR_CantOpenBluray, device);
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
267 return STREAM_UNSUPPORTED;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
268 }
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
269
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
270 /* check for available titles on disc */
34038
422eb76aee70 stream_bluray: switch to new libbluray API
diego
parents: 33827
diff changeset
271 title_count = bd_get_titles(bd, TITLES_RELEVANT, angle);
31565
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
272 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
273 if (!title_count) {
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
274 mp_msg(MSGT_OPEN, MSGL_ERR, MSGTR_BlurayNoTitles);
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
275 bd_close(bd);
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
276 return STREAM_UNSUPPORTED;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
277 }
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
278
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
279 /* parse titles information */
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
280 title_guess = BLURAY_DEFAULT_TITLE;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
281 for (i = 0; i < title_count; i++) {
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
282 BLURAY_TITLE_INFO *ti;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
283 int sec, msec;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
284
34038
422eb76aee70 stream_bluray: switch to new libbluray API
diego
parents: 33827
diff changeset
285 ti = bd_get_title_info(bd, i, angle);
31565
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
286 if (!ti)
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
287 continue;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
288
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
289 sec = ti->duration / 90000;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
290 msec = (ti->duration - sec) % 1000;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
291
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_CHAPTERS=%d\n", i + 1, ti->chapter_count);
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
294 mp_msg(MSGT_IDENTIFY, MSGL_INFO,
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
295 "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
296 mp_msg(MSGT_IDENTIFY, MSGL_V,
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
297 "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
298
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
299 /* try to guess which title may contain the main movie */
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
300 if (ti->duration > max_duration) {
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
301 max_duration = ti->duration;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
302 title_guess = i;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
303 }
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 bd_free_title_info(ti);
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
306 }
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
307
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
308 /* Select current title */
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
309 title = p->title ? p->title - 1: title_guess;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
310 title = FFMIN(title, title_count - 1);
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 bd_select_title(bd, title);
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
313
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
314 title_size = bd_get_title_size(bd);
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
315 mp_msg(MSGT_IDENTIFY, MSGL_INFO,
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
316 "ID_BLURAY_CURRENT_TITLE=%d\n", title + 1);
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
317
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
318 /* Get current title information */
34038
422eb76aee70 stream_bluray: switch to new libbluray API
diego
parents: 33827
diff changeset
319 info = bd_get_title_info(bd, title, angle);
31565
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
320 if (!info)
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
321 goto err_no_info;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
322
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
323 /* Select angle */
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
324 angle = bluray_angle ? bluray_angle : BLURAY_DEFAULT_ANGLE;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
325 angle = FFMIN(angle, info->angle_count);
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
326
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
327 if (angle)
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
328 bd_select_angle(bd, angle);
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
329
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
330 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
331
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
332 bd_free_title_info(info);
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
333
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
334 err_no_info:
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
335 s->fill_buffer = bluray_stream_fill_buffer;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
336 s->seek = bluray_stream_seek;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
337 s->close = bluray_stream_close;
31574
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
338 s->control = bluray_stream_control;
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
339
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
340 b = calloc(1, sizeof(struct bluray_priv_s));
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
341 b->bd = bd;
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
342 b->current_angle = angle;
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
343 b->current_title = title;
31565
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
344
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
345 s->end_pos = title_size;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
346 s->sector_size = BLURAY_SECTOR_SIZE;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
347 s->flags = mode | MP_STREAM_SEEK;
31574
1d31cd52aa08 Implement slave mode compatible stream controls for Blu-ray.
ben
parents: 31565
diff changeset
348 s->priv = b;
31565
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
349 s->type = STREAMTYPE_BLURAY;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
350 s->url = strdup("br://");
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
351
33827
277ec491a8a7 Do not translate console messages of verbosity level MSGL_V and above.
diego
parents: 32326
diff changeset
352 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
353
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
354 return STREAM_OK;
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
355 }
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
356
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
357 const stream_info_t stream_info_bluray = {
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
358 "Blu-ray Disc",
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
359 "bd",
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
360 "Benjamin Zores",
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
361 "Play Blu-ray discs through external libbluray",
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
362 bluray_stream_open,
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
363 { "br", "bluray", NULL },
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
364 &bluray_stream_opts,
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
365 1
9a590e7aac57 Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff changeset
366 };