Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc-gpu
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
videolan
vlc-gpu
Commits
051ce627
Commit
051ce627
authored
Jan 05, 2004
by
Jon Lech Johansen
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
* ./modules/demux/mp4: DRMS support.
parent
d7dce911
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
1703 additions
and
5 deletions
+1703
-5
AUTHORS
AUTHORS
+2
-1
modules/demux/mp4/Modules.am
modules/demux/mp4/Modules.am
+3
-0
modules/demux/mp4/drms.c
modules/demux/mp4/drms.c
+1014
-0
modules/demux/mp4/drms.h
modules/demux/mp4/drms.h
+39
-0
modules/demux/mp4/drmstables.h
modules/demux/mp4/drmstables.h
+448
-0
modules/demux/mp4/libmp4.c
modules/demux/mp4/libmp4.c
+169
-1
modules/demux/mp4/libmp4.h
modules/demux/mp4/libmp4.h
+10
-1
modules/demux/mp4/mp4.c
modules/demux/mp4/mp4.c
+15
-1
modules/demux/mp4/mp4.h
modules/demux/mp4/mp4.h
+3
-1
No files found.
AUTHORS
View file @
051ce627
# $Id: AUTHORS,v 1.10
0 2004/01/05 12:24:51
jlj Exp $
# $Id: AUTHORS,v 1.10
1 2004/01/05 12:37:52
jlj Exp $
#
#
# The format of this file was inspired by the Linux kernel CREDITS file.
# The format of this file was inspired by the Linux kernel CREDITS file.
# Authors are listed alphabetically.
# Authors are listed alphabetically.
...
@@ -198,6 +198,7 @@ D: Win32 DVD input port
...
@@ -198,6 +198,7 @@ D: Win32 DVD input port
D: QNX RTOS plug-in
D: QNX RTOS plug-in
D: MacOS X port
D: MacOS X port
D: norwegian translation
D: norwegian translation
D: MP4 DRMS support
S: France
S: France
N: Michel Kaempf
N: Michel Kaempf
...
...
modules/demux/mp4/Modules.am
View file @
051ce627
...
@@ -3,4 +3,7 @@ SOURCES_mp4 = \
...
@@ -3,4 +3,7 @@ SOURCES_mp4 = \
mp4.h \
mp4.h \
libmp4.c \
libmp4.c \
libmp4.h \
libmp4.h \
drms.c \
drms.h \
drmstables.h \
$(NULL)
$(NULL)
modules/demux/mp4/drms.c
0 → 100644
View file @
051ce627
/*****************************************************************************
* drms.c : DRMS
*****************************************************************************
* Copyright (C) 2004 VideoLAN
* $Id: drms.c,v 1.1 2004/01/05 12:37:52 jlj Exp $
*
* Author: Jon Lech Johansen <jon-vl@nanocrew.net>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
*****************************************************************************/
#include <stdlib.h>
/* malloc(), free() */
#include <vlc/vlc.h>
#ifdef WIN32
#include <tchar.h>
#include <shlobj.h>
#include <windows.h>
#endif
#include "drms.h"
#include "drmstables.h"
#define TAOS_INIT( tmp, i ) \
memset( tmp, 0, sizeof(tmp) ); \
tmp[ i + 0 ] = 0x67452301; \
tmp[ i + 1 ] = 0xEFCDAB89; \
tmp[ i + 2 ] = 0x98BADCFE; \
tmp[ i + 3 ] = 0x10325476;
#define ROR( x, n ) (((x) << (32-(n))) | ((x) >> (n)))
static
void
init_ctx
(
uint32_t
*
p_ctx
,
uint32_t
*
p_input
)
{
uint32_t
i
;
uint32_t
p_tmp
[
6
];
p_ctx
[
0
]
=
sizeof
(
*
p_input
);
memset
(
&
p_ctx
[
1
+
4
],
0
,
sizeof
(
*
p_input
)
*
4
);
memcpy
(
&
p_ctx
[
1
+
0
],
p_input
,
sizeof
(
*
p_input
)
*
4
);
p_tmp
[
0
]
=
p_ctx
[
1
+
3
];
for
(
i
=
0
;
i
<
sizeof
(
p_drms_tab1
)
/
sizeof
(
p_drms_tab1
[
0
]);
i
++
)
{
p_tmp
[
0
]
=
ROR
(
p_tmp
[
0
],
8
);
p_tmp
[
5
]
=
p_drms_tab2
[
(
p_tmp
[
0
]
>>
24
)
&
0xFF
]
^
ROR
(
p_drms_tab2
[
(
p_tmp
[
0
]
>>
16
)
&
0xFF
],
8
)
^
ROR
(
p_drms_tab2
[
(
p_tmp
[
0
]
>>
8
)
&
0xFF
],
16
)
^
ROR
(
p_drms_tab2
[
p_tmp
[
0
]
&
0xFF
],
24
)
^
p_drms_tab1
[
i
]
^
p_ctx
[
1
+
((
i
+
1
)
*
4
)
-
4
];
p_ctx
[
1
+
((
i
+
1
)
*
4
)
+
0
]
=
p_tmp
[
5
];
p_tmp
[
5
]
^=
p_ctx
[
1
+
((
i
+
1
)
*
4
)
-
3
];
p_ctx
[
1
+
((
i
+
1
)
*
4
)
+
1
]
=
p_tmp
[
5
];
p_tmp
[
5
]
^=
p_ctx
[
1
+
((
i
+
1
)
*
4
)
-
2
];
p_ctx
[
1
+
((
i
+
1
)
*
4
)
+
2
]
=
p_tmp
[
5
];
p_tmp
[
5
]
^=
p_ctx
[
1
+
((
i
+
1
)
*
4
)
-
1
];
p_ctx
[
1
+
((
i
+
1
)
*
4
)
+
3
]
=
p_tmp
[
5
];
p_tmp
[
0
]
=
p_tmp
[
5
];
}
memcpy
(
&
p_ctx
[
1
+
64
],
&
p_ctx
[
1
],
sizeof
(
*
p_ctx
)
*
4
);
for
(
i
=
4
;
i
<
sizeof
(
p_drms_tab1
);
i
++
)
{
p_tmp
[
2
]
=
p_ctx
[
1
+
4
+
(
i
-
4
)
];
p_tmp
[
0
]
=
(((
p_tmp
[
2
]
>>
7
)
&
0x01010101
)
*
27
)
^
((
p_tmp
[
2
]
&
0xFF7F7F7F
)
<<
1
);
p_tmp
[
1
]
=
(((
p_tmp
[
0
]
>>
7
)
&
0x01010101
)
*
27
)
^
((
p_tmp
[
0
]
&
0xFF7F7F7F
)
<<
1
);
p_tmp
[
4
]
=
(((
p_tmp
[
1
]
>>
7
)
&
0x01010101
)
*
27
)
^
((
p_tmp
[
1
]
&
0xFF7F7F7F
)
<<
1
);
p_tmp
[
2
]
^=
p_tmp
[
4
];
p_tmp
[
3
]
=
ROR
(
p_tmp
[
1
]
^
p_tmp
[
2
],
16
)
^
ROR
(
p_tmp
[
0
]
^
p_tmp
[
2
],
8
)
^
ROR
(
p_tmp
[
2
],
24
);
p_ctx
[
1
+
4
+
64
+
(
i
-
4
)
]
=
p_tmp
[
3
]
^
p_tmp
[
4
]
^
p_tmp
[
1
]
^
p_tmp
[
0
];
}
}
static
void
ctx_xor
(
uint32_t
*
p_ctx
,
uint32_t
*
p_in
,
uint32_t
*
p_out
,
uint32_t
p_table1
[
256
],
uint32_t
p_table2
[
256
]
)
{
uint32_t
i
,
x
,
y
;
uint32_t
p_tmp1
[
4
];
uint32_t
p_tmp2
[
4
];
i
=
p_ctx
[
0
]
*
4
;
p_tmp1
[
0
]
=
p_ctx
[
1
+
i
+
24
]
^
p_in
[
0
];
p_tmp1
[
1
]
=
p_ctx
[
1
+
i
+
25
]
^
p_in
[
1
];
p_tmp1
[
2
]
=
p_ctx
[
1
+
i
+
26
]
^
p_in
[
2
];
p_tmp1
[
3
]
=
p_ctx
[
1
+
i
+
27
]
^
p_in
[
3
];
i
+=
84
;
#define XOR_ROR( p_table, p_tmp, i_ctx ) \
p_table[ (p_tmp[ y > 2 ? y - 3 : y + 1 ] >> 24) & 0xFF ] \
^ ROR( p_table[ (p_tmp[ y > 1 ? y - 2 : y + 2 ] >> 16) & 0xFF ], 8 ) \
^ ROR( p_table[ (p_tmp[ y > 0 ? y - 1 : y + 3 ] >> 8) & 0xFF ], 16 ) \
^ ROR( p_table[ p_tmp[ y ] & 0xFF ], 24 ) \
^ p_ctx[ i_ctx ]
for
(
x
=
0
;
x
<
1
;
x
++
)
{
memcpy
(
p_tmp2
,
p_tmp1
,
sizeof
(
p_tmp1
)
);
for
(
y
=
0
;
y
<
4
;
y
++
)
{
p_tmp1
[
y
]
=
XOR_ROR
(
p_table1
,
p_tmp2
,
1
+
i
-
x
+
y
);
}
}
for
(
;
x
<
9
;
x
++
)
{
memcpy
(
p_tmp2
,
p_tmp1
,
sizeof
(
p_tmp1
)
);
for
(
y
=
0
;
y
<
4
;
y
++
)
{
p_tmp1
[
y
]
=
XOR_ROR
(
p_table1
,
p_tmp2
,
1
+
i
-
x
-
((
x
*
3
)
-
y
)
);
}
}
for
(
y
=
0
;
y
<
4
;
y
++
)
{
p_out
[
y
]
=
XOR_ROR
(
p_table2
,
p_tmp1
,
1
+
i
-
x
-
((
x
*
3
)
-
y
)
);
}
#undef XOR_ROR
}
static
void
taos
(
uint32_t
*
p_buffer
,
uint32_t
*
p_input
)
{
uint32_t
i
;
uint32_t
x
=
0
;
uint32_t
p_tmp1
[
4
];
uint32_t
p_tmp2
[
4
];
memcpy
(
p_tmp1
,
p_buffer
,
sizeof
(
p_tmp1
)
);
p_tmp2
[
0
]
=
((
~
p_tmp1
[
1
]
&
p_tmp1
[
3
])
|
(
p_tmp1
[
2
]
&
p_tmp1
[
1
]))
+
p_input
[
x
];
p_tmp1
[
0
]
=
p_tmp2
[
0
]
+
p_tmp1
[
0
]
+
p_drms_tab_taos
[
x
++
];
for
(
i
=
0
;
i
<
4
;
i
++
)
{
p_tmp2
[
0
]
=
((
p_tmp1
[
0
]
>>
0x19
)
|
(
p_tmp1
[
0
]
<<
0x7
))
+
p_tmp1
[
1
];
p_tmp2
[
1
]
=
((
~
p_tmp2
[
0
]
&
p_tmp1
[
2
])
|
(
p_tmp1
[
1
]
&
p_tmp2
[
0
]))
+
p_input
[
x
];
p_tmp2
[
1
]
+=
p_tmp1
[
3
]
+
p_drms_tab_taos
[
x
++
];
p_tmp1
[
3
]
=
((
p_tmp2
[
1
]
>>
0x14
)
|
(
p_tmp2
[
1
]
<<
0xC
))
+
p_tmp2
[
0
];
p_tmp2
[
1
]
=
((
~
p_tmp1
[
3
]
&
p_tmp1
[
1
])
|
(
p_tmp1
[
3
]
&
p_tmp2
[
0
]))
+
p_input
[
x
];
p_tmp2
[
1
]
+=
p_tmp1
[
2
]
+
p_drms_tab_taos
[
x
++
];
p_tmp1
[
2
]
=
((
p_tmp2
[
1
]
>>
0xF
)
|
(
p_tmp2
[
1
]
<<
0x11
))
+
p_tmp1
[
3
];
p_tmp2
[
1
]
=
((
~
p_tmp1
[
2
]
&
p_tmp2
[
0
])
|
(
p_tmp1
[
3
]
&
p_tmp1
[
2
]))
+
p_input
[
x
];
p_tmp2
[
2
]
=
p_tmp2
[
1
]
+
p_tmp1
[
1
]
+
p_drms_tab_taos
[
x
++
];
p_tmp1
[
1
]
=
((
p_tmp2
[
2
]
<<
0x16
)
|
(
p_tmp2
[
2
]
>>
0xA
))
+
p_tmp1
[
2
];
if
(
i
==
3
)
{
p_tmp2
[
1
]
=
((
~
p_tmp1
[
3
]
&
p_tmp1
[
2
])
|
(
p_tmp1
[
3
]
&
p_tmp1
[
1
]))
+
p_input
[
1
];
}
else
{
p_tmp2
[
1
]
=
((
~
p_tmp1
[
1
]
&
p_tmp1
[
3
])
|
(
p_tmp1
[
2
]
&
p_tmp1
[
1
]))
+
p_input
[
x
];
}
p_tmp1
[
0
]
=
p_tmp2
[
0
]
+
p_tmp2
[
1
]
+
p_drms_tab_taos
[
x
++
];
}
for
(
i
=
0
;
i
<
4
;
i
++
)
{
uint8_t
p_table
[
4
][
4
]
=
{
{
6
,
11
,
0
,
5
},
{
10
,
15
,
4
,
9
},
{
14
,
3
,
8
,
13
},
{
2
,
7
,
12
,
5
}
};
p_tmp2
[
0
]
=
((
p_tmp1
[
0
]
>>
0x1B
)
|
(
p_tmp1
[
0
]
<<
0x5
))
+
p_tmp1
[
1
];
p_tmp2
[
1
]
=
((
~
p_tmp1
[
2
]
&
p_tmp1
[
1
])
|
(
p_tmp1
[
2
]
&
p_tmp2
[
0
]))
+
p_input
[
p_table
[
i
][
0
]
];
p_tmp2
[
1
]
+=
p_tmp1
[
3
]
+
p_drms_tab_taos
[
x
++
];
p_tmp1
[
3
]
=
((
p_tmp2
[
1
]
>>
0x17
)
|
(
p_tmp2
[
1
]
<<
0x9
))
+
p_tmp2
[
0
];
p_tmp2
[
1
]
=
((
~
p_tmp1
[
1
]
&
p_tmp2
[
0
])
|
(
p_tmp1
[
3
]
&
p_tmp1
[
1
]))
+
p_input
[
p_table
[
i
][
1
]
];
p_tmp2
[
1
]
+=
p_tmp1
[
2
]
+
p_drms_tab_taos
[
x
++
];
p_tmp1
[
2
]
=
((
p_tmp2
[
1
]
>>
0x12
)
|
(
p_tmp2
[
1
]
<<
0xE
))
+
p_tmp1
[
3
];
p_tmp2
[
1
]
=
((
~
p_tmp2
[
0
]
&
p_tmp1
[
3
])
|
(
p_tmp1
[
2
]
&
p_tmp2
[
0
]))
+
p_input
[
p_table
[
i
][
2
]
];
p_tmp2
[
1
]
+=
p_tmp1
[
1
]
+
p_drms_tab_taos
[
x
++
];
p_tmp1
[
1
]
=
((
p_tmp2
[
1
]
<<
0x14
)
|
(
p_tmp2
[
1
]
>>
0xC
))
+
p_tmp1
[
2
];
if
(
i
==
3
)
{
p_tmp2
[
1
]
=
(
p_tmp1
[
3
]
^
p_tmp1
[
2
]
^
p_tmp1
[
1
])
+
p_input
[
p_table
[
i
][
3
]
];
}
else
{
p_tmp2
[
1
]
=
((
~
p_tmp1
[
3
]
&
p_tmp1
[
2
])
|
(
p_tmp1
[
3
]
&
p_tmp1
[
1
]))
+
p_input
[
p_table
[
i
][
3
]
];
}
p_tmp1
[
0
]
=
p_tmp2
[
0
]
+
p_tmp2
[
1
]
+
p_drms_tab_taos
[
x
++
];
}
for
(
i
=
0
;
i
<
4
;
i
++
)
{
uint8_t
p_table
[
4
][
4
]
=
{
{
8
,
11
,
14
,
1
},
{
4
,
7
,
10
,
13
},
{
0
,
3
,
6
,
9
},
{
12
,
15
,
2
,
0
}
};
p_tmp2
[
0
]
=
((
p_tmp1
[
0
]
>>
0x1C
)
|
(
p_tmp1
[
0
]
<<
0x4
))
+
p_tmp1
[
1
];
p_tmp2
[
1
]
=
(
p_tmp1
[
2
]
^
p_tmp1
[
1
]
^
p_tmp2
[
0
])
+
p_input
[
p_table
[
i
][
0
]
];
p_tmp2
[
1
]
+=
p_tmp1
[
3
]
+
p_drms_tab_taos
[
x
++
];
p_tmp1
[
3
]
=
((
p_tmp2
[
1
]
>>
0x15
)
|
(
p_tmp2
[
1
]
<<
0xB
))
+
p_tmp2
[
0
];
p_tmp2
[
1
]
=
(
p_tmp1
[
3
]
^
p_tmp1
[
1
]
^
p_tmp2
[
0
])
+
p_input
[
p_table
[
i
][
1
]
];
p_tmp2
[
1
]
+=
p_tmp1
[
2
]
+
p_drms_tab_taos
[
x
++
];
p_tmp1
[
2
]
=
((
p_tmp2
[
1
]
>>
0x10
)
|
(
p_tmp2
[
1
]
<<
0x10
))
+
p_tmp1
[
3
];
p_tmp2
[
1
]
=
(
p_tmp1
[
3
]
^
p_tmp1
[
2
]
^
p_tmp2
[
0
])
+
p_input
[
p_table
[
i
][
2
]
];
p_tmp2
[
1
]
+=
p_tmp1
[
1
]
+
p_drms_tab_taos
[
x
++
];
p_tmp1
[
1
]
=
((
p_tmp2
[
1
]
<<
0x17
)
|
(
p_tmp2
[
1
]
>>
0x9
))
+
p_tmp1
[
2
];
if
(
i
==
3
)
{
p_tmp2
[
1
]
=
((
~
p_tmp1
[
3
]
|
p_tmp1
[
1
])
^
p_tmp1
[
2
])
+
p_input
[
p_table
[
i
][
3
]
];
}
else
{
p_tmp2
[
1
]
=
(
p_tmp1
[
3
]
^
p_tmp1
[
2
]
^
p_tmp1
[
1
])
+
p_input
[
p_table
[
i
][
3
]
];
}
p_tmp1
[
0
]
=
p_tmp2
[
0
]
+
p_tmp2
[
1
]
+
p_drms_tab_taos
[
x
++
];
}
for
(
i
=
0
;
i
<
4
;
i
++
)
{
uint8_t
p_table
[
4
][
4
]
=
{
{
7
,
14
,
5
,
12
},
{
3
,
10
,
1
,
8
},
{
15
,
6
,
13
,
4
},
{
11
,
2
,
9
,
0
}
};
p_tmp2
[
0
]
=
((
p_tmp1
[
0
]
>>
0x1A
)
|
(
p_tmp1
[
0
]
<<
0x6
))
+
p_tmp1
[
1
];
p_tmp2
[
1
]
=
((
~
p_tmp1
[
2
]
|
p_tmp2
[
0
])
^
p_tmp1
[
1
])
+
p_input
[
p_table
[
i
][
0
]
];
p_tmp2
[
1
]
+=
p_tmp1
[
3
]
+
p_drms_tab_taos
[
x
++
];
p_tmp1
[
3
]
=
((
p_tmp2
[
1
]
>>
0x16
)
|
(
p_tmp2
[
1
]
<<
0xA
))
+
p_tmp2
[
0
];
p_tmp2
[
1
]
=
((
~
p_tmp1
[
1
]
|
p_tmp1
[
3
])
^
p_tmp2
[
0
])
+
p_input
[
p_table
[
i
][
1
]
];
p_tmp2
[
1
]
+=
p_tmp1
[
2
]
+
p_drms_tab_taos
[
x
++
];
p_tmp1
[
2
]
=
((
p_tmp2
[
1
]
>>
0x11
)
|
(
p_tmp2
[
1
]
<<
0xF
))
+
p_tmp1
[
3
];
p_tmp2
[
1
]
=
((
~
p_tmp2
[
0
]
|
p_tmp1
[
2
])
^
p_tmp1
[
3
])
+
p_input
[
p_table
[
i
][
2
]
];
p_tmp2
[
1
]
+=
p_tmp1
[
1
]
+
p_drms_tab_taos
[
x
++
];
p_tmp1
[
1
]
=
((
p_tmp2
[
1
]
<<
0x15
)
|
(
p_tmp2
[
1
]
>>
0xB
))
+
p_tmp1
[
2
];
if
(
i
<
3
)
{
p_tmp2
[
1
]
=
((
~
p_tmp1
[
3
]
|
p_tmp1
[
1
])
^
p_tmp1
[
2
])
+
p_input
[
p_table
[
i
][
3
]
];
p_tmp1
[
0
]
=
p_tmp2
[
0
]
+
p_tmp2
[
1
]
+
p_drms_tab_taos
[
x
++
];
}
}
p_buffer
[
0
]
+=
p_tmp2
[
0
];
p_buffer
[
1
]
+=
p_tmp1
[
1
];
p_buffer
[
2
]
+=
p_tmp1
[
2
];
p_buffer
[
3
]
+=
p_tmp1
[
3
];
}
static
void
taos_add1
(
uint32_t
*
p_buffer
,
uint8_t
*
p_in
,
uint32_t
i_len
)
{
uint32_t
i
;
uint32_t
x
,
y
;
uint32_t
p_tmp
[
16
];
uint32_t
i_offset
=
0
;
x
=
p_buffer
[
6
]
&
63
;
y
=
64
-
x
;
p_buffer
[
6
]
+=
i_len
;
if
(
i_len
<
y
)
{
memcpy
(
&
((
uint8_t
*
)
p_buffer
)[
48
+
x
],
p_in
,
i_len
);
}
else
{
if
(
x
)
{
memcpy
(
&
((
uint8_t
*
)
p_buffer
)[
48
+
x
],
p_in
,
y
);
taos
(
&
p_buffer
[
8
],
&
p_buffer
[
12
]
);
i_offset
=
y
;
i_len
-=
y
;
}
if
(
i_len
>=
64
)
{
for
(
i
=
0
;
i
<
i_len
/
64
;
i
++
)
{
memcpy
(
p_tmp
,
&
p_in
[
i_offset
],
sizeof
(
p_tmp
)
);
taos
(
&
p_buffer
[
8
],
p_tmp
);
i_offset
+=
64
;
i_len
-=
64
;
}
}
if
(
i_len
)
{
memcpy
(
&
p_buffer
[
12
],
&
p_in
[
i_offset
],
i_len
);
}
}
}
static
void
taos_end1
(
uint32_t
*
p_buffer
,
uint32_t
*
p_out
)
{
uint32_t
x
,
y
;
x
=
p_buffer
[
6
]
&
63
;
y
=
63
-
x
;
((
uint8_t
*
)
p_buffer
)[
48
+
x
++
]
=
128
;
if
(
y
<
8
)
{
memset
(
&
((
uint8_t
*
)
p_buffer
)[
48
+
x
],
0
,
y
);
taos
(
&
p_buffer
[
8
],
&
p_buffer
[
12
]
);
y
=
64
;
x
=
0
;
}
memset
(
&
((
uint8_t
*
)
p_buffer
)[
48
+
x
],
0
,
y
);
p_buffer
[
26
]
=
p_buffer
[
6
]
*
8
;
p_buffer
[
27
]
=
p_buffer
[
6
]
>>
29
;
taos
(
&
p_buffer
[
8
],
&
p_buffer
[
12
]
);
memcpy
(
p_out
,
&
p_buffer
[
8
],
sizeof
(
*
p_out
)
*
4
);
}
static
void
taos_add2
(
uint32_t
*
p_buffer
,
uint8_t
*
p_in
,
uint32_t
i_len
)
{
uint32_t
i
,
x
;
uint32_t
p_tmp
[
16
];
x
=
(
p_buffer
[
0
]
/
8
)
&
63
;
i
=
p_buffer
[
0
]
+
i_len
*
8
;
if
(
i
<
p_buffer
[
0
]
)
{
p_buffer
[
1
]
+=
1
;
}
p_buffer
[
0
]
=
i
;
p_buffer
[
1
]
+=
i_len
>>
29
;
for
(
i
=
0
;
i
<
i_len
;
i
++
)
{
((
uint8_t
*
)
p_buffer
)[
24
+
x
++
]
=
p_in
[
i
];
if
(
x
!=
64
)
continue
;
memcpy
(
p_tmp
,
&
p_buffer
[
6
],
sizeof
(
p_tmp
)
);
taos
(
&
p_buffer
[
2
],
p_tmp
);
}
}
static
void
taos_add2e
(
uint32_t
*
p_buffer
,
uint32_t
*
p_in
,
uint32_t
i_len
)
{
uint32_t
i
,
x
,
y
;
uint32_t
p_tmp
[
32
];
if
(
i_len
)
{
for
(
x
=
i_len
;
x
;
x
-=
y
)
{
y
=
x
>
32
?
32
:
x
;
for
(
i
=
0
;
i
<
y
;
i
++
)
{
p_tmp
[
i
]
=
U32_AT
(
&
p_in
[
i
]);
}
}
}
taos_add2
(
p_buffer
,
(
uint8_t
*
)
p_tmp
,
i_len
*
sizeof
(
p_tmp
[
0
])
);
}
static
void
taos_end2
(
uint32_t
*
p_buffer
)
{
uint32_t
x
;
uint32_t
p_tmp
[
16
];
p_tmp
[
14
]
=
p_buffer
[
0
];
p_tmp
[
15
]
=
p_buffer
[
1
];
x
=
(
p_buffer
[
0
]
/
8
)
&
63
;
taos_add2
(
p_buffer
,
p_drms_tab_tend
,
56
-
x
);
memcpy
(
p_tmp
,
&
p_buffer
[
6
],
56
);
taos
(
&
p_buffer
[
2
],
p_tmp
);
memcpy
(
&
p_buffer
[
22
],
&
p_buffer
[
2
],
sizeof
(
*
p_buffer
)
*
4
);
}
static
void
taos_add3
(
uint32_t
*
p_buffer
,
uint8_t
*
p_key
,
uint32_t
i_len
)
{
uint32_t
x
,
y
;
uint32_t
i
=
0
;
x
=
(
p_buffer
[
4
]
/
8
)
&
63
;
p_buffer
[
4
]
+=
i_len
*
8
;
if
(
p_buffer
[
4
]
<
i_len
*
8
)
p_buffer
[
5
]
+=
1
;
p_buffer
[
5
]
+=
i_len
>>
29
;
y
=
64
-
x
;
if
(
i_len
>=
y
)
{
memcpy
(
&
((
uint8_t
*
)
p_buffer
)[
24
+
x
],
p_key
,
y
);
taos
(
p_buffer
,
&
p_buffer
[
6
]
);
i
=
y
;
y
+=
63
;
if
(
y
<
i_len
)
{
for
(
;
y
<
i_len
;
y
+=
64
,
i
+=
64
)
{
taos
(
p_buffer
,
(
uint32_t
*
)
&
p_key
[
y
-
63
]
);
}
}
else
{
x
=
0
;
}
}
memcpy
(
&
((
uint8_t
*
)
p_buffer
)[
24
+
x
],
&
p_key
[
i
],
i_len
-
i
);
}
static
int
taos_osi
(
uint32_t
*
p_buffer
)
{
int
i_ret
=
0
;
#ifdef WIN32
HKEY
i_key
;
uint32_t
i
;
DWORD
i_size
;
DWORD
i_serial
;
LPBYTE
p_reg_buf
;
static
LPCTSTR
p_reg_keys
[
3
][
2
]
=
{
{
_T
(
"HARDWARE
\\
DESCRIPTION
\\
System"
),
_T
(
"SystemBiosVersion"
)
},
{
_T
(
"HARDWARE
\\
DESCRIPTION
\\
System
\\
CentralProcessor
\\
0"
),
_T
(
"ProcessorNameString"
)
},
{
_T
(
"SOFTWARE
\\
Microsoft
\\
Windows
\\
CurrentVersion"
),
_T
(
"ProductId"
)
}
};
taos_add1
(
p_buffer
,
"cache-control"
,
13
);
taos_add1
(
p_buffer
,
"Ethernet"
,
8
);
GetVolumeInformation
(
_T
(
"C:
\\
"
),
NULL
,
0
,
&
i_serial
,
NULL
,
NULL
,
NULL
,
0
);
taos_add1
(
p_buffer
,
(
uint8_t
*
)
&
i_serial
,
4
);
for
(
i
=
0
;
i
<
sizeof
(
p_reg_keys
)
/
sizeof
(
p_reg_keys
[
0
]);
i
++
)
{
if
(
RegOpenKeyEx
(
HKEY_LOCAL_MACHINE
,
p_reg_keys
[
i
][
0
],
0
,
KEY_READ
,
&
i_key
)
==
ERROR_SUCCESS
)
{
if
(
RegQueryValueEx
(
i_key
,
p_reg_keys
[
i
][
1
],
NULL
,
NULL
,
NULL
,
&
i_size
)
==
ERROR_SUCCESS
)
{
p_reg_buf
=
malloc
(
i_size
);
if
(
p_reg_buf
!=
NULL
)
{
if
(
RegQueryValueEx
(
i_key
,
p_reg_keys
[
i
][
1
],
NULL
,
NULL
,
p_reg_buf
,
&
i_size
)
==
ERROR_SUCCESS
)
{
taos_add1
(
p_buffer
,
(
uint8_t
*
)
p_reg_buf
,
i_size
);
}
free
(
p_reg_buf
);
}
}
RegCloseKey
(
i_key
);
}
}
#else
i_ret
=
-
1
;
#endif
return
(
i_ret
);
}
static
int
get_sci_data
(
uint32_t
p_sci
[
11
][
4
]
)
{
int
i_ret
=
-
1
;
#ifdef WIN32
HANDLE
i_file
;
DWORD
i_size
,
i_read
;
TCHAR
p_path
[
MAX_PATH
];
TCHAR
*
p_filename
=
_T
(
"
\\
Apple Computer
\\
iTunes
\\
SC Info
\\
SC Info.sidb"
);
if
(
SUCCEEDED
(
SHGetFolderPath
(
NULL
,
CSIDL_COMMON_APPDATA
,
NULL
,
0
,
p_path
)
)
)
{
_tcsncat
(
p_path
,
p_filename
,
min
(
_tcslen
(
p_filename
),
(
MAX_PATH
-
1
)
-
_tcslen
(
p_path
)
)
);
i_file
=
CreateFile
(
p_path
,
GENERIC_READ
,
0
,
NULL
,
OPEN_EXISTING
,
0
,
NULL
);
if
(
i_file
!=
INVALID_HANDLE_VALUE
)
{
i_read
=
sizeof
(
p_sci
[
0
])
*
11
;
i_size
=
GetFileSize
(
i_file
,
NULL
);
if
(
i_size
!=
INVALID_FILE_SIZE
&&
i_size
>=
i_read
)
{
i_size
=
SetFilePointer
(
i_file
,
4
,
NULL
,
FILE_BEGIN
);
if
(
i_size
!=
INVALID_SET_FILE_POINTER
)
{
if
(
ReadFile
(
i_file
,
p_sci
,
i_read
,
&
i_size
,
NULL
)
&&
i_size
==
i_read
)
{
i_ret
=
0
;
}
}
}
CloseHandle
(
i_file
);
}
}
#endif
return
(
i_ret
);
}
static
void
acei_taxs
(
uint32_t
*
p_acei
,
uint32_t
i_val
)
{
uint32_t
i
,
x
;
i
=
(
i_val
/
16
)
&
15
;
x
=
(
~
(
i_val
&
15
))
&
15
;
if
(
(
i_val
&
768
)
==
768
)
{
x
=
(
~
i
)
&
15
;
i
=
i_val
&
15
;
p_acei
[
25
+
i
]
=
p_acei
[
25
+
((
16
-
x
)
&
15
)
]
+
p_acei
[
25
+
(
15
-
x
)
];
}
else
if
(
(
i_val
&
512
)
==
512
)
{
p_acei
[
25
+
i
]
^=
p_drms_tab_xor
[
15
-
i
][
x
];
}
else
if
(
(
i_val
&
256
)
==
256
)
{
p_acei
[
25
+
i
]
-=
p_drms_tab_sub
[
15
-
i
][
x
];
}
else
{
p_acei
[
25
+
i
]
+=
p_drms_tab_add
[
15
-
i
][
x
];
}
}
static
void
acei
(
uint32_t
*
p_acei
,
uint8_t
*
p_buffer
,
uint32_t
i_len
)
{
uint32_t
i
,
x
;
uint32_t
p_tmp
[
26
];
for
(
i
=
5
;
i
<
25
;
i
++
)
{
if
(
p_acei
[
i
]
)
{
acei_taxs
(
p_acei
,
p_acei
[
i
]
);
}
}
TAOS_INIT
(
p_tmp
,
2
);
taos_add2e
(
p_tmp
,
&
p_acei
[
25
],
sizeof
(
*
p_acei
)
*
4
);
taos_end2
(
p_tmp
);
x
=
i_len
<
16
?
i_len
:
16
;
if
(
x
>
0
)
{
for
(
i
=
0
;
i
<
x
;
i
++
)
{
p_buffer
[
i
]
^=
((
uint8_t
*
)
&
p_tmp
)[
88
+
i
];
}
}
}
static
uint32_t
ttov_calc
(
uint32_t
*
p_acei
)
{
int32_t
i_val
;
uint32_t
p_tmp
[
26
];
TAOS_INIT
(
p_tmp
,
2
);
taos_add2e
(
p_tmp
,
&
p_acei
[
0
],
4
);
taos_add2e
(
p_tmp
,
&
p_acei
[
4
],
1
);
taos_end2
(
p_tmp
);
p_acei
[
4
]
++
;
i_val
=
((
int32_t
)
U32_AT
(
&
p_tmp
[
22
]))
%
1024
;
return
(
i_val
<
0
?
i_val
*
-
1
:
i_val
);
}
static
void
acei_init
(
uint32_t
*
p_acei
,
uint32_t
*
p_sys_key
)
{
uint32_t
i
;
for
(
i
=
0
;
i
<
4
;
i
++
)
{
p_acei
[
i
]
=
U32_AT
(
&
p_sys_key
[
i
]);
}
p_acei
[
4
]
=
0x5476212A
;
for
(
i
=
5
;
i
<
25
;
i
++
)
{
p_acei
[
i
]
=
ttov_calc
(
p_acei
);
}
p_acei
[
25
+
0
]
=
p_acei
[
0
];
p_acei
[
25
+
1
]
=
0x68723876
;
p_acei
[
25
+
2
]
=
0x41617376
;
p_acei
[
25
+
3
]
=
0x4D4B4F76
;
p_acei
[
25
+
4
]
=
p_acei
[
1
];
p_acei
[
25
+
5
]
=
0x48556646
;
p_acei
[
25
+
6
]
=
0x38393725
;
p_acei
[
25
+
7
]
=
0x2E3B5B3D
;
p_acei
[
25
+
8
]
=
p_acei
[
2
];
p_acei
[
25
+
9
]
=
0x37363866
;
p_acei
[
25
+
10
]
=
0x30383637
;
p_acei
[
25
+
11
]
=
0x34333661
;
p_acei
[
25
+
12
]
=
p_acei
[
3
];
p_acei
[
25
+
13
]
=
0x37386162
;
p_acei
[
25
+
14
]
=
0x494F6E66
;
p_acei
[
25
+
15
]
=
0x2A282966
;
}
static
inline
void
block_xor
(
uint32_t
*
p_in
,
uint32_t
*
p_key
,
uint32_t
*
p_out
)
{
uint32_t
i
;
for
(
i
=
0
;
i
<
4
;
i
++
)
{
p_out
[
i
]
=
p_key
[
i
]
^
p_in
[
i
];
}
}
int
drms_get_sys_key
(
uint32_t
*
p_sys_key
)
{
uint32_t
p_tmp
[
128
];
uint32_t
p_tmp_key
[
4
];
TAOS_INIT
(
p_tmp
,
8
);
if
(
taos_osi
(
p_tmp
)
)
{
return
(
-
1
);
}
taos_end1
(
p_tmp
,
p_tmp_key
);
TAOS_INIT
(
p_tmp
,
2
);
taos_add2
(
p_tmp
,
"YuaFlafu"
,
8
);
taos_add2
(
p_tmp
,
(
uint8_t
*
)
p_tmp_key
,
6
);
taos_add2
(
p_tmp
,
(
uint8_t
*
)
p_tmp_key
,
6
);
taos_add2
(
p_tmp
,
(
uint8_t
*
)
p_tmp_key
,
6
);
taos_add2
(
p_tmp
,
"zPif98ga"
,
8
);
taos_end2
(
p_tmp
);
memcpy
(
p_sys_key
,
&
p_tmp
[
2
],
sizeof
(
*
p_sys_key
)
*
4
);
return
(
0
);
}
int
drms_get_user_key
(
uint32_t
*
p_sys_key
,
uint32_t
*
p_user_key
)
{
uint32_t
i
;
uint32_t
p_tmp
[
4
];
uint32_t
*
p_cur_key
;
uint32_t
p_acei
[
41
];
uint32_t
p_ctx
[
128
];
uint32_t
p_sci
[
2
][
11
][
4
];
uint32_t
p_sci_key
[
4
]
=
{
0x6E66556D
,
0x6E676F70
,
0x67666461
,
0x33373866
};
if
(
p_sys_key
==
NULL
)
{
if
(
drms_get_sys_key
(
p_tmp
)
)
{
return
(
-
1
);
}
p_sys_key
=
p_tmp
;
}
if
(
get_sci_data
(
p_sci
[
0
]
)
)
{
return
(
-
1
);
}
init_ctx
(
p_ctx
,
p_sys_key
);
for
(
i
=
0
,
p_cur_key
=
p_sci_key
;
i
<
sizeof
(
p_sci
[
0
])
/
sizeof
(
p_sci
[
0
][
0
]);
i
++
)
{
ctx_xor
(
p_ctx
,
&
p_sci
[
0
][
i
][
0
],
&
p_sci
[
1
][
i
][
0
],
p_drms_tab3
,
p_drms_tab4
);
block_xor
(
&
p_sci
[
1
][
i
][
0
],
p_cur_key
,
&
p_sci
[
1
][
i
][
0
]
);
p_cur_key
=
&
p_sci
[
0
][
i
][
0
];
}
acei_init
(
p_acei
,
p_sys_key
);
for
(
i
=
0
;
i
<
sizeof
(
p_sci
[
1
])
/
sizeof
(
p_sci
[
1
][
0
]);
i
++
)
{
acei
(
p_acei
,
(
uint8_t
*
)
&
p_sci
[
1
][
i
][
0
],
sizeof
(
p_sci
[
1
][
i
])
);
}
memcpy
(
p_user_key
,
&
p_sci
[
1
][
10
][
0
],
sizeof
(
p_sci
[
1
][
i
])
);
return
(
0
);
}
struct
drms_s
{
uint8_t
*
p_iviv
;
uint32_t
i_iviv_len
;
uint8_t
*
p_name
;
uint32_t
i_name_len
;
uint32_t
*
p_tmp
;
uint32_t
i_tmp_len
;
uint32_t
p_key
[
4
];
uint32_t
p_ctx
[
128
];
};
#define P_DRMS ((struct drms_s *)p_drms)
void
*
drms_alloc
()
{
struct
drms_s
*
p_drms
;
p_drms
=
malloc
(
sizeof
(
struct
drms_s
)
);
if
(
p_drms
!=
NULL
)
{
memset
(
p_drms
,
0
,
sizeof
(
struct
drms_s
)
);
p_drms
->
i_tmp_len
=
1024
;
p_drms
->
p_tmp
=
malloc
(
p_drms
->
i_tmp_len
);
if
(
p_drms
->
p_tmp
==
NULL
)
{
free
(
(
void
*
)
p_drms
);
p_drms
=
NULL
;
}
}
return
(
(
void
*
)
p_drms
);
}
void
drms_free
(
void
*
p_drms
)
{
if
(
P_DRMS
->
p_name
!=
NULL
)
{
free
(
(
void
*
)
P_DRMS
->
p_name
);
}
if
(
P_DRMS
->
p_iviv
!=
NULL
)
{
free
(
(
void
*
)
P_DRMS
->
p_iviv
);
}
if
(
P_DRMS
->
p_tmp
!=
NULL
)
{
free
(
(
void
*
)
P_DRMS
->
p_tmp
);
}
free
(
p_drms
);
}
void
drms_decrypt
(
void
*
p_drms
,
uint32_t
*
p_buffer
,
uint32_t
i_len
)
{
uint32_t
i
,
x
,
y
;
uint32_t
*
p_cur_key
=
P_DRMS
->
p_key
;
x
=
(
i_len
/
sizeof
(
P_DRMS
->
p_key
))
*
sizeof
(
P_DRMS
->
p_key
);
if
(
P_DRMS
->
i_tmp_len
<
x
)
{
free
(
(
void
*
)
P_DRMS
->
p_tmp
);
P_DRMS
->
i_tmp_len
=
x
;
P_DRMS
->
p_tmp
=
malloc
(
P_DRMS
->
i_tmp_len
);
}
if
(
P_DRMS
->
p_tmp
!=
NULL
)
{
memcpy
(
P_DRMS
->
p_tmp
,
p_buffer
,
x
);
for
(
i
=
0
,
x
/=
sizeof
(
P_DRMS
->
p_key
);
i
<
x
;
i
++
)
{
y
=
i
*
sizeof
(
*
p_buffer
);
ctx_xor
(
P_DRMS
->
p_ctx
,
P_DRMS
->
p_tmp
+
y
,
p_buffer
+
y
,
p_drms_tab3
,
p_drms_tab4
);
block_xor
(
p_buffer
+
y
,
p_cur_key
,
p_buffer
+
y
);
p_cur_key
=
P_DRMS
->
p_tmp
+
y
;
}
}
}
int
drms_init
(
void
*
p_drms
,
uint32_t
i_type
,
uint8_t
*
p_info
,
uint32_t
i_len
)
{
int
i_ret
=
0
;
switch
(
i_type
)
{
case
DRMS_INIT_UKEY
:
{
if
(
i_len
!=
sizeof
(
P_DRMS
->
p_key
)
)
{
i_ret
=
-
1
;
break
;
}
init_ctx
(
P_DRMS
->
p_ctx
,
(
uint32_t
*
)
p_info
);
}
break
;
case
DRMS_INIT_IVIV
:
{
if
(
i_len
!=
sizeof
(
P_DRMS
->
p_key
)
)
{
i_ret
=
-
1
;
break
;
}
P_DRMS
->
p_iviv
=
malloc
(
i_len
);
if
(
P_DRMS
->
p_iviv
==
NULL
)
{
i_ret
=
-
1
;
break
;
}
memcpy
(
P_DRMS
->
p_iviv
,
p_info
,
i_len
);
P_DRMS
->
i_iviv_len
=
i_len
;
}
break
;
case
DRMS_INIT_NAME
:
{
P_DRMS
->
p_name
=
malloc
(
i_len
);
if
(
P_DRMS
->
p_name
==
NULL
)
{
i_ret
=
-
1
;
break
;
}
memcpy
(
P_DRMS
->
p_name
,
p_info
,
i_len
);
P_DRMS
->
i_name_len
=
i_len
;
}
break
;
case
DRMS_INIT_PRIV
:
{
uint32_t
i
;
uint32_t
p_priv
[
64
];
uint32_t
p_tmp
[
128
];
if
(
i_len
<
64
)
{
i_ret
=
-
1
;
break
;
}
TAOS_INIT
(
p_tmp
,
0
);
taos_add3
(
p_tmp
,
P_DRMS
->
p_name
,
P_DRMS
->
i_name_len
);
taos_add3
(
p_tmp
,
P_DRMS
->
p_iviv
,
P_DRMS
->
i_iviv_len
);
memcpy
(
p_priv
,
&
p_tmp
[
4
],
sizeof
(
p_priv
[
0
])
*
2
);
i
=
(
p_tmp
[
4
]
/
8
)
&
63
;
i
=
i
>=
56
?
120
-
i
:
56
-
i
;
taos_add3
(
p_tmp
,
p_drms_tab_tend
,
i
);
taos_add3
(
p_tmp
,
(
uint8_t
*
)
p_priv
,
sizeof
(
p_priv
[
0
])
*
2
);
memcpy
(
p_priv
,
p_info
,
64
);
memcpy
(
P_DRMS
->
p_key
,
p_tmp
,
sizeof
(
P_DRMS
->
p_key
)
);
drms_decrypt
(
p_drms
,
p_priv
,
sizeof
(
p_priv
)
);
init_ctx
(
P_DRMS
->
p_ctx
,
&
p_priv
[
6
]
);
memcpy
(
P_DRMS
->
p_key
,
&
p_priv
[
12
],
sizeof
(
P_DRMS
->
p_key
)
);
free
(
(
void
*
)
P_DRMS
->
p_name
);
P_DRMS
->
p_name
=
NULL
;
free
(
(
void
*
)
P_DRMS
->
p_iviv
);
P_DRMS
->
p_iviv
=
NULL
;
}
break
;
}
return
(
i_ret
);
}
#undef P_DRMS
modules/demux/mp4/drms.h
0 → 100644
View file @
051ce627
/*****************************************************************************
* drms.h : DRMS
*****************************************************************************
* Copyright (C) 2004 VideoLAN
* $Id: drms.h,v 1.1 2004/01/05 12:37:52 jlj Exp $
*
* Author: Jon Lech Johansen <jon-vl@nanocrew.net>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
*****************************************************************************/
#define DRMS_INIT_UKEY 0
#define DRMS_INIT_IVIV 1
#define DRMS_INIT_NAME 2
#define DRMS_INIT_PRIV 3
extern
int
drms_get_sys_key
(
uint32_t
*
p_sys_key
);
extern
int
drms_get_user_key
(
uint32_t
*
p_sys_key
,
uint32_t
*
p_user_key
);
extern
void
*
drms_alloc
();
extern
void
drms_free
(
void
*
p_drms
);
extern
int
drms_init
(
void
*
p_drms
,
uint32_t
i_type
,
uint8_t
*
p_info
,
uint32_t
i_len
);
extern
void
drms_decrypt
(
void
*
p_drms
,
uint32_t
*
p_buffer
,
uint32_t
i_len
);
modules/demux/mp4/drmstables.h
0 → 100644
View file @
051ce627
/*****************************************************************************
* drmstables.h : DRMS tables
*****************************************************************************
* Copyright (C) 2004 VideoLAN
* $Id: drmstables.h,v 1.1 2004/01/05 12:37:52 jlj Exp $
*
* Author: Jon Lech Johansen <jon-vl@nanocrew.net>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
*****************************************************************************/
static
uint32_t
p_drms_tab1
[
10
]
=
{
0x00000001
,
0x00000002
,
0x00000004
,
0x00000008
,
0x00000010
,
0x00000020
,
0x00000040
,
0x00000080
,
0x0000001B
,
0x00000036
};
static
uint32_t
p_drms_tab2
[
256
]
=
{
0x63000000
,
0x7C000000
,
0x77000000
,
0x7B000000
,
0xF2000000
,
0x6B000000
,
0x6F000000
,
0xC5000000
,
0x30000000
,
0x01000000
,
0x67000000
,
0x2B000000
,
0xFE000000
,
0xD7000000
,
0xAB000000
,
0x76000000
,
0xCA000000
,
0x82000000
,
0xC9000000
,
0x7D000000
,
0xFA000000
,
0x59000000
,
0x47000000
,
0xF0000000
,
0xAD000000
,
0xD4000000
,
0xA2000000
,
0xAF000000
,
0x9C000000
,
0xA4000000
,
0x72000000
,
0xC0000000
,
0xB7000000
,
0xFD000000
,
0x93000000
,
0x26000000
,
0x36000000
,
0x3F000000
,
0xF7000000
,
0xCC000000
,
0x34000000
,
0xA5000000
,
0xE5000000
,
0xF1000000
,
0x71000000
,
0xD8000000
,
0x31000000
,
0x15000000
,
0x04000000
,
0xC7000000
,
0x23000000
,
0xC3000000
,
0x18000000
,
0x96000000
,
0x05000000
,
0x9A000000
,
0x07000000
,
0x12000000
,
0x80000000
,
0xE2000000
,
0xEB000000
,
0x27000000
,
0xB2000000
,
0x75000000
,
0x09000000
,
0x83000000
,
0x2C000000
,
0x1A000000
,
0x1B000000
,
0x6E000000
,
0x5A000000
,
0xA0000000
,
0x52000000
,
0x3B000000
,
0xD6000000
,
0xB3000000
,
0x29000000
,
0xE3000000
,
0x2F000000
,
0x84000000
,
0x53000000
,
0xD1000000
,
0x00000000
,
0xED000000
,
0x20000000
,
0xFC000000
,
0xB1000000
,
0x5B000000
,
0x6A000000
,
0xCB000000
,
0xBE000000
,
0x39000000
,
0x4A000000
,
0x4C000000
,
0x58000000
,
0xCF000000
,
0xD0000000
,
0xEF000000
,
0xAA000000
,
0xFB000000
,
0x43000000
,
0x4D000000
,
0x33000000
,
0x85000000
,
0x45000000
,
0xF9000000
,
0x02000000
,
0x7F000000
,
0x50000000
,
0x3C000000
,
0x9F000000
,
0xA8000000
,
0x51000000
,
0xA3000000
,
0x40000000
,
0x8F000000
,
0x92000000
,
0x9D000000
,
0x38000000
,
0xF5000000
,
0xBC000000
,
0xB6000000
,
0xDA000000
,
0x21000000
,
0x10000000
,
0xFF000000
,
0xF3000000
,
0xD2000000
,
0xCD000000
,
0x0C000000
,
0x13000000
,
0xEC000000
,
0x5F000000
,
0x97000000
,
0x44000000
,
0x17000000
,
0xC4000000
,
0xA7000000
,
0x7E000000
,
0x3D000000
,
0x64000000
,
0x5D000000
,
0x19000000
,
0x73000000
,
0x60000000
,
0x81000000
,
0x4F000000
,
0xDC000000
,
0x22000000
,
0x2A000000
,
0x90000000
,
0x88000000
,
0x46000000
,
0xEE000000
,
0xB8000000
,
0x14000000
,
0xDE000000
,
0x5E000000
,
0x0B000000
,
0xDB000000
,
0xE0000000
,
0x32000000
,
0x3A000000
,
0x0A000000
,
0x49000000
,
0x06000000
,
0x24000000
,
0x5C000000
,
0xC2000000
,
0xD3000000
,
0xAC000000
,
0x62000000
,
0x91000000
,
0x95000000
,
0xE4000000
,
0x79000000
,
0xE7000000
,
0xC8000000
,
0x37000000
,
0x6D000000
,
0x8D000000
,
0xD5000000
,
0x4E000000
,
0xA9000000
,
0x6C000000
,
0x56000000
,
0xF4000000
,
0xEA000000
,
0x65000000
,
0x7A000000
,
0xAE000000
,
0x08000000
,
0xBA000000
,
0x78000000
,
0x25000000
,
0x2E000000
,
0x1C000000
,
0xA6000000
,
0xB4000000
,
0xC6000000
,
0xE8000000
,
0xDD000000
,
0x74000000
,
0x1F000000
,
0x4B000000
,
0xBD000000
,
0x8B000000
,
0x8A000000
,
0x70000000
,
0x3E000000
,
0xB5000000
,
0x66000000
,
0x48000000
,
0x03000000
,
0xF6000000
,
0x0E000000
,
0x61000000
,
0x35000000
,
0x57000000
,
0xB9000000
,
0x86000000
,
0xC1000000
,
0x1D000000
,
0x9E000000
,
0xE1000000
,
0xF8000000
,
0x98000000
,
0x11000000
,
0x69000000
,
0xD9000000
,
0x8E000000
,
0x94000000
,
0x9B000000
,
0x1E000000
,
0x87000000
,
0xE9000000
,
0xCE000000
,
0x55000000
,
0x28000000
,
0xDF000000
,
0x8C000000
,
0xA1000000
,
0x89000000
,
0x0D000000
,
0xBF000000
,
0xE6000000
,
0x42000000
,
0x68000000
,
0x41000000
,
0x99000000
,
0x2D000000
,
0x0F000000
,
0xB0000000
,
0x54000000
,
0xBB000000
,
0x16000000
};
static
uint32_t
p_drms_tab3
[
256
]
=
{
0x5150A7F4
,
0x7E536541
,
0x1AC3A417
,
0x3A965E27
,
0x3BCB6BAB
,
0x1FF1459D
,
0xACAB58FA
,
0x4B9303E3
,
0x2055FA30
,
0xADF66D76
,
0x889176CC
,
0xF5254C02
,
0x4FFCD7E5
,
0xC5D7CB2A
,
0x26804435
,
0xB58FA362
,
0xDE495AB1
,
0x25671BBA
,
0x45980EEA
,
0x5DE1C0FE
,
0xC302752F
,
0x8112F04C
,
0x8DA39746
,
0x6BC6F9D3
,
0x03E75F8F
,
0x15959C92
,
0xBFEB7A6D
,
0x95DA5952
,
0xD42D83BE
,
0x58D32174
,
0x492969E0
,
0x8E44C8C9
,
0x756A89C2
,
0xF478798E
,
0x996B3E58
,
0x27DD71B9
,
0xBEB64FE1
,
0xF017AD88
,
0xC966AC20
,
0x7DB43ACE
,
0x63184ADF
,
0xE582311A
,
0x97603351
,
0x62457F53
,
0xB1E07764
,
0xBB84AE6B
,
0xFE1CA081
,
0xF9942B08
,
0x70586848
,
0x8F19FD45
,
0x94876CDE
,
0x52B7F87B
,
0xAB23D373
,
0x72E2024B
,
0xE3578F1F
,
0x662AAB55
,
0xB20728EB
,
0x2F03C2B5
,
0x869A7BC5
,
0xD3A50837
,
0x30F28728
,
0x23B2A5BF
,
0x02BA6A03
,
0xED5C8216
,
0x8A2B1CCF
,
0xA792B479
,
0xF3F0F207
,
0x4EA1E269
,
0x65CDF4DA
,
0x06D5BE05
,
0xD11F6234
,
0xC48AFEA6
,
0x349D532E
,
0xA2A055F3
,
0x0532E18A
,
0xA475EBF6
,
0x0B39EC83
,
0x40AAEF60
,
0x5E069F71
,
0xBD51106E
,
0x3EF98A21
,
0x963D06DD
,
0xDDAE053E
,
0x4D46BDE6
,
0x91B58D54
,
0x71055DC4
,
0x046FD406
,
0x60FF1550
,
0x1924FB98
,
0xD697E9BD
,
0x89CC4340
,
0x67779ED9
,
0xB0BD42E8
,
0x07888B89
,
0xE7385B19
,
0x79DBEEC8
,
0xA1470A7C
,
0x7CE90F42
,
0xF8C91E84
,
0x00000000
,
0x09838680
,
0x3248ED2B
,
0x1EAC7011
,
0x6C4E725A
,
0xFDFBFF0E
,
0x0F563885
,
0x3D1ED5AE
,
0x3627392D
,
0x0A64D90F
,
0x6821A65C
,
0x9BD1545B
,
0x243A2E36
,
0x0CB1670A
,
0x930FE757
,
0xB4D296EE
,
0x1B9E919B
,
0x804FC5C0
,
0x61A220DC
,
0x5A694B77
,
0x1C161A12
,
0xE20ABA93
,
0xC0E52AA0
,
0x3C43E022
,
0x121D171B
,
0x0E0B0D09
,
0xF2ADC78B
,
0x2DB9A8B6
,
0x14C8A91E
,
0x578519F1
,
0xAF4C0775
,
0xEEBBDD99
,
0xA3FD607F
,
0xF79F2601
,
0x5CBCF572
,
0x44C53B66
,
0x5B347EFB
,
0x8B762943
,
0xCBDCC623
,
0xB668FCED
,
0xB863F1E4
,
0xD7CADC31
,
0x42108563
,
0x13402297
,
0x842011C6
,
0x857D244A
,
0xD2F83DBB
,
0xAE1132F9
,
0xC76DA129
,
0x1D4B2F9E
,
0xDCF330B2
,
0x0DEC5286
,
0x77D0E3C1
,
0x2B6C16B3
,
0xA999B970
,
0x11FA4894
,
0x472264E9
,
0xA8C48CFC
,
0xA01A3FF0
,
0x56D82C7D
,
0x22EF9033
,
0x87C74E49
,
0xD9C1D138
,
0x8CFEA2CA
,
0x98360BD4
,
0xA6CF81F5
,
0xA528DE7A
,
0xDA268EB7
,
0x3FA4BFAD
,
0x2CE49D3A
,
0x500D9278
,
0x6A9BCC5F
,
0x5462467E
,
0xF6C2138D
,
0x90E8B8D8
,
0x2E5EF739
,
0x82F5AFC3
,
0x9FBE805D
,
0x697C93D0
,
0x6FA92DD5
,
0xCFB31225
,
0xC83B99AC
,
0x10A77D18
,
0xE86E639C
,
0xDB7BBB3B
,
0xCD097826
,
0x6EF41859
,
0xEC01B79A
,
0x83A89A4F
,
0xE6656E95
,
0xAA7EE6FF
,
0x2108CFBC
,
0xEFE6E815
,
0xBAD99BE7
,
0x4ACE366F
,
0xEAD4099F
,
0x29D67CB0
,
0x31AFB2A4
,
0x2A31233F
,
0xC63094A5
,
0x35C066A2
,
0x7437BC4E
,
0xFCA6CA82
,
0xE0B0D090
,
0x3315D8A7
,
0xF14A9804
,
0x41F7DAEC
,
0x7F0E50CD
,
0x172FF691
,
0x768DD64D
,
0x434DB0EF
,
0xCC544DAA
,
0xE4DF0496
,
0x9EE3B5D1
,
0x4C1B886A
,
0xC1B81F2C
,
0x467F5165
,
0x9D04EA5E
,
0x015D358C
,
0xFA737487
,
0xFB2E410B
,
0xB35A1D67
,
0x9252D2DB
,
0xE9335610
,
0x6D1347D6
,
0x9A8C61D7
,
0x377A0CA1
,
0x598E14F8
,
0xEB893C13
,
0xCEEE27A9
,
0xB735C961
,
0xE1EDE51C
,
0x7A3CB147
,
0x9C59DFD2
,
0x553F73F2
,
0x1879CE14
,
0x73BF37C7
,
0x53EACDF7
,
0x5F5BAAFD
,
0xDF146F3D
,
0x7886DB44
,
0xCA81F3AF
,
0xB93EC468
,
0x382C3424
,
0xC25F40A3
,
0x1672C31D
,
0xBC0C25E2
,
0x288B493C
,
0xFF41950D
,
0x397101A8
,
0x08DEB30C
,
0xD89CE4B4
,
0x6490C156
,
0x7B6184CB
,
0xD570B632
,
0x48745C6C
,
0xD04257B8
};
static
uint32_t
p_drms_tab4
[
256
]
=
{
0x52000000
,
0x09000000
,
0x6A000000
,
0xD5000000
,
0x30000000
,
0x36000000
,
0xA5000000
,
0x38000000
,
0xBF000000
,
0x40000000
,
0xA3000000
,
0x9E000000
,
0x81000000
,
0xF3000000
,
0xD7000000
,
0xFB000000
,
0x7C000000
,
0xE3000000
,
0x39000000
,
0x82000000
,
0x9B000000
,
0x2F000000
,
0xFF000000
,
0x87000000
,
0x34000000
,
0x8E000000
,
0x43000000
,
0x44000000
,
0xC4000000
,
0xDE000000
,
0xE9000000
,
0xCB000000
,
0x54000000
,
0x7B000000
,
0x94000000
,
0x32000000
,
0xA6000000
,
0xC2000000
,
0x23000000
,
0x3D000000
,
0xEE000000
,
0x4C000000
,
0x95000000
,
0x0B000000
,
0x42000000
,
0xFA000000
,
0xC3000000
,
0x4E000000
,
0x08000000
,
0x2E000000
,
0xA1000000
,
0x66000000
,
0x28000000
,
0xD9000000
,
0x24000000
,
0xB2000000
,
0x76000000
,
0x5B000000
,
0xA2000000
,
0x49000000
,
0x6D000000
,
0x8B000000
,
0xD1000000
,
0x25000000
,
0x72000000
,
0xF8000000
,
0xF6000000
,
0x64000000
,
0x86000000
,
0x68000000
,
0x98000000
,
0x16000000
,
0xD4000000
,
0xA4000000
,
0x5C000000
,
0xCC000000
,
0x5D000000
,
0x65000000
,
0xB6000000
,
0x92000000
,
0x6C000000
,
0x70000000
,
0x48000000
,
0x50000000
,
0xFD000000
,
0xED000000
,
0xB9000000
,
0xDA000000
,
0x5E000000
,
0x15000000
,
0x46000000
,
0x57000000
,
0xA7000000
,
0x8D000000
,
0x9D000000
,
0x84000000
,
0x90000000
,
0xD8000000
,
0xAB000000
,
0x00000000
,
0x8C000000
,
0xBC000000
,
0xD3000000
,
0x0A000000
,
0xF7000000
,
0xE4000000
,
0x58000000
,
0x05000000
,
0xB8000000
,
0xB3000000
,
0x45000000
,
0x06000000
,
0xD0000000
,
0x2C000000
,
0x1E000000
,
0x8F000000
,
0xCA000000
,
0x3F000000
,
0x0F000000
,
0x02000000
,
0xC1000000
,
0xAF000000
,
0xBD000000
,
0x03000000
,
0x01000000
,
0x13000000
,
0x8A000000
,
0x6B000000
,
0x3A000000
,
0x91000000
,
0x11000000
,
0x41000000
,
0x4F000000
,
0x67000000
,
0xDC000000
,
0xEA000000
,
0x97000000
,
0xF2000000
,
0xCF000000
,
0xCE000000
,
0xF0000000
,
0xB4000000
,
0xE6000000
,
0x73000000
,
0x96000000
,
0xAC000000
,
0x74000000
,
0x22000000
,
0xE7000000
,
0xAD000000
,
0x35000000
,
0x85000000
,
0xE2000000
,
0xF9000000
,
0x37000000
,
0xE8000000
,
0x1C000000
,
0x75000000
,
0xDF000000
,
0x6E000000
,
0x47000000
,
0xF1000000
,
0x1A000000
,
0x71000000
,
0x1D000000
,
0x29000000
,
0xC5000000
,
0x89000000
,
0x6F000000
,
0xB7000000
,
0x62000000
,
0x0E000000
,
0xAA000000
,
0x18000000
,
0xBE000000
,
0x1B000000
,
0xFC000000
,
0x56000000
,
0x3E000000
,
0x4B000000
,
0xC6000000
,
0xD2000000
,
0x79000000
,
0x20000000
,
0x9A000000
,
0xDB000000
,
0xC0000000
,
0xFE000000
,
0x78000000
,
0xCD000000
,
0x5A000000
,
0xF4000000
,
0x1F000000
,
0xDD000000
,
0xA8000000
,
0x33000000
,
0x88000000
,
0x07000000
,
0xC7000000
,
0x31000000
,
0xB1000000
,
0x12000000
,
0x10000000
,
0x59000000
,
0x27000000
,
0x80000000
,
0xEC000000
,
0x5F000000
,
0x60000000
,
0x51000000
,
0x7F000000
,
0xA9000000
,
0x19000000
,
0xB5000000
,
0x4A000000
,
0x0D000000
,
0x2D000000
,
0xE5000000
,
0x7A000000
,
0x9F000000
,
0x93000000
,
0xC9000000
,
0x9C000000
,
0xEF000000
,
0xA0000000
,
0xE0000000
,
0x3B000000
,
0x4D000000
,
0xAE000000
,
0x2A000000
,
0xF5000000
,
0xB0000000
,
0xC8000000
,
0xEB000000
,
0xBB000000
,
0x3C000000
,
0x83000000
,
0x53000000
,
0x99000000
,
0x61000000
,
0x17000000
,
0x2B000000
,
0x04000000
,
0x7E000000
,
0xBA000000
,
0x77000000
,
0xD6000000
,
0x26000000
,
0xE1000000
,
0x69000000
,
0x14000000
,
0x63000000
,
0x55000000
,
0x21000000
,
0x0C000000
,
0x7D000000
};
static
int32_t
p_drms_tab_taos
[
64
]
=
{
-
0x28955B88
,
-
0x173848AA
,
+
0x242070DB
,
-
0x3E423112
,
-
0x0A83F051
,
+
0x4787C62A
,
-
0x57CFB9ED
,
-
0x02B96AFF
,
+
0x698098D8
,
-
0x74BB0851
,
-
0x0000A44F
,
-
0x76A32842
,
+
0x6B901122
,
-
0x02678E6D
,
-
0x5986BC72
,
+
0x49B40821
,
-
0x09E1DA9E
,
-
0x3FBF4CC0
,
+
0x265E5A51
,
-
0x16493856
,
-
0x29D0EFA3
,
+
0x02441453
,
-
0x275E197F
,
-
0x182C0438
,
+
0x21E1CDE6
,
-
0x3CC8F82A
,
-
0x0B2AF279
,
+
0x455A14ED
,
-
0x561C16FB
,
-
0x03105C08
,
+
0x676F02D9
,
-
0x72D5B376
,
-
0x0005C6BE
,
-
0x788E097F
,
+
0x6D9D6122
,
-
0x021AC7F4
,
-
0x5B4115BC
,
+
0x4BDECFA9
,
-
0x0944B4A0
,
-
0x41404390
,
+
0x289B7EC6
,
-
0x155ED806
,
-
0x2B10CF7B
,
+
0x04881D05
,
-
0x262B2FC7
,
-
0x1924661B
,
+
0x1FA27CF8
,
-
0x3B53A99B
,
-
0x0BD6DDBC
,
+
0x432AFF97
,
-
0x546BDC59
,
-
0x036C5FC7
,
+
0x655B59C3
,
-
0x70F3336E
,
-
0x00100B83
,
-
0x7A7BA22F
,
+
0x6FA87E4F
,
-
0x01D31920
,
-
0x5CFEBCEC
,
+
0x4E0811A1
,
-
0x08AC817E
,
-
0x42C50DCB
,
+
0x2AD7D2BB
,
-
0x14792C6F
};
static
uint8_t
p_drms_tab_tend
[
64
]
=
{
0x80
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
};
static
uint16_t
p_drms_tab_xor
[
16
][
16
]
=
{
{
0x00D1
,
0x0315
,
0x1A32
,
0x19EC
,
0x1BBB
,
0x1D6F
,
0x14FE
,
0x0E9E
,
0x029E
,
0x1B8F
,
0x0B70
,
0x033A
,
0x188E
,
0x1D18
,
0x0BD8
,
0x0EDB
},
{
0x0C64
,
0x1C2B
,
0x149C
,
0x047B
,
0x1064
,
0x1C7C
,
0x118D
,
0x1355
,
0x0AE5
,
0x0F18
,
0x016F
,
0x17D6
,
0x1595
,
0x0084
,
0x0616
,
0x1CCD
},
{
0x1D94
,
0x0618
,
0x182C
,
0x195B
,
0x196D
,
0x0394
,
0x07DB
,
0x0287
,
0x1636
,
0x0B81
,
0x1519
,
0x0DF9
,
0x1BA3
,
0x1CC3
,
0x0EE2
,
0x1434
},
{
0x1457
,
0x0CED
,
0x0F7D
,
0x0D7B
,
0x0B9E
,
0x0D13
,
0x13D7
,
0x18D0
,
0x1259
,
0x1977
,
0x0606
,
0x1E80
,
0x05F2
,
0x06B8
,
0x1F07
,
0x1365
},
{
0x0334
,
0x0E30
,
0x195F
,
0x15F1
,
0x058E
,
0x0AA8
,
0x045A
,
0x0465
,
0x0B3E
,
0x071E
,
0x0A36
,
0x105C
,
0x01AC
,
0x1A1E
,
0x04E4
,
0x056B
},
{
0x12BF
,
0x0DA2
,
0x0B41
,
0x0EAF
,
0x034F
,
0x0181
,
0x04E2
,
0x002B
,
0x12E6
,
0x01BE
,
0x10E8
,
0x128F
,
0x0EB2
,
0x1369
,
0x05BE
,
0x1A59
},
{
0x117E
,
0x047C
,
0x1E86
,
0x056A
,
0x0DA7
,
0x0D61
,
0x03FC
,
0x1E6E
,
0x1D0C
,
0x1E6D
,
0x14BF
,
0x0C50
,
0x063A
,
0x1B47
,
0x17AE
,
0x1321
},
{
0x041B
,
0x0A24
,
0x0D4D
,
0x1F2B
,
0x1CB6
,
0x1BED
,
0x1549
,
0x03A7
,
0x0254
,
0x006C
,
0x0C9E
,
0x0F73
,
0x006C
,
0x0008
,
0x11F9
,
0x0DD5
},
{
0x0BCF
,
0x0AF9
,
0x1DFE
,
0x0341
,
0x0E49
,
0x0D38
,
0x17CB
,
0x1513
,
0x0E96
,
0x00ED
,
0x0556
,
0x1B28
,
0x100C
,
0x19D8
,
0x14FA
,
0x028C
},
{
0x1C60
,
0x1232
,
0x13D3
,
0x0D00
,
0x1534
,
0x192C
,
0x14B5
,
0x1CF2
,
0x0504
,
0x0B5B
,
0x1ECF
,
0x0423
,
0x183B
,
0x06B0
,
0x169E
,
0x1066
},
{
0x04CB
,
0x08A2
,
0x1B4A
,
0x1254
,
0x198D
,
0x1044
,
0x0236
,
0x1BD8
,
0x18A1
,
0x03FF
,
0x1A0D
,
0x0277
,
0x0C2D
,
0x17C9
,
0x007C
,
0x116E
},
{
0x048A
,
0x1EAF
,
0x0922
,
0x0C45
,
0x0766
,
0x1E5F
,
0x1A28
,
0x0120
,
0x1C15
,
0x034C
,
0x0508
,
0x0E73
,
0x0879
,
0x0441
,
0x09AE
,
0x132F
},
{
0x14FE
,
0x0413
,
0x0A9D
,
0x1727
,
0x01D7
,
0x1A2B
,
0x0474
,
0x18F0
,
0x1F3B
,
0x14F5
,
0x1071
,
0x0895
,
0x1071
,
0x18FF
,
0x18E3
,
0x0EB9
},
{
0x0BA9
,
0x0961
,
0x1599
,
0x019E
,
0x1D12
,
0x1BAA
,
0x1E94
,
0x1921
,
0x14DC
,
0x124E
,
0x0A25
,
0x03AB
,
0x1CC0
,
0x1EBB
,
0x0B4B
,
0x16E5
},
{
0x11EA
,
0x0D78
,
0x1BB3
,
0x1BA7
,
0x1510
,
0x1B7B
,
0x0C64
,
0x1995
,
0x1A58
,
0x1651
,
0x1964
,
0x147A
,
0x15F2
,
0x11BB
,
0x1654
,
0x166E
},
{
0x0EA9
,
0x1DE1
,
0x1443
,
0x13C5
,
0x00E1
,
0x0B2F
,
0x0B6F
,
0x0A37
,
0x18AC
,
0x08E6
,
0x06F0
,
0x136E
,
0x0853
,
0x0B2E
,
0x0813
,
0x10D6
}
};
static
uint16_t
p_drms_tab_sub
[
16
][
16
]
=
{
{
0x067A
,
0x0C7D
,
0x0B4F
,
0x127D
,
0x0BD6
,
0x04AC
,
0x16E0
,
0x1730
,
0x0587
,
0x0AFB
,
0x1AC3
,
0x0120
,
0x14B5
,
0x0F67
,
0x11DE
,
0x0961
},
{
0x1127
,
0x1A68
,
0x07F0
,
0x17D0
,
0x1A6F
,
0x1F3B
,
0x01EF
,
0x0919
,
0x131E
,
0x0F90
,
0x19E9
,
0x18A8
,
0x0CB2
,
0x1AD0
,
0x0C66
,
0x0378
},
{
0x03B0
,
0x01BE
,
0x1866
,
0x1159
,
0x197C
,
0x1105
,
0x010B
,
0x0353
,
0x1ABB
,
0x09A6
,
0x028A
,
0x1BAD
,
0x1B20
,
0x0455
,
0x0F57
,
0x0588
},
{
0x1491
,
0x0A1D
,
0x0F04
,
0x0650
,
0x191E
,
0x1E0E
,
0x174B
,
0x016B
,
0x051F
,
0x0532
,
0x00DF
,
0x1AEA
,
0x0005
,
0x0E1B
,
0x0FF6
,
0x08D8
},
{
0x14B4
,
0x086A
,
0x0C20
,
0x0149
,
0x1971
,
0x0F26
,
0x1852
,
0x017D
,
0x1228
,
0x0352
,
0x0A44
,
0x1330
,
0x18DF
,
0x1E38
,
0x01BC
,
0x0BAC
},
{
0x1A48
,
0x021F
,
0x02F7
,
0x0C31
,
0x0BC4
,
0x1E75
,
0x105C
,
0x13E3
,
0x0B20
,
0x03A1
,
0x1AF3
,
0x1A36
,
0x0E34
,
0x181F
,
0x09BD
,
0x122B
},
{
0x0EE0
,
0x163B
,
0x0BE7
,
0x103D
,
0x1075
,
0x1E9D
,
0x02AF
,
0x0BA2
,
0x1DAA
,
0x0CF1
,
0x04B6
,
0x0598
,
0x06A1
,
0x0D33
,
0x1CFE
,
0x04EE
},
{
0x1BAD
,
0x07C8
,
0x1A48
,
0x05E6
,
0x031F
,
0x0E0A
,
0x0326
,
0x1650
,
0x0526
,
0x0B4E
,
0x08FC
,
0x0E4D
,
0x0832
,
0x06EA
,
0x09BF
,
0x0993
},
{
0x09EB
,
0x0F31
,
0x071B
,
0x14D5
,
0x11CA
,
0x0722
,
0x120D
,
0x014C
,
0x1993
,
0x0AE4
,
0x1CCB
,
0x04E9
,
0x0AEE
,
0x1708
,
0x0C3D
,
0x12F2
},
{
0x1A19
,
0x07C1
,
0x05A7
,
0x0744
,
0x1606
,
0x1A9B
,
0x042D
,
0x1BFC
,
0x1841
,
0x0C3C
,
0x0FFE
,
0x1AB1
,
0x1416
,
0x18A9
,
0x0320
,
0x1EC2
},
{
0x0AE7
,
0x11C6
,
0x124A
,
0x11DF
,
0x0F81
,
0x06CF
,
0x0ED9
,
0x0253
,
0x1D2B
,
0x0349
,
0x0805
,
0x08B3
,
0x1052
,
0x12CF
,
0x0A44
,
0x0EA6
},
{
0x03BF
,
0x1D90
,
0x0EF8
,
0x0657
,
0x156D
,
0x0405
,
0x10BE
,
0x091F
,
0x1C82
,
0x1725
,
0x19EF
,
0x0B8C
,
0x04D9
,
0x02C7
,
0x025A
,
0x1B89
},
{
0x0F5C
,
0x013D
,
0x02F7
,
0x12E3
,
0x0BC5
,
0x1B56
,
0x0848
,
0x0239
,
0x0FCF
,
0x03A4
,
0x092D
,
0x1354
,
0x1D83
,
0x01BD
,
0x071A
,
0x0AF1
},
{
0x0875
,
0x0793
,
0x1B41
,
0x1782
,
0x0DEF
,
0x1D20
,
0x13BE
,
0x0095
,
0x1650
,
0x19D4
,
0x0DE3
,
0x0980
,
0x18F2
,
0x0CA3
,
0x0098
,
0x149A
},
{
0x0B81
,
0x0AD2
,
0x1BBA
,
0x1A02
,
0x027B
,
0x1906
,
0x07F5
,
0x1CAE
,
0x0C3F
,
0x02F6
,
0x1298
,
0x175E
,
0x15B2
,
0x13D8
,
0x14CC
,
0x161A
},
{
0x0A42
,
0x15F3
,
0x0870
,
0x1C1D
,
0x1203
,
0x18B1
,
0x1738
,
0x1954
,
0x1143
,
0x1AE8
,
0x1D9D
,
0x155B
,
0x11E8
,
0x0ED9
,
0x06F7
,
0x04CA
}
};
static
uint16_t
p_drms_tab_add
[
16
][
16
]
=
{
{
0x0706
,
0x175A
,
0x0DEF
,
0x1E72
,
0x0297
,
0x1B0E
,
0x1D5A
,
0x15B8
,
0x13E2
,
0x1347
,
0x10C6
,
0x0B4F
,
0x0629
,
0x0A75
,
0x0A9B
,
0x0F55
},
{
0x1A69
,
0x09BF
,
0x0BA6
,
0x1582
,
0x1086
,
0x1921
,
0x01CB
,
0x1C6A
,
0x0FF5
,
0x00F7
,
0x0A67
,
0x0A1E
,
0x1838
,
0x0196
,
0x10D6
,
0x0C7A
},
{
0x180E
,
0x038D
,
0x1ADD
,
0x0684
,
0x154A
,
0x0AB0
,
0x18A4
,
0x0D73
,
0x1641
,
0x0EC6
,
0x09F1
,
0x1A62
,
0x0414
,
0x162A
,
0x194E
,
0x1EC9
},
{
0x022F
,
0x0296
,
0x1104
,
0x14FC
,
0x096C
,
0x1D02
,
0x09BD
,
0x027C
,
0x080E
,
0x1324
,
0x128C
,
0x0DC1
,
0x00B9
,
0x17F2
,
0x0CBC
,
0x0F97
},
{
0x1B93
,
0x1C3C
,
0x0415
,
0x0395
,
0x0C7A
,
0x06CC
,
0x0D4B
,
0x16E2
,
0x04A2
,
0x0DAB
,
0x1228
,
0x012B
,
0x0896
,
0x0012
,
0x1CD6
,
0x1DAC
},
{
0x080D
,
0x0446
,
0x047A
,
0x00AD
,
0x029E
,
0x0686
,
0x17C3
,
0x1466
,
0x0D16
,
0x1896
,
0x076E
,
0x00CD
,
0x17DC
,
0x1E9F
,
0x1A7C
,
0x02BB
},
{
0x0D06
,
0x112B
,
0x14CB
,
0x0A03
,
0x1541
,
0x1290
,
0x0F6D
,
0x1503
,
0x084B
,
0x0382
,
0x1A3F
,
0x0371
,
0x1977
,
0x0B67
,
0x0CAD
,
0x1DF8
},
{
0x1CE3
,
0x1306
,
0x13F8
,
0x1163
,
0x1B0B
,
0x00BD
,
0x0BF0
,
0x1A4F
,
0x16F7
,
0x0B4F
,
0x0CF8
,
0x1254
,
0x0541
,
0x100D
,
0x0296
,
0x0410
},
{
0x1A2B
,
0x1169
,
0x17D9
,
0x0819
,
0x03D6
,
0x0D03
,
0x194D
,
0x184A
,
0x07CA
,
0x1989
,
0x0FAD
,
0x011C
,
0x1C71
,
0x0EF6
,
0x0DC8
,
0x0F2F
},
{
0x0FA5
,
0x11BE
,
0x0F3B
,
0x1D52
,
0x0DE2
,
0x016E
,
0x1AD1
,
0x0C4A
,
0x1BC2
,
0x0AC9
,
0x1485
,
0x1BEE
,
0x0949
,
0x1A79
,
0x1894
,
0x12BB
},
{
0x17B6
,
0x14F5
,
0x16B1
,
0x142C
,
0x1301
,
0x03EF
,
0x16FF
,
0x0D37
,
0x0D78
,
0x01FF
,
0x00D6
,
0x1053
,
0x1A2A
,
0x0F61
,
0x1352
,
0x0C7F
},
{
0x137F
,
0x09C4
,
0x1D96
,
0x021D
,
0x1037
,
0x1B19
,
0x10EF
,
0x14E4
,
0x02A0
,
0x0236
,
0x0A5D
,
0x1519
,
0x141C
,
0x1399
,
0x007E
,
0x1E74
},
{
0x0941
,
0x1B3C
,
0x0062
,
0x0371
,
0x09AD
,
0x08E8
,
0x0A24
,
0x0B97
,
0x1ED2
,
0x0889
,
0x136B
,
0x0006
,
0x1C4C
,
0x0444
,
0x06F8
,
0x0DFB
},
{
0x1D0F
,
0x198D
,
0x0700
,
0x0AFC
,
0x1781
,
0x12F3
,
0x10DA
,
0x1F19
,
0x1055
,
0x0DC9
,
0x1860
,
0x012B
,
0x05BF
,
0x082D
,
0x0C17
,
0x1941
},
{
0x0359
,
0x1232
,
0x104C
,
0x0762
,
0x0897
,
0x1D6C
,
0x030F
,
0x1A36
,
0x16B0
,
0x094D
,
0x1782
,
0x036F
,
0x0EEA
,
0x06E6
,
0x0D00
,
0x0187
},
{
0x17E2
,
0x05E5
,
0x19FA
,
0x1950
,
0x146A
,
0x0B2A
,
0x0512
,
0x0EE0
,
0x1E27
,
0x112D
,
0x1DF0
,
0x0B13
,
0x0378
,
0x1DD0
,
0x00C1
,
0x01E6
}
};
modules/demux/mp4/libmp4.c
View file @
051ce627
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
* libmp4.c : LibMP4 library for mp4 module for vlc
* libmp4.c : LibMP4 library for mp4 module for vlc
*****************************************************************************
*****************************************************************************
* Copyright (C) 2001 VideoLAN
* Copyright (C) 2001 VideoLAN
* $Id: libmp4.c,v 1.
39 2003/12/22 14:32:55 sam
Exp $
* $Id: libmp4.c,v 1.
40 2004/01/05 12:37:52 jlj
Exp $
*
*
* Author: Laurent Aimar <fenrir@via.ecp.fr>
* Author: Laurent Aimar <fenrir@via.ecp.fr>
*
*
...
@@ -30,6 +30,7 @@
...
@@ -30,6 +30,7 @@
#endif
#endif
#include "libmp4.h"
#include "libmp4.h"
#include "drms.h"
/*****************************************************************************
/*****************************************************************************
* Here are defined some macro to make life simpler but before using it
* Here are defined some macro to make life simpler but before using it
...
@@ -1146,6 +1147,79 @@ static int MP4_ReadBox_sample_soun( MP4_Stream_t *p_stream, MP4_Box_t *p_box )
...
@@ -1146,6 +1147,79 @@ static int MP4_ReadBox_sample_soun( MP4_Stream_t *p_stream, MP4_Box_t *p_box )
msg_Dbg
(
p_stream
->
p_input
,
"Read Box:
\"
soun
\"
mp4 or qt1/2 (rest="
I64Fd
")"
,
i_read
);
msg_Dbg
(
p_stream
->
p_input
,
"Read Box:
\"
soun
\"
mp4 or qt1/2 (rest="
I64Fd
")"
,
i_read
);
MP4_SeekStream
(
p_stream
,
p_box
->
i_pos
+
MP4_BOX_HEADERSIZE
(
p_box
)
+
28
);
MP4_SeekStream
(
p_stream
,
p_box
->
i_pos
+
MP4_BOX_HEADERSIZE
(
p_box
)
+
28
);
}
}
p_box
->
data
.
p_sample_soun
->
p_drms
=
p_box
->
i_type
==
FOURCC_drms
?
drms_alloc
()
:
NULL
;
if
(
p_box
->
data
.
p_sample_soun
->
p_drms
)
{
FILE
*
file
;
char
*
psz_homedir
;
char
*
psz_filename
;
uint32_t
p_user_key
[
4
];
int
i_ret
=
0
;
vlc_bool_t
b_key
=
VLC_FALSE
;
psz_filename
=
NULL
;
psz_homedir
=
p_stream
->
p_input
->
p_vlc
->
psz_homedir
;
#define DRMS_FILENAME "drms"
if
(
psz_homedir
!=
NULL
)
{
psz_filename
=
(
char
*
)
malloc
(
sizeof
(
"/"
CONFIG_DIR
"/"
DRMS_FILENAME
)
+
strlen
(
psz_homedir
)
);
if
(
psz_filename
!=
NULL
)
{
sprintf
(
psz_filename
,
"%s/"
CONFIG_DIR
"/"
DRMS_FILENAME
,
psz_homedir
);
file
=
fopen
(
psz_filename
,
"r"
);
if
(
file
!=
NULL
)
{
b_key
=
fread
(
p_user_key
,
sizeof
(
uint32_t
),
4
,
file
)
==
4
?
VLC_TRUE
:
VLC_FALSE
;
fclose
(
file
);
}
}
}
if
(
b_key
==
VLC_FALSE
)
{
i_ret
=
drms_get_user_key
(
NULL
,
p_user_key
);
}
if
(
!
i_ret
)
{
if
(
b_key
==
VLC_FALSE
&&
psz_filename
!=
NULL
)
{
file
=
fopen
(
psz_filename
,
"w"
);
if
(
file
!=
NULL
)
{
fwrite
(
p_user_key
,
sizeof
(
uint32_t
),
4
,
file
);
fclose
(
file
);
}
}
i_ret
=
drms_init
(
p_box
->
data
.
p_sample_soun
->
p_drms
,
DRMS_INIT_UKEY
,
(
uint8_t
*
)
p_user_key
,
sizeof
(
p_user_key
)
);
}
if
(
psz_filename
!=
NULL
)
{
free
(
(
void
*
)
psz_filename
);
}
if
(
i_ret
)
{
drms_free
(
p_box
->
data
.
p_sample_soun
->
p_drms
);
p_box
->
data
.
p_sample_soun
->
p_drms
=
NULL
;
}
}
MP4_ReadBoxContainerRaw
(
p_stream
,
p_box
);
/* esds */
MP4_ReadBoxContainerRaw
(
p_stream
,
p_box
);
/* esds */
#ifdef MP4_VERBOSE
#ifdef MP4_VERBOSE
...
@@ -1160,6 +1234,18 @@ static int MP4_ReadBox_sample_soun( MP4_Stream_t *p_stream, MP4_Box_t *p_box )
...
@@ -1160,6 +1234,18 @@ static int MP4_ReadBox_sample_soun( MP4_Stream_t *p_stream, MP4_Box_t *p_box )
}
}
static
void
MP4_FreeBox_sample_soun
(
MP4_Box_t
*
p_box
)
{
if
(
p_box
->
i_type
==
FOURCC_drms
)
{
if
(
p_box
->
data
.
p_sample_soun
->
p_drms
)
{
drms_free
(
p_box
->
data
.
p_sample_soun
->
p_drms
);
}
}
}
static
int
MP4_ReadBox_sample_vide
(
MP4_Stream_t
*
p_stream
,
MP4_Box_t
*
p_box
)
static
int
MP4_ReadBox_sample_vide
(
MP4_Stream_t
*
p_stream
,
MP4_Box_t
*
p_box
)
{
{
unsigned
int
i
;
unsigned
int
i
;
...
@@ -1879,6 +1965,81 @@ static int MP4_ReadBox_rmvc( MP4_Stream_t *p_stream, MP4_Box_t *p_box )
...
@@ -1879,6 +1965,81 @@ static int MP4_ReadBox_rmvc( MP4_Stream_t *p_stream, MP4_Box_t *p_box )
MP4_READBOX_EXIT
(
1
);
MP4_READBOX_EXIT
(
1
);
}
}
static
int
MP4_ReadBox_iviv
(
MP4_Stream_t
*
p_stream
,
MP4_Box_t
*
p_box
)
{
MP4_READBOX_ENTER
(
uint8_t
);
if
(
i_read
>=
sizeof
(
uint32_t
)
*
4
)
{
MP4_Box_t
*
p_drms_box
=
p_box
;
do
{
p_drms_box
=
p_drms_box
->
p_father
;
}
while
(
p_drms_box
&&
p_drms_box
->
i_type
!=
FOURCC_drms
);
if
(
p_drms_box
&&
p_drms_box
->
data
.
p_sample_soun
->
p_drms
)
{
if
(
drms_init
(
p_drms_box
->
data
.
p_sample_soun
->
p_drms
,
DRMS_INIT_IVIV
,
p_peek
,
sizeof
(
uint32_t
)
*
4
)
)
{
drms_free
(
p_drms_box
->
data
.
p_sample_soun
->
p_drms
);
p_drms_box
->
data
.
p_sample_soun
->
p_drms
=
NULL
;
}
}
}
MP4_READBOX_EXIT
(
1
);
}
static
int
MP4_ReadBox_name
(
MP4_Stream_t
*
p_stream
,
MP4_Box_t
*
p_box
)
{
MP4_Box_t
*
p_drms_box
=
p_box
;
MP4_READBOX_ENTER
(
uint8_t
);
do
{
p_drms_box
=
p_drms_box
->
p_father
;
}
while
(
p_drms_box
&&
p_drms_box
->
i_type
!=
FOURCC_drms
);
if
(
p_drms_box
&&
p_drms_box
->
data
.
p_sample_soun
->
p_drms
)
{
if
(
drms_init
(
p_drms_box
->
data
.
p_sample_soun
->
p_drms
,
DRMS_INIT_NAME
,
p_peek
,
strlen
(
p_peek
)
)
)
{
drms_free
(
p_drms_box
->
data
.
p_sample_soun
->
p_drms
);
p_drms_box
->
data
.
p_sample_soun
->
p_drms
=
NULL
;
}
}
MP4_READBOX_EXIT
(
1
);
}
static
int
MP4_ReadBox_priv
(
MP4_Stream_t
*
p_stream
,
MP4_Box_t
*
p_box
)
{
MP4_Box_t
*
p_drms_box
=
p_box
;
MP4_READBOX_ENTER
(
uint8_t
);
do
{
p_drms_box
=
p_drms_box
->
p_father
;
}
while
(
p_drms_box
&&
p_drms_box
->
i_type
!=
FOURCC_drms
);
if
(
p_drms_box
&&
p_drms_box
->
data
.
p_sample_soun
->
p_drms
)
{
if
(
drms_init
(
p_drms_box
->
data
.
p_sample_soun
->
p_drms
,
DRMS_INIT_PRIV
,
p_peek
,
i_read
)
)
{
drms_free
(
p_drms_box
->
data
.
p_sample_soun
->
p_drms
);
p_drms_box
->
data
.
p_sample_soun
->
p_drms
=
NULL
;
}
}
MP4_READBOX_EXIT
(
1
);
}
/**** ------------------------------------------------------------------- ****/
/**** ------------------------------------------------------------------- ****/
/**** "Higher level" Functions ****/
/**** "Higher level" Functions ****/
/**** ------------------------------------------------------------------- ****/
/**** ------------------------------------------------------------------- ****/
...
@@ -2014,6 +2175,13 @@ static struct
...
@@ -2014,6 +2175,13 @@ static struct
{
FOURCC_rmqu
,
MP4_ReadBox_rmqu
,
MP4_FreeBox_Common
},
{
FOURCC_rmqu
,
MP4_ReadBox_rmqu
,
MP4_FreeBox_Common
},
{
FOURCC_rmvc
,
MP4_ReadBox_rmvc
,
MP4_FreeBox_Common
},
{
FOURCC_rmvc
,
MP4_ReadBox_rmvc
,
MP4_FreeBox_Common
},
{
FOURCC_drms
,
MP4_ReadBox_sample_soun
,
MP4_FreeBox_sample_soun
},
{
FOURCC_sinf
,
MP4_ReadBoxContainer
,
MP4_FreeBox_Common
},
{
FOURCC_schi
,
MP4_ReadBoxContainer
,
MP4_FreeBox_Common
},
{
FOURCC_iviv
,
MP4_ReadBox_iviv
,
MP4_FreeBox_Common
},
{
FOURCC_name
,
MP4_ReadBox_name
,
MP4_FreeBox_Common
},
{
FOURCC_priv
,
MP4_ReadBox_priv
,
MP4_FreeBox_Common
},
/* Last entry */
/* Last entry */
{
0
,
NULL
,
NULL
}
{
0
,
NULL
,
NULL
}
};
};
...
...
modules/demux/mp4/libmp4.h
View file @
051ce627
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
* libmp4.h : LibMP4 library for mp4 module for vlc
* libmp4.h : LibMP4 library for mp4 module for vlc
*****************************************************************************
*****************************************************************************
* Copyright (C) 2001 VideoLAN
* Copyright (C) 2001 VideoLAN
* $Id: libmp4.h,v 1.1
7 2003/10/07 14:59:10 gbazin
Exp $
* $Id: libmp4.h,v 1.1
8 2004/01/05 12:37:52 jlj
Exp $
* Authors: Laurent Aimar <fenrir@via.ecp.fr>
* Authors: Laurent Aimar <fenrir@via.ecp.fr>
*
*
* This program is free software; you can redistribute it and/or modify
* This program is free software; you can redistribute it and/or modify
...
@@ -154,6 +154,13 @@
...
@@ -154,6 +154,13 @@
#define FOURCC_gmhd VLC_FOURCC( 'g', 'm', 'h', 'd' )
#define FOURCC_gmhd VLC_FOURCC( 'g', 'm', 'h', 'd' )
#define FOURCC_wave VLC_FOURCC( 'w', 'a', 'v', 'e' )
#define FOURCC_wave VLC_FOURCC( 'w', 'a', 'v', 'e' )
#define FOURCC_drms VLC_FOURCC( 'd', 'r', 'm', 's' )
#define FOURCC_sinf VLC_FOURCC( 's', 'i', 'n', 'f' )
#define FOURCC_schi VLC_FOURCC( 's', 'c', 'h', 'i' )
#define FOURCC_iviv VLC_FOURCC( 'i', 'v', 'i', 'v' )
#define FOURCC_name VLC_FOURCC( 'n', 'a', 'm', 'e' )
#define FOURCC_priv VLC_FOURCC( 'p', 'r', 'i', 'v' )
/* Do you want some debug information on all read boxes ? */
/* Do you want some debug information on all read boxes ? */
#define MP4_VERBOSE 1
#define MP4_VERBOSE 1
...
@@ -381,6 +388,8 @@ typedef struct MP4_Box_data_sample_soun_s
...
@@ -381,6 +388,8 @@ typedef struct MP4_Box_data_sample_soun_s
int
i_qt_description
;
int
i_qt_description
;
uint8_t
*
p_qt_description
;
uint8_t
*
p_qt_description
;
void
*
p_drms
;
}
MP4_Box_data_sample_soun_t
;
}
MP4_Box_data_sample_soun_t
;
typedef
struct
MP4_Box_data_sample_vide_s
typedef
struct
MP4_Box_data_sample_vide_s
...
...
modules/demux/mp4/mp4.c
View file @
051ce627
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
* mp4.c : MP4 file input module for vlc
* mp4.c : MP4 file input module for vlc
*****************************************************************************
*****************************************************************************
* Copyright (C) 2001 VideoLAN
* Copyright (C) 2001 VideoLAN
* $Id: mp4.c,v 1.4
6 2003/12/20 16:22:59 gbazin
Exp $
* $Id: mp4.c,v 1.4
7 2004/01/05 12:37:52 jlj
Exp $
* Authors: Laurent Aimar <fenrir@via.ecp.fr>
* Authors: Laurent Aimar <fenrir@via.ecp.fr>
*
*
* This program is free software; you can redistribute it and/or modify
* This program is free software; you can redistribute it and/or modify
...
@@ -31,6 +31,7 @@
...
@@ -31,6 +31,7 @@
#include "libmp4.h"
#include "libmp4.h"
#include "mp4.h"
#include "mp4.h"
#include "drms.h"
/*****************************************************************************
/*****************************************************************************
* Module descriptor
* Module descriptor
...
@@ -459,6 +460,13 @@ static int Demux( input_thread_t *p_input )
...
@@ -459,6 +460,13 @@ static int Demux( input_thread_t *p_input )
break
;
break
;
}
}
if
(
track
.
p_drms
!=
NULL
)
{
drms_decrypt
(
track
.
p_drms
,
(
uint32_t
*
)
p_block
->
p_buffer
,
p_block
->
i_buffer
);
}
if
(
track
.
fmt
.
i_cat
==
VIDEO_ES
)
if
(
track
.
fmt
.
i_cat
==
VIDEO_ES
)
{
{
/* FIXME sometime we can calculate PTS */
/* FIXME sometime we can calculate PTS */
...
@@ -1240,6 +1248,8 @@ static void MP4_TrackCreate( input_thread_t *p_input,
...
@@ -1240,6 +1248,8 @@ static void MP4_TrackCreate( input_thread_t *p_input,
MP4_Box_t
*
p_vmhd
;
MP4_Box_t
*
p_vmhd
;
MP4_Box_t
*
p_smhd
;
MP4_Box_t
*
p_smhd
;
MP4_Box_t
*
p_drms
;
unsigned
int
i
;
unsigned
int
i
;
char
language
[
4
];
char
language
[
4
];
...
@@ -1322,6 +1332,10 @@ static void MP4_TrackCreate( input_thread_t *p_input,
...
@@ -1322,6 +1332,10 @@ static void MP4_TrackCreate( input_thread_t *p_input,
return
;
return
;
}
}
p_drms
=
MP4_BoxGet
(
p_track
->
p_stsd
,
"drms"
);
p_track
->
p_drms
=
p_drms
!=
NULL
?
p_drms
->
data
.
p_sample_soun
->
p_drms
:
NULL
;
/* Set language */
/* Set language */
if
(
strcmp
(
language
,
"```"
)
&&
strcmp
(
language
,
"und"
)
)
if
(
strcmp
(
language
,
"```"
)
&&
strcmp
(
language
,
"und"
)
)
{
{
...
...
modules/demux/mp4/mp4.h
View file @
051ce627
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
* mp4.h : MP4 file input module for vlc
* mp4.h : MP4 file input module for vlc
*****************************************************************************
*****************************************************************************
* Copyright (C) 2001 VideoLAN
* Copyright (C) 2001 VideoLAN
* $Id: mp4.h,v 1.
9 2003/11/27 12:32:51 fenrir
Exp $
* $Id: mp4.h,v 1.
10 2004/01/05 12:37:52 jlj
Exp $
* Authors: Laurent Aimar <fenrir@via.ecp.fr>
* Authors: Laurent Aimar <fenrir@via.ecp.fr>
*
*
* This program is free software; you can redistribute it and/or modify
* This program is free software; you can redistribute it and/or modify
...
@@ -86,6 +86,8 @@ typedef struct track_data_mp4_s
...
@@ -86,6 +86,8 @@ typedef struct track_data_mp4_s
MP4_Box_t
*
p_stsd
;
/* will contain all data to initialize decoder */
MP4_Box_t
*
p_stsd
;
/* will contain all data to initialize decoder */
MP4_Box_t
*
p_sample
;
/* point on actual sdsd */
MP4_Box_t
*
p_sample
;
/* point on actual sdsd */
void
*
p_drms
;
}
track_data_mp4_t
;
}
track_data_mp4_t
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment