summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Melanson <mike@multimedia.cx>2003-10-29 01:45:52 +0000
committerMike Melanson <mike@multimedia.cx>2003-10-29 01:45:52 +0000
commit84266d166ed4f9c247d676a613f746a0d29ef4c0 (patch)
tree4aa7f2f4e14431083c33793e8b629c9e21b4c023
parent166a95a284fdbe22db3b8fdbaea9b45332b72843 (diff)
downloadxine-lib-84266d166ed4f9c247d676a613f746a0d29ef4c0.tar.gz
xine-lib-84266d166ed4f9c247d676a613f746a0d29ef4c0.tar.bz2
special-case warning for DRM-protected Quicktime files, at least until
such time that Apple's DRM is inevitably cracked CVS patchset: 5635 CVS date: 2003/10/29 01:45:52
-rw-r--r--src/demuxers/demux_qt.c33
1 files changed, 17 insertions, 16 deletions
diff --git a/src/demuxers/demux_qt.c b/src/demuxers/demux_qt.c
index 550b1cd20..5225ee46f 100644
--- a/src/demuxers/demux_qt.c
+++ b/src/demuxers/demux_qt.c
@@ -30,7 +30,7 @@
* build_frame_table
* free_qt_info
*
- * $Id: demux_qt.c,v 1.166 2003/10/06 15:46:20 mroi Exp $
+ * $Id: demux_qt.c,v 1.167 2003/10/29 01:45:52 tmmm Exp $
*
*/
@@ -99,6 +99,7 @@ typedef unsigned int qt_atom;
#define IMA4_FOURCC QT_ATOM('i', 'm', 'a', '4')
#define MP4A_FOURCC QT_ATOM('m', 'p', '4', 'a')
+#define DRMS_FOURCC QT_ATOM('d', 'r', 'm', 's')
#define TWOS_FOURCC QT_ATOM('t', 'w', 'o', 's')
#define SOWT_FOURCC QT_ATOM('s', 'o', 'w', 't')
#define RAW_FOURCC QT_ATOM('r', 'a', 'w', ' ')
@@ -136,7 +137,8 @@ typedef enum {
QT_NO_MOOV_ATOM,
QT_NO_ZLIB,
QT_ZLIB_ERROR,
- QT_HEADER_TROUBLE
+ QT_HEADER_TROUBLE,
+ QT_DRM_NOT_SUPPORTED
} qt_error;
/* there are other types but these are the ones we usually care about */
@@ -762,19 +764,6 @@ static qt_error parse_trak_atom (qt_trak *trak,
if (current_atom == TKHD_ATOM) {
trak->flags = BE_16(&trak_atom[i + 6]);
-#if 0
- if (trak->type == MEDIA_VIDEO) {
- /* fetch display parameters */
- if( !trak->stsd_atoms[j].video.width ||
- !trak->stsd_atoms[j].video.height ) {
-
- trak->stsd_atoms[j].video.width =
- BE_16(&trak_atom[i + 0x50]);
- trak->stsd_atoms[j].video.height =
- BE_16(&trak_atom[i + 0x54]);
- }
- }
-#endif
} else if (current_atom == ELST_ATOM) {
/* there should only be one edit list table */
@@ -1054,6 +1043,11 @@ static qt_error parse_trak_atom (qt_trak *trak,
if (BE_32(&trak_atom[atom_pos + 0x0]) == MP4A_FOURCC)
trak->stsd_atoms[k].audio.vbr = 1;
+ if (BE_32(&trak_atom[atom_pos + 0x0]) == DRMS_FOURCC) {
+ last_error = QT_DRM_NOT_SUPPORTED;
+ goto free_trak;
+ }
+
/* check for a MS-style WAVE format header */
if ((current_atom_size >= 0x48) &&
(BE_32(&trak_atom[atom_pos + 0x34]) == WAVE_ATOM)) {
@@ -1756,7 +1750,8 @@ static void parse_moov_atom(qt_info *info, unsigned char *moov_atom,
info->traks = (qt_trak *)realloc(info->traks,
info->trak_count * sizeof(qt_trak));
- parse_trak_atom (&info->traks[info->trak_count - 1], &moov_atom[i - 4]);
+ info->last_error = parse_trak_atom (&info->traks[info->trak_count - 1],
+ &moov_atom[i - 4]);
if (info->last_error != QT_OK) {
info->trak_count--;
return;
@@ -2716,6 +2711,12 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str
return NULL;
}
if (open_qt_file(this->qt, this->input, this->bandwidth) != QT_OK) {
+
+ /* special consideration for DRM-protected files */
+ if (this->qt->last_error == QT_DRM_NOT_SUPPORTED)
+ xine_message (this->stream, XINE_MSG_ENCRYPTED_SOURCE,
+ "DRM-protected Quicktime file", NULL);
+
free_qt_info (this->qt);
free (this);
return NULL;