Mercurial > mplayer.hg
annotate stream/stream_bluray.c @ 32676:db882cd69776
Do not #define _WIN32 on the command line for Cygwin.
Newer Cygwin versions no longer do this and hopefully we should be able
to survive without this hack as well. This change necessitates adapting
two #ifdefs in the MPlayer codebase. It is committed untested as I do
not have access to a Cygwin system.
author | diego |
---|---|
date | Thu, 06 Jan 2011 12:42:59 +0000 |
parents | 4189a8951568 |
children | 277ec491a8a7 |
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 |
1d31cd52aa08
Implement slave mode compatible stream controls for Blu-ray.
ben
parents:
31565
diff
changeset
|
119 ti = bd_get_title_info(b->bd, b->current_title); |
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 |
1d31cd52aa08
Implement slave mode compatible stream controls for Blu-ray.
ben
parents:
31565
diff
changeset
|
140 ti = bd_get_title_info(b->bd, b->current_title); |
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 |
1d31cd52aa08
Implement slave mode compatible stream controls for Blu-ray.
ben
parents:
31565
diff
changeset
|
159 ti = bd_get_title_info(b->bd, b->current_title); |
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 |
1d31cd52aa08
Implement slave mode compatible stream controls for Blu-ray.
ben
parents:
31565
diff
changeset
|
178 ti = bd_get_title_info(b->bd, b->current_title); |
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 |
1d31cd52aa08
Implement slave mode compatible stream controls for Blu-ray.
ben
parents:
31565
diff
changeset
|
194 default: |
1d31cd52aa08
Implement slave mode compatible stream controls for Blu-ray.
ben
parents:
31565
diff
changeset
|
195 break; |
1d31cd52aa08
Implement slave mode compatible stream controls for Blu-ray.
ben
parents:
31565
diff
changeset
|
196 } |
1d31cd52aa08
Implement slave mode compatible stream controls for Blu-ray.
ben
parents:
31565
diff
changeset
|
197 |
1d31cd52aa08
Implement slave mode compatible stream controls for Blu-ray.
ben
parents:
31565
diff
changeset
|
198 return STREAM_UNSUPPORTED; |
31565
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
199 } |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
200 |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
201 static int bluray_stream_open(stream_t *s, int mode, |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
202 void *opts, int *file_format) |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
203 { |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
204 struct stream_priv_s *p = opts; |
31574
1d31cd52aa08
Implement slave mode compatible stream controls for Blu-ray.
ben
parents:
31565
diff
changeset
|
205 struct bluray_priv_s *b; |
1d31cd52aa08
Implement slave mode compatible stream controls for Blu-ray.
ben
parents:
31565
diff
changeset
|
206 |
31565
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
207 BLURAY_TITLE_INFO *info = NULL; |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
208 BLURAY *bd; |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
209 |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
210 int title, title_guess, title_count; |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
211 uint64_t title_size; |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
212 |
31574
1d31cd52aa08
Implement slave mode compatible stream controls for Blu-ray.
ben
parents:
31565
diff
changeset
|
213 unsigned int chapter = 0, angle = 0; |
31565
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
214 uint64_t max_duration = 0; |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
215 int64_t chapter_pos = 0; |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
216 |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
217 char *device = NULL; |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
218 int i; |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
219 |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
220 /* find the requested device */ |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
221 if (p->device) |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
222 device = p->device; |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
223 else if (bluray_device) |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
224 device = bluray_device; |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
225 |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
226 if (!device) { |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
227 mp_msg(MSGT_OPEN, MSGL_ERR, MSGTR_BlurayNoDevice); |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
228 return STREAM_UNSUPPORTED; |
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 /* open device */ |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
232 bd = bd_open(device, NULL); |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
233 if (!bd) { |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
234 mp_msg(MSGT_OPEN, MSGL_ERR, MSGTR_CantOpenBluray, device); |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
235 return STREAM_UNSUPPORTED; |
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 |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
238 /* check for available titles on disc */ |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
239 title_count = bd_get_titles(bd, TITLES_RELEVANT); |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
240 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
|
241 if (!title_count) { |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
242 mp_msg(MSGT_OPEN, MSGL_ERR, MSGTR_BlurayNoTitles); |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
243 bd_close(bd); |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
244 return STREAM_UNSUPPORTED; |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
245 } |
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 /* parse titles information */ |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
248 title_guess = BLURAY_DEFAULT_TITLE; |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
249 for (i = 0; i < title_count; i++) { |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
250 BLURAY_TITLE_INFO *ti; |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
251 int sec, msec; |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
252 |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
253 ti = bd_get_title_info(bd, i); |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
254 if (!ti) |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
255 continue; |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
256 |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
257 sec = ti->duration / 90000; |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
258 msec = (ti->duration - sec) % 1000; |
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 mp_msg(MSGT_IDENTIFY, MSGL_INFO, |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
261 "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
|
262 mp_msg(MSGT_IDENTIFY, MSGL_INFO, |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
263 "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
|
264 mp_msg(MSGT_IDENTIFY, MSGL_V, |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
265 "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
|
266 |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
267 /* try to guess which title may contain the main movie */ |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
268 if (ti->duration > max_duration) { |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
269 max_duration = ti->duration; |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
270 title_guess = i; |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
271 } |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
272 |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
273 bd_free_title_info(ti); |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
274 } |
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 /* Select current title */ |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
277 title = p->title ? p->title - 1: title_guess; |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
278 title = FFMIN(title, title_count - 1); |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
279 |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
280 bd_select_title(bd, title); |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
281 |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
282 title_size = bd_get_title_size(bd); |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
283 mp_msg(MSGT_IDENTIFY, MSGL_INFO, |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
284 "ID_BLURAY_CURRENT_TITLE=%d\n", title + 1); |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
285 |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
286 /* Get current title information */ |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
287 info = bd_get_title_info(bd, title); |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
288 if (!info) |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
289 goto err_no_info; |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
290 |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
291 /* Select chapter */ |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
292 chapter = bluray_chapter ? bluray_chapter : BLURAY_DEFAULT_CHAPTER; |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
293 chapter = FFMIN(chapter, info->chapter_count); |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
294 |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
295 if (chapter) |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
296 chapter_pos = bd_chapter_pos(bd, chapter); |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
297 |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
298 mp_msg(MSGT_IDENTIFY, MSGL_INFO, |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
299 "ID_BLURAY_CURRENT_CHAPTER=%d\n", chapter + 1); |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
300 |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
301 /* Select angle */ |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
302 angle = bluray_angle ? bluray_angle : BLURAY_DEFAULT_ANGLE; |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
303 angle = FFMIN(angle, info->angle_count); |
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 if (angle) |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
306 bd_select_angle(bd, angle); |
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 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
|
309 |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
310 bd_free_title_info(info); |
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 err_no_info: |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
313 s->fill_buffer = bluray_stream_fill_buffer; |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
314 s->seek = bluray_stream_seek; |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
315 s->close = bluray_stream_close; |
31574
1d31cd52aa08
Implement slave mode compatible stream controls for Blu-ray.
ben
parents:
31565
diff
changeset
|
316 s->control = bluray_stream_control; |
1d31cd52aa08
Implement slave mode compatible stream controls for Blu-ray.
ben
parents:
31565
diff
changeset
|
317 |
1d31cd52aa08
Implement slave mode compatible stream controls for Blu-ray.
ben
parents:
31565
diff
changeset
|
318 b = calloc(1, sizeof(struct bluray_priv_s)); |
1d31cd52aa08
Implement slave mode compatible stream controls for Blu-ray.
ben
parents:
31565
diff
changeset
|
319 b->bd = bd; |
1d31cd52aa08
Implement slave mode compatible stream controls for Blu-ray.
ben
parents:
31565
diff
changeset
|
320 b->current_angle = angle; |
1d31cd52aa08
Implement slave mode compatible stream controls for Blu-ray.
ben
parents:
31565
diff
changeset
|
321 b->current_chapter = chapter; |
1d31cd52aa08
Implement slave mode compatible stream controls for Blu-ray.
ben
parents:
31565
diff
changeset
|
322 b->current_title = title; |
31565
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
323 |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
324 s->start_pos = chapter_pos; |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
325 s->end_pos = title_size; |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
326 s->sector_size = BLURAY_SECTOR_SIZE; |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
327 s->flags = mode | MP_STREAM_SEEK; |
31574
1d31cd52aa08
Implement slave mode compatible stream controls for Blu-ray.
ben
parents:
31565
diff
changeset
|
328 s->priv = b; |
31565
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
329 s->type = STREAMTYPE_BLURAY; |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
330 s->url = strdup("br://"); |
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 mp_msg(MSGT_OPEN, MSGL_V, MSGTR_BlurayOK); |
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 return STREAM_OK; |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
335 } |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
336 |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
337 const stream_info_t stream_info_bluray = { |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
338 "Blu-ray Disc", |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
339 "bd", |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
340 "Benjamin Zores", |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
341 "Play Blu-ray discs through external libbluray", |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
342 bluray_stream_open, |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
343 { "br", "bluray", NULL }, |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
344 &bluray_stream_opts, |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
345 1 |
9a590e7aac57
Support for unencrypted Blu-ray playback through libbluray.
ben
parents:
diff
changeset
|
346 }; |