summaryrefslogtreecommitdiff
path: root/src/input/libreal
diff options
context:
space:
mode:
Diffstat (limited to 'src/input/libreal')
-rw-r--r--src/input/libreal/Makefile.am19
-rw-r--r--src/input/libreal/asmrp.c6
-rw-r--r--src/input/libreal/asmrp.h4
-rw-r--r--src/input/libreal/real.c204
-rw-r--r--src/input/libreal/real.h5
-rw-r--r--src/input/libreal/rmff.c417
-rw-r--r--src/input/libreal/rmff.h20
-rw-r--r--src/input/libreal/sdpplin.c12
-rw-r--r--src/input/libreal/sdpplin.h5
9 files changed, 349 insertions, 343 deletions
diff --git a/src/input/libreal/Makefile.am b/src/input/libreal/Makefile.am
index 5b10d1bca..bd97a7548 100644
--- a/src/input/libreal/Makefile.am
+++ b/src/input/libreal/Makefile.am
@@ -1,19 +1,10 @@
include $(top_srcdir)/misc/Makefile.common
-AM_CPPFLAGS = -D_LARGEFILE64_SOURCE -I$(srcdir)/../librtsp
+AM_CFLAGS = $(DEFAULT_OCFLAGS) $(VISIBILITY_FLAG)
+AM_CPPFLAGS = -I$(top_srcdir)/src/input/librtsp
-noinst_LTLIBRARIES = libreal.la
-
-libreal_la_SOURCES = \
- real.c \
- asmrp.c \
- rmff.c \
- sdpplin.c
+noinst_HEADERS = real.h asmrp.h rmff.h sdpplin.h
-libreal_la_CFLAGS = $(VISIBILITY_FLAG)
+noinst_LTLIBRARIES = libreal.la
-noinst_HEADERS = \
- real.h \
- asmrp.h \
- rmff.h \
- sdpplin.h
+libreal_la_SOURCES = real.c asmrp.c rmff.c sdpplin.c
diff --git a/src/input/libreal/asmrp.c b/src/input/libreal/asmrp.c
index 8afc19df6..9fc7a3867 100644
--- a/src/input/libreal/asmrp.c
+++ b/src/input/libreal/asmrp.c
@@ -15,9 +15,7 @@
*
* 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-1307, USA
- *
- * $Id: asmrp.c,v 1.10 2006/12/25 15:39:31 dgp85 Exp $
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
*
* a parser for real's asm rules
*
@@ -45,7 +43,7 @@
*/
#include "asmrp.h"
-#include "xineutils.h"
+#include <xine/xineutils.h>
#define ASMRP_SYM_NONE 0
#define ASMRP_SYM_EOF 1
diff --git a/src/input/libreal/asmrp.h b/src/input/libreal/asmrp.h
index d787eb330..dcc373bd0 100644
--- a/src/input/libreal/asmrp.h
+++ b/src/input/libreal/asmrp.h
@@ -15,9 +15,7 @@
*
* 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-1307, USA
- *
- * $Id: asmrp.h,v 1.3 2006/11/29 19:43:01 dgp85 Exp $
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
*
* a parser for real's asm rules
*
diff --git a/src/input/libreal/real.c b/src/input/libreal/real.c
index dc0c001bd..078b12757 100644
--- a/src/input/libreal/real.c
+++ b/src/input/libreal/real.c
@@ -15,13 +15,10 @@
*
* 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-1307, USA
- *
- * $Id: real.c,v 1.26 2007/01/19 01:19:06 dgp85 Exp $
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
*
* special functions for real streams.
* adopted from joschkas real tools.
- *
*/
#include <stdio.h>
@@ -36,8 +33,8 @@
#include "real.h"
#include "asmrp.h"
#include "sdpplin.h"
-#include "xine_internal.h"
-#include "xineutils.h"
+#include <xine/xine_internal.h>
+#include <xine/xineutils.h>
#include "bswap.h"
#define XOR_TABLE_LEN 37
@@ -48,8 +45,8 @@ static const unsigned char xor_table[] = {
0x63, 0x11, 0x03, 0x71, 0x08, 0x08, 0x70, 0x02,
0x10, 0x57, 0x05, 0x18, 0x54, 0x00, 0x00, 0x00 };
-#define BE_32C(x,y) do { *(uint32_t *)(x) = be2me_32((y)); } while(0)
-#define LE_32C(x,y) do { *(uint32_t *)(x) = le2me_32((y)); } while(0)
+#define _X_BE_32C(x,y) do { *(uint32_t *)(x) = be2me_32((y)); } while(0)
+#define _X_LE_32C(x,y) do { *(uint32_t *)(x) = le2me_32((y)); } while(0)
#define MAX(x,y) ((x>y) ? x : y)
@@ -60,10 +57,10 @@ static void hash(char *field, char *param) {
/* fill variables */
- a = LE_32(field);
- b = LE_32(field+4);
- c = LE_32(field+8);
- d = LE_32(field+12);
+ a = _X_LE_32(field);
+ b = _X_LE_32(field+4);
+ c = _X_LE_32(field+8);
+ d = _X_LE_32(field+12);
lprintf("hash input: %x %x %x %x\n", a, b, c, d);
lprintf("hash parameter:\n");
@@ -71,149 +68,149 @@ static void hash(char *field, char *param) {
xine_hexdump(param, 64);
#endif
- a = ((b & c) | (~b & d)) + LE_32((param+0x00)) + a - 0x28955B88;
+ a = ((b & c) | (~b & d)) + _X_LE_32((param+0x00)) + a - 0x28955B88;
a = ((a << 0x07) | (a >> 0x19)) + b;
- d = ((a & b) | (~a & c)) + LE_32((param+0x04)) + d - 0x173848AA;
+ d = ((a & b) | (~a & c)) + _X_LE_32((param+0x04)) + d - 0x173848AA;
d = ((d << 0x0c) | (d >> 0x14)) + a;
- c = ((d & a) | (~d & b)) + LE_32((param+0x08)) + c + 0x242070DB;
+ c = ((d & a) | (~d & b)) + _X_LE_32((param+0x08)) + c + 0x242070DB;
c = ((c << 0x11) | (c >> 0x0f)) + d;
- b = ((c & d) | (~c & a)) + LE_32((param+0x0c)) + b - 0x3E423112;
+ b = ((c & d) | (~c & a)) + _X_LE_32((param+0x0c)) + b - 0x3E423112;
b = ((b << 0x16) | (b >> 0x0a)) + c;
- a = ((b & c) | (~b & d)) + LE_32((param+0x10)) + a - 0x0A83F051;
+ a = ((b & c) | (~b & d)) + _X_LE_32((param+0x10)) + a - 0x0A83F051;
a = ((a << 0x07) | (a >> 0x19)) + b;
- d = ((a & b) | (~a & c)) + LE_32((param+0x14)) + d + 0x4787C62A;
+ d = ((a & b) | (~a & c)) + _X_LE_32((param+0x14)) + d + 0x4787C62A;
d = ((d << 0x0c) | (d >> 0x14)) + a;
- c = ((d & a) | (~d & b)) + LE_32((param+0x18)) + c - 0x57CFB9ED;
+ c = ((d & a) | (~d & b)) + _X_LE_32((param+0x18)) + c - 0x57CFB9ED;
c = ((c << 0x11) | (c >> 0x0f)) + d;
- b = ((c & d) | (~c & a)) + LE_32((param+0x1c)) + b - 0x02B96AFF;
+ b = ((c & d) | (~c & a)) + _X_LE_32((param+0x1c)) + b - 0x02B96AFF;
b = ((b << 0x16) | (b >> 0x0a)) + c;
- a = ((b & c) | (~b & d)) + LE_32((param+0x20)) + a + 0x698098D8;
+ a = ((b & c) | (~b & d)) + _X_LE_32((param+0x20)) + a + 0x698098D8;
a = ((a << 0x07) | (a >> 0x19)) + b;
- d = ((a & b) | (~a & c)) + LE_32((param+0x24)) + d - 0x74BB0851;
+ d = ((a & b) | (~a & c)) + _X_LE_32((param+0x24)) + d - 0x74BB0851;
d = ((d << 0x0c) | (d >> 0x14)) + a;
- c = ((d & a) | (~d & b)) + LE_32((param+0x28)) + c - 0x0000A44F;
+ c = ((d & a) | (~d & b)) + _X_LE_32((param+0x28)) + c - 0x0000A44F;
c = ((c << 0x11) | (c >> 0x0f)) + d;
- b = ((c & d) | (~c & a)) + LE_32((param+0x2C)) + b - 0x76A32842;
+ b = ((c & d) | (~c & a)) + _X_LE_32((param+0x2C)) + b - 0x76A32842;
b = ((b << 0x16) | (b >> 0x0a)) + c;
- a = ((b & c) | (~b & d)) + LE_32((param+0x30)) + a + 0x6B901122;
+ a = ((b & c) | (~b & d)) + _X_LE_32((param+0x30)) + a + 0x6B901122;
a = ((a << 0x07) | (a >> 0x19)) + b;
- d = ((a & b) | (~a & c)) + LE_32((param+0x34)) + d - 0x02678E6D;
+ d = ((a & b) | (~a & c)) + _X_LE_32((param+0x34)) + d - 0x02678E6D;
d = ((d << 0x0c) | (d >> 0x14)) + a;
- c = ((d & a) | (~d & b)) + LE_32((param+0x38)) + c - 0x5986BC72;
+ c = ((d & a) | (~d & b)) + _X_LE_32((param+0x38)) + c - 0x5986BC72;
c = ((c << 0x11) | (c >> 0x0f)) + d;
- b = ((c & d) | (~c & a)) + LE_32((param+0x3c)) + b + 0x49B40821;
+ b = ((c & d) | (~c & a)) + _X_LE_32((param+0x3c)) + b + 0x49B40821;
b = ((b << 0x16) | (b >> 0x0a)) + c;
- a = ((b & d) | (~d & c)) + LE_32((param+0x04)) + a - 0x09E1DA9E;
+ a = ((b & d) | (~d & c)) + _X_LE_32((param+0x04)) + a - 0x09E1DA9E;
a = ((a << 0x05) | (a >> 0x1b)) + b;
- d = ((a & c) | (~c & b)) + LE_32((param+0x18)) + d - 0x3FBF4CC0;
+ d = ((a & c) | (~c & b)) + _X_LE_32((param+0x18)) + d - 0x3FBF4CC0;
d = ((d << 0x09) | (d >> 0x17)) + a;
- c = ((d & b) | (~b & a)) + LE_32((param+0x2c)) + c + 0x265E5A51;
+ c = ((d & b) | (~b & a)) + _X_LE_32((param+0x2c)) + c + 0x265E5A51;
c = ((c << 0x0e) | (c >> 0x12)) + d;
- b = ((c & a) | (~a & d)) + LE_32((param+0x00)) + b - 0x16493856;
+ b = ((c & a) | (~a & d)) + _X_LE_32((param+0x00)) + b - 0x16493856;
b = ((b << 0x14) | (b >> 0x0c)) + c;
- a = ((b & d) | (~d & c)) + LE_32((param+0x14)) + a - 0x29D0EFA3;
+ a = ((b & d) | (~d & c)) + _X_LE_32((param+0x14)) + a - 0x29D0EFA3;
a = ((a << 0x05) | (a >> 0x1b)) + b;
- d = ((a & c) | (~c & b)) + LE_32((param+0x28)) + d + 0x02441453;
+ d = ((a & c) | (~c & b)) + _X_LE_32((param+0x28)) + d + 0x02441453;
d = ((d << 0x09) | (d >> 0x17)) + a;
- c = ((d & b) | (~b & a)) + LE_32((param+0x3c)) + c - 0x275E197F;
+ c = ((d & b) | (~b & a)) + _X_LE_32((param+0x3c)) + c - 0x275E197F;
c = ((c << 0x0e) | (c >> 0x12)) + d;
- b = ((c & a) | (~a & d)) + LE_32((param+0x10)) + b - 0x182C0438;
+ b = ((c & a) | (~a & d)) + _X_LE_32((param+0x10)) + b - 0x182C0438;
b = ((b << 0x14) | (b >> 0x0c)) + c;
- a = ((b & d) | (~d & c)) + LE_32((param+0x24)) + a + 0x21E1CDE6;
+ a = ((b & d) | (~d & c)) + _X_LE_32((param+0x24)) + a + 0x21E1CDE6;
a = ((a << 0x05) | (a >> 0x1b)) + b;
- d = ((a & c) | (~c & b)) + LE_32((param+0x38)) + d - 0x3CC8F82A;
+ d = ((a & c) | (~c & b)) + _X_LE_32((param+0x38)) + d - 0x3CC8F82A;
d = ((d << 0x09) | (d >> 0x17)) + a;
- c = ((d & b) | (~b & a)) + LE_32((param+0x0c)) + c - 0x0B2AF279;
+ c = ((d & b) | (~b & a)) + _X_LE_32((param+0x0c)) + c - 0x0B2AF279;
c = ((c << 0x0e) | (c >> 0x12)) + d;
- b = ((c & a) | (~a & d)) + LE_32((param+0x20)) + b + 0x455A14ED;
+ b = ((c & a) | (~a & d)) + _X_LE_32((param+0x20)) + b + 0x455A14ED;
b = ((b << 0x14) | (b >> 0x0c)) + c;
- a = ((b & d) | (~d & c)) + LE_32((param+0x34)) + a - 0x561C16FB;
+ a = ((b & d) | (~d & c)) + _X_LE_32((param+0x34)) + a - 0x561C16FB;
a = ((a << 0x05) | (a >> 0x1b)) + b;
- d = ((a & c) | (~c & b)) + LE_32((param+0x08)) + d - 0x03105C08;
+ d = ((a & c) | (~c & b)) + _X_LE_32((param+0x08)) + d - 0x03105C08;
d = ((d << 0x09) | (d >> 0x17)) + a;
- c = ((d & b) | (~b & a)) + LE_32((param+0x1c)) + c + 0x676F02D9;
+ c = ((d & b) | (~b & a)) + _X_LE_32((param+0x1c)) + c + 0x676F02D9;
c = ((c << 0x0e) | (c >> 0x12)) + d;
- b = ((c & a) | (~a & d)) + LE_32((param+0x30)) + b - 0x72D5B376;
+ b = ((c & a) | (~a & d)) + _X_LE_32((param+0x30)) + b - 0x72D5B376;
b = ((b << 0x14) | (b >> 0x0c)) + c;
- a = (b ^ c ^ d) + LE_32((param+0x14)) + a - 0x0005C6BE;
+ a = (b ^ c ^ d) + _X_LE_32((param+0x14)) + a - 0x0005C6BE;
a = ((a << 0x04) | (a >> 0x1c)) + b;
- d = (a ^ b ^ c) + LE_32((param+0x20)) + d - 0x788E097F;
+ d = (a ^ b ^ c) + _X_LE_32((param+0x20)) + d - 0x788E097F;
d = ((d << 0x0b) | (d >> 0x15)) + a;
- c = (d ^ a ^ b) + LE_32((param+0x2c)) + c + 0x6D9D6122;
+ c = (d ^ a ^ b) + _X_LE_32((param+0x2c)) + c + 0x6D9D6122;
c = ((c << 0x10) | (c >> 0x10)) + d;
- b = (c ^ d ^ a) + LE_32((param+0x38)) + b - 0x021AC7F4;
+ b = (c ^ d ^ a) + _X_LE_32((param+0x38)) + b - 0x021AC7F4;
b = ((b << 0x17) | (b >> 0x09)) + c;
- a = (b ^ c ^ d) + LE_32((param+0x04)) + a - 0x5B4115BC;
+ a = (b ^ c ^ d) + _X_LE_32((param+0x04)) + a - 0x5B4115BC;
a = ((a << 0x04) | (a >> 0x1c)) + b;
- d = (a ^ b ^ c) + LE_32((param+0x10)) + d + 0x4BDECFA9;
+ d = (a ^ b ^ c) + _X_LE_32((param+0x10)) + d + 0x4BDECFA9;
d = ((d << 0x0b) | (d >> 0x15)) + a;
- c = (d ^ a ^ b) + LE_32((param+0x1c)) + c - 0x0944B4A0;
+ c = (d ^ a ^ b) + _X_LE_32((param+0x1c)) + c - 0x0944B4A0;
c = ((c << 0x10) | (c >> 0x10)) + d;
- b = (c ^ d ^ a) + LE_32((param+0x28)) + b - 0x41404390;
+ b = (c ^ d ^ a) + _X_LE_32((param+0x28)) + b - 0x41404390;
b = ((b << 0x17) | (b >> 0x09)) + c;
- a = (b ^ c ^ d) + LE_32((param+0x34)) + a + 0x289B7EC6;
+ a = (b ^ c ^ d) + _X_LE_32((param+0x34)) + a + 0x289B7EC6;
a = ((a << 0x04) | (a >> 0x1c)) + b;
- d = (a ^ b ^ c) + LE_32((param+0x00)) + d - 0x155ED806;
+ d = (a ^ b ^ c) + _X_LE_32((param+0x00)) + d - 0x155ED806;
d = ((d << 0x0b) | (d >> 0x15)) + a;
- c = (d ^ a ^ b) + LE_32((param+0x0c)) + c - 0x2B10CF7B;
+ c = (d ^ a ^ b) + _X_LE_32((param+0x0c)) + c - 0x2B10CF7B;
c = ((c << 0x10) | (c >> 0x10)) + d;
- b = (c ^ d ^ a) + LE_32((param+0x18)) + b + 0x04881D05;
+ b = (c ^ d ^ a) + _X_LE_32((param+0x18)) + b + 0x04881D05;
b = ((b << 0x17) | (b >> 0x09)) + c;
- a = (b ^ c ^ d) + LE_32((param+0x24)) + a - 0x262B2FC7;
+ a = (b ^ c ^ d) + _X_LE_32((param+0x24)) + a - 0x262B2FC7;
a = ((a << 0x04) | (a >> 0x1c)) + b;
- d = (a ^ b ^ c) + LE_32((param+0x30)) + d - 0x1924661B;
+ d = (a ^ b ^ c) + _X_LE_32((param+0x30)) + d - 0x1924661B;
d = ((d << 0x0b) | (d >> 0x15)) + a;
- c = (d ^ a ^ b) + LE_32((param+0x3c)) + c + 0x1fa27cf8;
+ c = (d ^ a ^ b) + _X_LE_32((param+0x3c)) + c + 0x1fa27cf8;
c = ((c << 0x10) | (c >> 0x10)) + d;
- b = (c ^ d ^ a) + LE_32((param+0x08)) + b - 0x3B53A99B;
+ b = (c ^ d ^ a) + _X_LE_32((param+0x08)) + b - 0x3B53A99B;
b = ((b << 0x17) | (b >> 0x09)) + c;
- a = ((~d | b) ^ c) + LE_32((param+0x00)) + a - 0x0BD6DDBC;
+ a = ((~d | b) ^ c) + _X_LE_32((param+0x00)) + a - 0x0BD6DDBC;
a = ((a << 0x06) | (a >> 0x1a)) + b;
- d = ((~c | a) ^ b) + LE_32((param+0x1c)) + d + 0x432AFF97;
+ d = ((~c | a) ^ b) + _X_LE_32((param+0x1c)) + d + 0x432AFF97;
d = ((d << 0x0a) | (d >> 0x16)) + a;
- c = ((~b | d) ^ a) + LE_32((param+0x38)) + c - 0x546BDC59;
+ c = ((~b | d) ^ a) + _X_LE_32((param+0x38)) + c - 0x546BDC59;
c = ((c << 0x0f) | (c >> 0x11)) + d;
- b = ((~a | c) ^ d) + LE_32((param+0x14)) + b - 0x036C5FC7;
+ b = ((~a | c) ^ d) + _X_LE_32((param+0x14)) + b - 0x036C5FC7;
b = ((b << 0x15) | (b >> 0x0b)) + c;
- a = ((~d | b) ^ c) + LE_32((param+0x30)) + a + 0x655B59C3;
+ a = ((~d | b) ^ c) + _X_LE_32((param+0x30)) + a + 0x655B59C3;
a = ((a << 0x06) | (a >> 0x1a)) + b;
- d = ((~c | a) ^ b) + LE_32((param+0x0C)) + d - 0x70F3336E;
+ d = ((~c | a) ^ b) + _X_LE_32((param+0x0C)) + d - 0x70F3336E;
d = ((d << 0x0a) | (d >> 0x16)) + a;
- c = ((~b | d) ^ a) + LE_32((param+0x28)) + c - 0x00100B83;
+ c = ((~b | d) ^ a) + _X_LE_32((param+0x28)) + c - 0x00100B83;
c = ((c << 0x0f) | (c >> 0x11)) + d;
- b = ((~a | c) ^ d) + LE_32((param+0x04)) + b - 0x7A7BA22F;
+ b = ((~a | c) ^ d) + _X_LE_32((param+0x04)) + b - 0x7A7BA22F;
b = ((b << 0x15) | (b >> 0x0b)) + c;
- a = ((~d | b) ^ c) + LE_32((param+0x20)) + a + 0x6FA87E4F;
+ a = ((~d | b) ^ c) + _X_LE_32((param+0x20)) + a + 0x6FA87E4F;
a = ((a << 0x06) | (a >> 0x1a)) + b;
- d = ((~c | a) ^ b) + LE_32((param+0x3c)) + d - 0x01D31920;
+ d = ((~c | a) ^ b) + _X_LE_32((param+0x3c)) + d - 0x01D31920;
d = ((d << 0x0a) | (d >> 0x16)) + a;
- c = ((~b | d) ^ a) + LE_32((param+0x18)) + c - 0x5CFEBCEC;
+ c = ((~b | d) ^ a) + _X_LE_32((param+0x18)) + c - 0x5CFEBCEC;
c = ((c << 0x0f) | (c >> 0x11)) + d;
- b = ((~a | c) ^ d) + LE_32((param+0x34)) + b + 0x4E0811A1;
+ b = ((~a | c) ^ d) + _X_LE_32((param+0x34)) + b + 0x4E0811A1;
b = ((b << 0x15) | (b >> 0x0b)) + c;
- a = ((~d | b) ^ c) + LE_32((param+0x10)) + a - 0x08AC817E;
+ a = ((~d | b) ^ c) + _X_LE_32((param+0x10)) + a - 0x08AC817E;
a = ((a << 0x06) | (a >> 0x1a)) + b;
- d = ((~c | a) ^ b) + LE_32((param+0x2c)) + d - 0x42C50DCB;
+ d = ((~c | a) ^ b) + _X_LE_32((param+0x2c)) + d - 0x42C50DCB;
d = ((d << 0x0a) | (d >> 0x16)) + a;
- c = ((~b | d) ^ a) + LE_32((param+0x08)) + c + 0x2AD7D2BB;
+ c = ((~b | d) ^ a) + _X_LE_32((param+0x08)) + c + 0x2AD7D2BB;
c = ((c << 0x0f) | (c >> 0x11)) + d;
- b = ((~a | c) ^ d) + LE_32((param+0x24)) + b - 0x14792C6F;
+ b = ((~a | c) ^ d) + _X_LE_32((param+0x24)) + b - 0x14792C6F;
b = ((b << 0x15) | (b >> 0x0b)) + c;
lprintf("hash output: %x %x %x %x\n", a, b, c, d);
- a += LE_32(field);
- b += LE_32(field+4);
- c += LE_32(field+8);
- d += LE_32(field+12);
-
- LE_32C(field, a);
- LE_32C(field+4, b);
- LE_32C(field+8, c);
- LE_32C(field+12, d);
+ a += _X_LE_32(field);
+ b += _X_LE_32(field+4);
+ c += _X_LE_32(field+8);
+ d += _X_LE_32(field+12);
+
+ _X_LE_32C(field, a);
+ _X_LE_32C(field+4, b);
+ _X_LE_32C(field+8, c);
+ _X_LE_32C(field+12, d);
}
static void call_hash (char *key, char *challenge, unsigned int len) {
@@ -224,10 +221,10 @@ static void call_hash (char *key, char *challenge, unsigned int len) {
ptr1=(key+16);
ptr2=(key+20);
- a = LE_32(ptr1);
+ a = _X_LE_32(ptr1);
b = (a >> 3) & 0x3f;
a += len * 8;
- LE_32C(ptr1, a);
+ _X_LE_32C(ptr1, a);
if (a < (len << 3))
{
@@ -235,8 +232,8 @@ static void call_hash (char *key, char *challenge, unsigned int len) {
ptr2 += 4;
}
- tmp = LE_32(ptr2) + (len >> 0x1d);
- LE_32C(ptr2, tmp);
+ tmp = _X_LE_32(ptr2) + (len >> 0x1d);
+ _X_LE_32C(ptr2, tmp);
a = 64 - b;
c = 0;
if (a <= len)
@@ -270,7 +267,7 @@ static void calc_response (char *result, char *field) {
memcpy (buf2, field+16, 8);
- i = ( LE_32((buf2)) >> 3 ) & 0x3f;
+ i = ( _X_LE_32((buf2)) >> 3 ) & 0x3f;
if (i < 56) {
i = 56 - i;
@@ -319,18 +316,17 @@ void real_calc_response_and_checksum (char *response, char *chksum, char *challe
int ch_len, resp_len;
int i;
char *ptr;
- char buf[128];
+ char buf[128] = { 0, };
/* initialize return values */
memset(response, 0, 64);
memset(chksum, 0, 34);
/* initialize buffer */
- memset(buf, 0, 128);
ptr=buf;
- BE_32C(ptr, 0xa1e9149d);
+ _X_BE_32C(ptr, 0xa1e9149d);
ptr+=4;
- BE_32C(ptr, 0x0e6b3b59);
+ _X_BE_32C(ptr, 0x0e6b3b59);
ptr+=4;
/* some (length) checks */
@@ -356,10 +352,10 @@ void real_calc_response_and_checksum (char *response, char *chksum, char *challe
calc_response_string (response, buf);
/* add tail */
- resp_len = strlen (response);
- strcpy (&response[resp_len], "01d0a8e3");
+ strcat(response, "01d0a8e3");
/* calculate checksum */
+ resp_len = strlen (response);
for (i=0; i<resp_len/4; i++)
chksum[i] = response[i*4];
}
@@ -390,7 +386,7 @@ static int select_mlti_data(const char *mlti_chunk, int mlti_size, int selection
mlti_chunk+=4;
/* next 16 bits are the number of rules */
- numrules=BE_16(mlti_chunk);
+ numrules=_X_BE_16(mlti_chunk);
if (selection >= numrules) return 0;
/* now <numrules> indices of codecs follows */
@@ -398,13 +394,13 @@ static int select_mlti_data(const char *mlti_chunk, int mlti_size, int selection
mlti_chunk+=(selection+1)*2;
/* get our index */
- codec=BE_16(mlti_chunk);
+ codec=_X_BE_16(mlti_chunk);
/* skip to number of codecs */
mlti_chunk+=(numrules-selection)*2;
/* get number of codecs */
- numrules=BE_16(mlti_chunk);
+ numrules=_X_BE_16(mlti_chunk);
if (codec >= numrules) {
lprintf("codec index >= number of codecs. %i %i\n", codec, numrules);
@@ -415,11 +411,11 @@ static int select_mlti_data(const char *mlti_chunk, int mlti_size, int selection
/* now seek to selected codec */
for (i=0; i<codec; i++) {
- size=BE_32(mlti_chunk);
+ size=_X_BE_32(mlti_chunk);
mlti_chunk+=size+4;
}
- size=BE_32(mlti_chunk);
+ size=_X_BE_32(mlti_chunk);
#ifdef LOG
xine_hexdump(mlti_chunk+4, size);
@@ -461,7 +457,7 @@ rmff_header_t *real_parse_sdp(char *data, char **stream_rules, uint32_t bandwidt
desc->copyright,
desc->abstract);
header->data=rmff_new_dataheader(0,0);
- header->streams = xine_xmalloc(sizeof(rmff_mdpr_t*)*(desc->stream_count+1));
+ header->streams = xine_xcalloc((desc->stream_count+1), sizeof(rmff_mdpr_t*));
lprintf("number of streams: %u\n", desc->stream_count);
for (i=0; i<desc->stream_count; i++) {
@@ -578,7 +574,7 @@ int real_get_rdt_chunk(rtsp_t *rtsp_session, unsigned char **buffer) {
unknown1=(header[5]<<16)+(header[6]<<8)+(header[7]);
n=rtsp_read_data(rtsp_session, header, 6);
if (n<6) return 0;
- ts=BE_32(header);
+ ts=_X_BE_32(header);
lprintf("ts: %u size: %u, flags: 0x%02x, unknown values: %u 0x%02x 0x%02x\n",
ts, size, flags1, unknown1, header[4], header[5]);
@@ -663,7 +659,7 @@ rmff_header_t *real_setup_and_get_header(rtsp_t *rtsp_session, uint32_t bandwid
lprintf("Stream description size: %i\n", size);
- description = malloc(sizeof(char)*(size+1));
+ description = calloc(size+1, sizeof(char));
if( rtsp_read_data(rtsp_session, description, size) <= 0) {
xine_buffer_free(buf);
diff --git a/src/input/libreal/real.h b/src/input/libreal/real.h
index ef9778dbc..edcd170f8 100644
--- a/src/input/libreal/real.h
+++ b/src/input/libreal/real.h
@@ -15,13 +15,10 @@
*
* 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-1307, USA
- *
- * $Id: real.h,v 1.5 2004/04/24 16:55:42 miguelfreitas Exp $
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
*
* special functions for real streams.
* adopted from joschkas real tools.
- *
*/
#ifndef HAVE_REAL_H
diff --git a/src/input/libreal/rmff.c b/src/input/libreal/rmff.c
index 0c4ee2ccd..1600e967a 100644
--- a/src/input/libreal/rmff.c
+++ b/src/input/libreal/rmff.c
@@ -15,9 +15,7 @@
*
* 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-1307, USA
- *
- * $Id: rmff.c,v 1.8 2006/06/20 01:07:58 dgp85 Exp $
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
*
* functions for real media file format
* adopted from joschkas real tools
@@ -29,56 +27,61 @@
#define LOG
*/
-#include "xineutils.h"
+#include <xine/xineutils.h>
+#include "bswap.h"
#include "rmff.h"
-#define BE_16(x) ((((uint8_t*)(x))[0] << 8) | ((uint8_t*)(x))[1])
-#define BE_32(x) ((((uint8_t*)(x))[0] << 24) | \
- (((uint8_t*)(x))[1] << 16) | \
- (((uint8_t*)(x))[2] << 8) | \
- ((uint8_t*)(x))[3])
-
/*
* writes header data to a buffer
*/
-static void rmff_dump_fileheader(rmff_fileheader_t *fileheader, char *buffer) {
+static int rmff_dump_fileheader(rmff_fileheader_t *fileheader, uint8_t *buffer, int bufsize) {
+
+ if (!fileheader) return 0;
- if (!fileheader) return;
- fileheader->object_id=BE_32(&fileheader->object_id);
- fileheader->size=BE_32(&fileheader->size);
- fileheader->object_version=BE_16(&fileheader->object_version);
- fileheader->file_version=BE_32(&fileheader->file_version);
- fileheader->num_headers=BE_32(&fileheader->num_headers);
+ if (bufsize < RMFF_FILEHEADER_SIZE)
+ return -1;
+
+ fileheader->object_id=_X_BE_32(&fileheader->object_id);
+ fileheader->size=_X_BE_32(&fileheader->size);
+ fileheader->object_version=_X_BE_16(&fileheader->object_version);
+ fileheader->file_version=_X_BE_32(&fileheader->file_version);
+ fileheader->num_headers=_X_BE_32(&fileheader->num_headers);
memcpy(buffer, fileheader, 8);
memcpy(&buffer[8], &fileheader->object_version, 2);
memcpy(&buffer[10], &fileheader->file_version, 8);
- fileheader->size=BE_32(&fileheader->size);
- fileheader->object_version=BE_16(&fileheader->object_version);
- fileheader->file_version=BE_32(&fileheader->file_version);
- fileheader->num_headers=BE_32(&fileheader->num_headers);
- fileheader->object_id=BE_32(&fileheader->object_id);
+ fileheader->size=_X_BE_32(&fileheader->size);
+ fileheader->object_version=_X_BE_16(&fileheader->object_version);
+ fileheader->file_version=_X_BE_32(&fileheader->file_version);
+ fileheader->num_headers=_X_BE_32(&fileheader->num_headers);
+ fileheader->object_id=_X_BE_32(&fileheader->object_id);
+
+ return RMFF_FILEHEADER_SIZE;
}
-static void rmff_dump_prop(rmff_prop_t *prop, char *buffer) {
-
- if (!prop) return;
- prop->object_id=BE_32(&prop->object_id);
- prop->size=BE_32(&prop->size);
- prop->object_version=BE_16(&prop->object_version);
- prop->max_bit_rate=BE_32(&prop->max_bit_rate);
- prop->avg_bit_rate=BE_32(&prop->avg_bit_rate);
- prop->max_packet_size=BE_32(&prop->max_packet_size);
- prop->avg_packet_size=BE_32(&prop->avg_packet_size);
- prop->num_packets=BE_32(&prop->num_packets);
- prop->duration=BE_32(&prop->duration);
- prop->preroll=BE_32(&prop->preroll);
- prop->index_offset=BE_32(&prop->index_offset);
- prop->data_offset=BE_32(&prop->data_offset);
- prop->num_streams=BE_16(&prop->num_streams);
- prop->flags=BE_16(&prop->flags);
+static int rmff_dump_prop(rmff_prop_t *prop, uint8_t *buffer, int bufsize) {
+
+ if (!prop) return 0;
+
+ if (bufsize < RMFF_PROPHEADER_SIZE)
+ return -1;
+
+ prop->object_id=_X_BE_32(&prop->object_id);
+ prop->size=_X_BE_32(&prop->size);
+ prop->object_version=_X_BE_16(&prop->object_version);
+ prop->max_bit_rate=_X_BE_32(&prop->max_bit_rate);
+ prop->avg_bit_rate=_X_BE_32(&prop->avg_bit_rate);
+ prop->max_packet_size=_X_BE_32(&prop->max_packet_size);
+ prop->avg_packet_size=_X_BE_32(&prop->avg_packet_size);
+ prop->num_packets=_X_BE_32(&prop->num_packets);
+ prop->duration=_X_BE_32(&prop->duration);
+ prop->preroll=_X_BE_32(&prop->preroll);
+ prop->index_offset=_X_BE_32(&prop->index_offset);
+ prop->data_offset=_X_BE_32(&prop->data_offset);
+ prop->num_streams=_X_BE_16(&prop->num_streams);
+ prop->flags=_X_BE_16(&prop->flags);
memcpy(buffer, prop, 8);
memcpy(&buffer[8], &prop->object_version, 2);
@@ -86,38 +89,44 @@ static void rmff_dump_prop(rmff_prop_t *prop, char *buffer) {
memcpy(&buffer[46], &prop->num_streams, 2);
memcpy(&buffer[48], &prop->flags, 2);
- prop->size=BE_32(&prop->size);
- prop->object_version=BE_16(&prop->object_version);
- prop->max_bit_rate=BE_32(&prop->max_bit_rate);
- prop->avg_bit_rate=BE_32(&prop->avg_bit_rate);
- prop->max_packet_size=BE_32(&prop->max_packet_size);
- prop->avg_packet_size=BE_32(&prop->avg_packet_size);
- prop->num_packets=BE_32(&prop->num_packets);
- prop->duration=BE_32(&prop->duration);
- prop->preroll=BE_32(&prop->preroll);
- prop->index_offset=BE_32(&prop->index_offset);
- prop->data_offset=BE_32(&prop->data_offset);
- prop->num_streams=BE_16(&prop->num_streams);
- prop->flags=BE_16(&prop->flags);
- prop->object_id=BE_32(&prop->object_id);
+ prop->size=_X_BE_32(&prop->size);
+ prop->object_version=_X_BE_16(&prop->object_version);
+ prop->max_bit_rate=_X_BE_32(&prop->max_bit_rate);
+ prop->avg_bit_rate=_X_BE_32(&prop->avg_bit_rate);
+ prop->max_packet_size=_X_BE_32(&prop->max_packet_size);
+ prop->avg_packet_size=_X_BE_32(&prop->avg_packet_size);
+ prop->num_packets=_X_BE_32(&prop->num_packets);
+ prop->duration=_X_BE_32(&prop->duration);
+ prop->preroll=_X_BE_32(&prop->preroll);
+ prop->index_offset=_X_BE_32(&prop->index_offset);
+ prop->data_offset=_X_BE_32(&prop->data_offset);
+ prop->num_streams=_X_BE_16(&prop->num_streams);
+ prop->flags=_X_BE_16(&prop->flags);
+ prop->object_id=_X_BE_32(&prop->object_id);
+
+ return RMFF_PROPHEADER_SIZE;
}
-static void rmff_dump_mdpr(rmff_mdpr_t *mdpr, char *buffer) {
+static int rmff_dump_mdpr(rmff_mdpr_t *mdpr, uint8_t *buffer, int bufsize) {
int s1, s2, s3;
- if (!mdpr) return;
- mdpr->object_id=BE_32(&mdpr->object_id);
- mdpr->size=BE_32(&mdpr->size);
- mdpr->object_version=BE_16(&mdpr->object_version);
- mdpr->stream_number=BE_16(&mdpr->stream_number);
- mdpr->max_bit_rate=BE_32(&mdpr->max_bit_rate);
- mdpr->avg_bit_rate=BE_32(&mdpr->avg_bit_rate);
- mdpr->max_packet_size=BE_32(&mdpr->max_packet_size);
- mdpr->avg_packet_size=BE_32(&mdpr->avg_packet_size);
- mdpr->start_time=BE_32(&mdpr->start_time);
- mdpr->preroll=BE_32(&mdpr->preroll);
- mdpr->duration=BE_32(&mdpr->duration);
+ if (!mdpr) return 0;
+
+ if (bufsize < RMFF_MDPRHEADER_SIZE + mdpr->type_specific_len + mdpr->stream_name_size + mdpr->mime_type_size)
+ return -1;
+
+ mdpr->object_id=_X_BE_32(&mdpr->object_id);
+ mdpr->size=_X_BE_32(&mdpr->size);
+ mdpr->object_version=_X_BE_16(&mdpr->object_version);
+ mdpr->stream_number=_X_BE_16(&mdpr->stream_number);
+ mdpr->max_bit_rate=_X_BE_32(&mdpr->max_bit_rate);
+ mdpr->avg_bit_rate=_X_BE_32(&mdpr->avg_bit_rate);
+ mdpr->max_packet_size=_X_BE_32(&mdpr->max_packet_size);
+ mdpr->avg_packet_size=_X_BE_32(&mdpr->avg_packet_size);
+ mdpr->start_time=_X_BE_32(&mdpr->start_time);
+ mdpr->preroll=_X_BE_32(&mdpr->preroll);
+ mdpr->duration=_X_BE_32(&mdpr->duration);
memcpy(buffer, mdpr, 8);
memcpy(&buffer[8], &mdpr->object_version, 2);
@@ -131,113 +140,138 @@ static void rmff_dump_mdpr(rmff_mdpr_t *mdpr, char *buffer) {
s2=mdpr->mime_type_size;
memcpy(&buffer[42+s1], mdpr->mime_type, s2);
- mdpr->type_specific_len=BE_32(&mdpr->type_specific_len);
+ mdpr->type_specific_len=_X_BE_32(&mdpr->type_specific_len);
memcpy(&buffer[42+s1+s2], &mdpr->type_specific_len, 4);
- mdpr->type_specific_len=BE_32(&mdpr->type_specific_len);
+ mdpr->type_specific_len=_X_BE_32(&mdpr->type_specific_len);
s3=mdpr->type_specific_len;
memcpy(&buffer[46+s1+s2], mdpr->type_specific_data, s3);
- mdpr->size=BE_32(&mdpr->size);
- mdpr->stream_number=BE_16(&mdpr->stream_number);
- mdpr->max_bit_rate=BE_32(&mdpr->max_bit_rate);
- mdpr->avg_bit_rate=BE_32(&mdpr->avg_bit_rate);
- mdpr->max_packet_size=BE_32(&mdpr->max_packet_size);
- mdpr->avg_packet_size=BE_32(&mdpr->avg_packet_size);
- mdpr->start_time=BE_32(&mdpr->start_time);
- mdpr->preroll=BE_32(&mdpr->preroll);
- mdpr->duration=BE_32(&mdpr->duration);
- mdpr->object_id=BE_32(&mdpr->object_id);
-
+ mdpr->size=_X_BE_32(&mdpr->size);
+ mdpr->stream_number=_X_BE_16(&mdpr->stream_number);
+ mdpr->max_bit_rate=_X_BE_32(&mdpr->max_bit_rate);
+ mdpr->avg_bit_rate=_X_BE_32(&mdpr->avg_bit_rate);
+ mdpr->max_packet_size=_X_BE_32(&mdpr->max_packet_size);
+ mdpr->avg_packet_size=_X_BE_32(&mdpr->avg_packet_size);
+ mdpr->start_time=_X_BE_32(&mdpr->start_time);
+ mdpr->preroll=_X_BE_32(&mdpr->preroll);
+ mdpr->duration=_X_BE_32(&mdpr->duration);
+ mdpr->object_id=_X_BE_32(&mdpr->object_id);
+
+ return RMFF_MDPRHEADER_SIZE + s1 + s2 + s3;
}
-static void rmff_dump_cont(rmff_cont_t *cont, char *buffer) {
+static int rmff_dump_cont(rmff_cont_t *cont, uint8_t *buffer, int bufsize) {
int p;
- if (!cont) return;
- cont->object_id=BE_32(&cont->object_id);
- cont->size=BE_32(&cont->size);
- cont->object_version=BE_16(&cont->object_version);
+ if (!cont) return 0;
+
+ if (bufsize < RMFF_CONTHEADER_SIZE + cont->title_len + cont->author_len +
+ cont->copyright_len + cont->comment_len)
+ return -1;
+
+ cont->object_id=_X_BE_32(&cont->object_id);
+ cont->size=_X_BE_32(&cont->size);
+ cont->object_version=_X_BE_16(&cont->object_version);
memcpy(buffer, cont, 8);
memcpy(&buffer[8], &cont->object_version, 2);
- cont->title_len=BE_16(&cont->title_len);
+ cont->title_len=_X_BE_16(&cont->title_len);
memcpy(&buffer[10], &cont->title_len, 2);
- cont->title_len=BE_16(&cont->title_len);
+ cont->title_len=_X_BE_16(&cont->title_len);
memcpy(&buffer[12], cont->title, cont->title_len);
p=12+cont->title_len;
- cont->author_len=BE_16(&cont->author_len);
+ cont->author_len=_X_BE_16(&cont->author_len);
memcpy(&buffer[p], &cont->author_len, 2);
- cont->author_len=BE_16(&cont->author_len);
+ cont->author_len=_X_BE_16(&cont->author_len);
memcpy(&buffer[p+2], cont->author, cont->author_len);
p+=2+cont->author_len;
- cont->copyright_len=BE_16(&cont->copyright_len);
+ cont->copyright_len=_X_BE_16(&cont->copyright_len);
memcpy(&buffer[p], &cont->copyright_len, 2);
- cont->copyright_len=BE_16(&cont->copyright_len);
+ cont->copyright_len=_X_BE_16(&cont->copyright_len);
memcpy(&buffer[p+2], cont->copyright, cont->copyright_len);
p+=2+cont->copyright_len;
- cont->comment_len=BE_16(&cont->comment_len);
+ cont->comment_len=_X_BE_16(&cont->comment_len);
memcpy(&buffer[p], &cont->comment_len, 2);
- cont->comment_len=BE_16(&cont->comment_len);
+ cont->comment_len=_X_BE_16(&cont->comment_len);
memcpy(&buffer[p+2], cont->comment, cont->comment_len);
- cont->size=BE_32(&cont->size);
- cont->object_version=BE_16(&cont->object_version);
- cont->object_id=BE_32(&cont->object_id);
+ cont->size=_X_BE_32(&cont->size);
+ cont->object_version=_X_BE_16(&cont->object_version);
+ cont->object_id=_X_BE_32(&cont->object_id);
+
+ return RMFF_CONTHEADER_SIZE + cont->title_len + cont->author_len +
+ cont->copyright_len + cont->comment_len;
}
-static void rmff_dump_dataheader(rmff_data_t *data, char *buffer) {
+static int rmff_dump_dataheader(rmff_data_t *data, uint8_t *buffer, int bufsize) {
+
+ if (!data) return 0;
+
+ if (bufsize < RMFF_DATAHEADER_SIZE)
+ return -1;
- if (!data) return;
- data->object_id=BE_32(&data->object_id);
- data->size=BE_32(&data->size);
- data->object_version=BE_16(&data->object_version);
- data->num_packets=BE_32(&data->num_packets);
- data->next_data_header=BE_32(&data->next_data_header);
+ data->object_id=_X_BE_32(&data->object_id);
+ data->size=_X_BE_32(&data->size);
+ data->object_version=_X_BE_16(&data->object_version);
+ data->num_packets=_X_BE_32(&data->num_packets);
+ data->next_data_header=_X_BE_32(&data->next_data_header);
memcpy(buffer, data, 8);
memcpy(&buffer[8], &data->object_version, 2);
memcpy(&buffer[10], &data->num_packets, 8);
- data->num_packets=BE_32(&data->num_packets);
- data->next_data_header=BE_32(&data->next_data_header);
- data->size=BE_32(&data->size);
- data->object_version=BE_16(&data->object_version);
- data->object_id=BE_32(&data->object_id);
+ data->num_packets=_X_BE_32(&data->num_packets);
+ data->next_data_header=_X_BE_32(&data->next_data_header);
+ data->size=_X_BE_32(&data->size);
+ data->object_version=_X_BE_16(&data->object_version);
+ data->object_id=_X_BE_32(&data->object_id);
+
+ return RMFF_DATAHEADER_SIZE;
}
-int rmff_dump_header(rmff_header_t *h, char *buffer, int max) {
+int rmff_dump_header(rmff_header_t *h, void *buf_gen, int max) {
+ uint8_t *buffer = buf_gen;
- int written=0;
+ int written=0, size;
rmff_mdpr_t **stream=h->streams;
- rmff_dump_fileheader(h->fileheader, &buffer[written]);
- written+=h->fileheader->size;
- rmff_dump_prop(h->prop, &buffer[written]);
- written+=h->prop->size;
- rmff_dump_cont(h->cont, &buffer[written]);
- written+=h->cont->size;
+ if ((size=rmff_dump_fileheader(h->fileheader, &buffer[written], max)) < 0)
+ return -1;
+ written+=size;
+ max -= size;
+ if ((size=rmff_dump_prop(h->prop, &buffer[written], max)) < 0)
+ return -1;
+ written+=size;
+ max -= size;
+ if ((size=rmff_dump_cont(h->cont, &buffer[written], max)) < 0)
+ return -1;
+ written+=size;
+ max -= size;
if (stream)
{
while(*stream)
{
- rmff_dump_mdpr(*stream, &buffer[written]);
- written+=(*stream)->size;
+ if ((size=rmff_dump_mdpr(*stream, &buffer[written], max)) < 0)
+ return -1;
+ written+=size;
+ max -= size;
stream++;
}
}
- rmff_dump_dataheader(h->data, &buffer[written]);
- written+=18;
+ if ((size=rmff_dump_dataheader(h->data, &buffer[written], max)) < 0)
+ return -1;
+ written+=size;
return written;
}
-void rmff_dump_pheader(rmff_pheader_t *h, char *data) {
+void rmff_dump_pheader(rmff_pheader_t *h, uint8_t *data) {
data[0]=(h->object_version>>8) & 0xff;
data[1]=h->object_version & 0xff;
@@ -257,15 +291,15 @@ static rmff_fileheader_t *rmff_scan_fileheader(const char *data) {
rmff_fileheader_t *fileheader = malloc(sizeof(rmff_fileheader_t));
- fileheader->object_id=BE_32(data);
- fileheader->size=BE_32(&data[4]);
- fileheader->object_version=BE_16(&data[8]);
+ fileheader->object_id=_X_BE_32(data);
+ fileheader->size=_X_BE_32(&data[4]);
+ fileheader->object_version=_X_BE_16(&data[8]);
if (fileheader->object_version != 0)
{
lprintf("warning: unknown object version in .RMF: 0x%04x\n", fileheader->object_version);
}
- fileheader->file_version=BE_32(&data[10]);
- fileheader->num_headers=BE_32(&data[14]);
+ fileheader->file_version=_X_BE_32(&data[10]);
+ fileheader->num_headers=_X_BE_32(&data[14]);
return fileheader;
}
@@ -274,24 +308,24 @@ static rmff_prop_t *rmff_scan_prop(const char *data) {
rmff_prop_t *prop = malloc(sizeof(rmff_prop_t));
- prop->object_id=BE_32(data);
- prop->size=BE_32(&data[4]);
- prop->object_version=BE_16(&data[8]);
+ prop->object_id=_X_BE_32(data);
+ prop->size=_X_BE_32(&data[4]);
+ prop->object_version=_X_BE_16(&data[8]);
if (prop->object_version != 0)
{
lprintf("warning: unknown object version in PROP: 0x%04x\n", prop->object_version);
}
- prop->max_bit_rate=BE_32(&data[10]);
- prop->avg_bit_rate=BE_32(&data[14]);
- prop->max_packet_size=BE_32(&data[18]);
- prop->avg_packet_size=BE_32(&data[22]);
- prop->num_packets=BE_32(&data[26]);
- prop->duration=BE_32(&data[30]);
- prop->preroll=BE_32(&data[34]);
- prop->index_offset=BE_32(&data[38]);
- prop->data_offset=BE_32(&data[42]);
- prop->num_streams=BE_16(&data[46]);
- prop->flags=BE_16(&data[48]);
+ prop->max_bit_rate=_X_BE_32(&data[10]);
+ prop->avg_bit_rate=_X_BE_32(&data[14]);
+ prop->max_packet_size=_X_BE_32(&data[18]);
+ prop->avg_packet_size=_X_BE_32(&data[22]);
+ prop->num_packets=_X_BE_32(&data[26]);
+ prop->duration=_X_BE_32(&data[30]);
+ prop->preroll=_X_BE_32(&data[34]);
+ prop->index_offset=_X_BE_32(&data[38]);
+ prop->data_offset=_X_BE_32(&data[42]);
+ prop->num_streams=_X_BE_16(&data[46]);
+ prop->flags=_X_BE_16(&data[48]);
return prop;
}
@@ -300,36 +334,30 @@ static rmff_mdpr_t *rmff_scan_mdpr(const char *data) {
rmff_mdpr_t *mdpr = malloc(sizeof(rmff_mdpr_t));
- mdpr->object_id=BE_32(data);
- mdpr->size=BE_32(&data[4]);
- mdpr->object_version=BE_16(&data[8]);
+ mdpr->object_id=_X_BE_32(data);
+ mdpr->size=_X_BE_32(&data[4]);
+ mdpr->object_version=_X_BE_16(&data[8]);
if (mdpr->object_version != 0)
{
lprintf("warning: unknown object version in MDPR: 0x%04x\n", mdpr->object_version);
}
- mdpr->stream_number=BE_16(&data[10]);
- mdpr->max_bit_rate=BE_32(&data[12]);
- mdpr->avg_bit_rate=BE_32(&data[16]);
- mdpr->max_packet_size=BE_32(&data[20]);
- mdpr->avg_packet_size=BE_32(&data[24]);
- mdpr->start_time=BE_32(&data[28]);
- mdpr->preroll=BE_32(&data[32]);
- mdpr->duration=BE_32(&data[36]);
+ mdpr->stream_number=_X_BE_16(&data[10]);
+ mdpr->max_bit_rate=_X_BE_32(&data[12]);
+ mdpr->avg_bit_rate=_X_BE_32(&data[16]);
+ mdpr->max_packet_size=_X_BE_32(&data[20]);
+ mdpr->avg_packet_size=_X_BE_32(&data[24]);
+ mdpr->start_time=_X_BE_32(&data[28]);
+ mdpr->preroll=_X_BE_32(&data[32]);
+ mdpr->duration=_X_BE_32(&data[36]);
mdpr->stream_name_size=data[40];
- mdpr->stream_name = malloc(sizeof(char)*(mdpr->stream_name_size+1));
- memcpy(mdpr->stream_name, &data[41], mdpr->stream_name_size);
- mdpr->stream_name[mdpr->stream_name_size]=0;
+ mdpr->stream_name = xine_memdup0(&data[41], mdpr->stream_name_size);
mdpr->mime_type_size=data[41+mdpr->stream_name_size];
- mdpr->mime_type = malloc(sizeof(char)*(mdpr->mime_type_size+1));
- memcpy(mdpr->mime_type, &data[42+mdpr->stream_name_size], mdpr->mime_type_size);
- mdpr->mime_type[mdpr->mime_type_size]=0;
+ mdpr->mime_type = xine_memdup0(&data[42+mdpr->stream_name_size], mdpr->mime_type_size);
- mdpr->type_specific_len=BE_32(&data[42+mdpr->stream_name_size+mdpr->mime_type_size]);
- mdpr->type_specific_data = malloc(sizeof(char)*(mdpr->type_specific_len));
- memcpy(mdpr->type_specific_data,
- &data[46+mdpr->stream_name_size+mdpr->mime_type_size], mdpr->type_specific_len);
+ mdpr->type_specific_len=_X_BE_32(&data[42+mdpr->stream_name_size+mdpr->mime_type_size]);
+ mdpr->type_specific_data = xine_memdup(&data[46+mdpr->stream_name_size+mdpr->mime_type_size], mdpr->type_specific_len);
return mdpr;
}
@@ -339,32 +367,25 @@ static rmff_cont_t *rmff_scan_cont(const char *data) {
rmff_cont_t *cont = malloc(sizeof(rmff_cont_t));
int pos;
- cont->object_id=BE_32(data);
- cont->size=BE_32(&data[4]);
- cont->object_version=BE_16(&data[8]);
+ cont->object_id=_X_BE_32(data);
+ cont->size=_X_BE_32(&data[4]);
+ cont->object_version=_X_BE_16(&data[8]);
if (cont->object_version != 0)
{
lprintf("warning: unknown object version in CONT: 0x%04x\n", cont->object_version);
}
- cont->title_len=BE_16(&data[10]);
- cont->title = malloc(sizeof(char)*(cont->title_len+1));
- memcpy(cont->title, &data[12], cont->title_len);
- cont->title[cont->title_len]=0;
+ cont->title_len=_X_BE_16(&data[10]);
+ cont->title = xine_memdup0(&data[12], cont->title_len);
pos=cont->title_len+12;
- cont->author_len=BE_16(&data[pos]);
- cont->author = malloc(sizeof(char)*(cont->author_len+1));
- memcpy(cont->author, &data[pos+2], cont->author_len);
- cont->author[cont->author_len]=0;
+ cont->author_len=_X_BE_16(&data[pos]);
+ cont->author = xine_memdup0(&data[pos+2], cont->author_len);
pos=pos+2+cont->author_len;
- cont->copyright_len=BE_16(&data[pos]);
- cont->copyright = malloc(sizeof(char)*(cont->copyright_len+1));
- memcpy(cont->copyright, &data[pos+2], cont->copyright_len);
+ cont->copyright_len=_X_BE_16(&data[pos]);
+ cont->copyright = xine_memdup0(&data[pos+2], cont->copyright_len);
cont->copyright[cont->copyright_len]=0;
pos=pos+2+cont->copyright_len;
- cont->comment_len=BE_16(&data[pos]);
- cont->comment = malloc(sizeof(char)*(cont->comment_len+1));
- memcpy(cont->comment, &data[pos+2], cont->comment_len);
- cont->comment[cont->comment_len]=0;
+ cont->comment_len=_X_BE_16(&data[pos]);
+ cont->comment = xine_memdup0(&data[pos+2], cont->comment_len);
return cont;
}
@@ -373,15 +394,15 @@ static rmff_data_t *rmff_scan_dataheader(const char *data) {
rmff_data_t *dh = malloc(sizeof(rmff_data_t));
- dh->object_id=BE_32(data);
- dh->size=BE_32(&data[4]);
- dh->object_version=BE_16(&data[8]);
+ dh->object_id=_X_BE_32(data);
+ dh->size=_X_BE_32(&data[4]);
+ dh->object_version=_X_BE_16(&data[8]);
if (dh->object_version != 0)
{
lprintf("warning: unknown object version in DATA: 0x%04x\n", dh->object_version);
}
- dh->num_packets=BE_32(&data[10]);
- dh->next_data_header=BE_32(&data[14]);
+ dh->num_packets=_X_BE_32(&data[10]);
+ dh->next_data_header=_X_BE_32(&data[14]);
return dh;
}
@@ -400,7 +421,7 @@ rmff_header_t *rmff_scan_header(const char *data) {
header->cont=NULL;
header->data=NULL;
- chunk_type = BE_32(ptr);
+ chunk_type = _X_BE_32(ptr);
if (chunk_type != RMF_TAG)
{
lprintf("rmff: not an real media file header (.RMF tag not found).\n");
@@ -410,13 +431,10 @@ rmff_header_t *rmff_scan_header(const char *data) {
header->fileheader=rmff_scan_fileheader(ptr);
ptr += header->fileheader->size;
- header->streams = malloc(sizeof(rmff_mdpr_t*)*(header->fileheader->num_headers));
- for (i=0; i<header->fileheader->num_headers; i++) {
- header->streams[i]=NULL;
- }
+ header->streams = calloc(header->fileheader->num_headers, sizeof(rmff_mdpr_t*));
for (i=1; i<header->fileheader->num_headers; i++) {
- chunk_type = BE_32(ptr);
+ chunk_type = _X_BE_32(ptr);
if (ptr[0] == 0)
{
@@ -457,6 +475,7 @@ rmff_header_t *rmff_scan_header(const char *data) {
return header;
}
+#if 0
rmff_header_t *rmff_scan_header_stream(int fd) {
rmff_header_t *header;
@@ -468,8 +487,8 @@ rmff_header_t *rmff_scan_header_stream(int fd) {
do {
xine_buffer_ensure_size(buf, index+8);
read(fd, buf+index, 8);
- chunk_type=BE_32(buf+index); index+=4;
- chunk_size=BE_32(buf+index); index+=4;
+ chunk_type=_X_BE_32(buf+index); index+=4;
+ chunk_size=_X_BE_32(buf+index); index+=4;
switch (chunk_type) {
case DATA_TAG:
@@ -500,13 +519,14 @@ rmff_header_t *rmff_scan_header_stream(int fd) {
void rmff_scan_pheader(rmff_pheader_t *h, char *data) {
- h->object_version=BE_16(data);
- h->length=BE_16(data+2);
- h->stream_number=BE_16(data+4);
- h->timestamp=BE_32(data+6);
+ h->object_version=_X_BE_16(data);
+ h->length=_X_BE_16(data+2);
+ h->stream_number=_X_BE_16(data+4);
+ h->timestamp=_X_BE_32(data+6);
h->reserved=(uint8_t)data[10];
h->flags=(uint8_t)data[11];
}
+#endif
rmff_fileheader_t *rmff_new_fileheader(uint32_t num_headers) {
@@ -593,8 +613,7 @@ rmff_mdpr_t *rmff_new_mdpr(
mdpr->mime_type_size=strlen(mime_type);
}
mdpr->type_specific_len=type_specific_len;
- mdpr->type_specific_data = malloc(sizeof(char)*type_specific_len);
- memcpy(mdpr->type_specific_data,type_specific_data,type_specific_len);
+ mdpr->type_specific_data = xine_memdup(type_specific_data,type_specific_len);
mdpr->mlti_data=NULL;
mdpr->size=mdpr->stream_name_size+mdpr->mime_type_size+mdpr->type_specific_len+46;
@@ -653,6 +672,7 @@ rmff_data_t *rmff_new_dataheader(uint32_t num_packets, uint32_t next_data_header
return data;
}
+#if 0
void rmff_print_header(rmff_header_t *h) {
rmff_mdpr_t **stream;
@@ -719,6 +739,7 @@ void rmff_print_header(rmff_header_t *h) {
printf("next DATA : 0x%08x\n", h->data->next_data_header);
}
}
+#endif
void rmff_fix_header(rmff_header_t *h) {
@@ -827,6 +848,7 @@ void rmff_fix_header(rmff_header_t *h) {
}
}
+#if 0
int rmff_get_header_size(rmff_header_t *h) {
if (!h) return 0;
@@ -866,3 +888,4 @@ void rmff_free_header(rmff_header_t *h) {
}
free(h);
}
+#endif
diff --git a/src/input/libreal/rmff.h b/src/input/libreal/rmff.h
index 4f33d93a5..3fe3af284 100644
--- a/src/input/libreal/rmff.h
+++ b/src/input/libreal/rmff.h
@@ -15,9 +15,7 @@
*
* 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-1307, USA
- *
- * $Id: rmff.h,v 1.5 2004/04/06 19:20:16 valtri Exp $
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
*
* some functions for real media file headers
* adopted from joschkas real tools
@@ -41,6 +39,12 @@
#define RMFF_HEADER_SIZE 0x12
+#define RMFF_FILEHEADER_SIZE 18
+#define RMFF_PROPHEADER_SIZE 50
+#define RMFF_MDPRHEADER_SIZE 46
+#define RMFF_CONTHEADER_SIZE 18
+#define RMFF_DATAHEADER_SIZE 18
+
#define FOURCC_TAG( ch0, ch1, ch2, ch3 ) \
(((long)(unsigned char)(ch3) ) | \
( (long)(unsigned char)(ch2) << 8 ) | \
@@ -218,6 +222,7 @@ rmff_data_t *rmff_new_dataheader(
*/
rmff_header_t *rmff_scan_header(const char *data);
+#if 0
/*
* scans a data packet header. Notice, that this function does not allocate
* the header struct itself.
@@ -233,30 +238,35 @@ rmff_header_t *rmff_scan_header_stream(int fd);
* prints header information in human readible form to stdout
*/
void rmff_print_header(rmff_header_t *h);
+#endif
/*
* does some checks and fixes header if possible
*/
void rmff_fix_header(rmff_header_t *h);
+#if 0
/*
* returns the size of the header (incl. first data-header)
*/
int rmff_get_header_size(rmff_header_t *h);
+#endif
/*
* dumps the header <h> to <buffer>. <max> is the size of <buffer>
*/
-int rmff_dump_header(rmff_header_t *h, char *buffer, int max);
+int rmff_dump_header(rmff_header_t *h, void *buffer, int max);
/*
* dumps a packet header
*/
-void rmff_dump_pheader(rmff_pheader_t *h, char *data);
+void rmff_dump_pheader(rmff_pheader_t *h, uint8_t *data);
+#if 0
/*
* frees a header struct
*/
void rmff_free_header(rmff_header_t *h);
+#endif
#endif
diff --git a/src/input/libreal/sdpplin.c b/src/input/libreal/sdpplin.c
index 019237243..d58a3d1fe 100644
--- a/src/input/libreal/sdpplin.c
+++ b/src/input/libreal/sdpplin.c
@@ -15,12 +15,9 @@
*
* 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-1307, USA
- *
- * $Id: sdpplin.c,v 1.8 2006/12/25 16:21:56 dgp85 Exp $
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
*
* sdp/sdpplin parser.
- *
*/
#define LOG_MODULE "sdpplin"
@@ -32,7 +29,7 @@
#include "rmff.h"
#include "rtsp.h"
#include "sdpplin.h"
-#include "xineutils.h"
+#include <xine/xineutils.h>
/*
* Decodes base64 strings (based upon b64 package)
@@ -202,8 +199,7 @@ static sdpplin_stream_t *sdpplin_parse_stream(char **data) {
if(filter(*data,"a=OpaqueData:buffer;",&buf)) {
decoded = b64_decode(buf, decoded, &(desc->mlti_data_size));
if ( decoded != NULL ) {
- desc->mlti_data = malloc(sizeof(char)*desc->mlti_data_size);
- memcpy(desc->mlti_data, decoded, desc->mlti_data_size);
+ desc->mlti_data = xine_memdup(decoded, desc->mlti_data_size);
handled=1;
*data=nl(*data);
lprintf("mlti_data_size: %i\n", desc->mlti_data_size);
@@ -297,7 +293,7 @@ sdpplin_t *sdpplin_parse(char *data) {
if(filter(data,"a=StreamCount:integer;",&buf)) {
desc->stream_count=atoi(buf);
- desc->stream = malloc(sizeof(sdpplin_stream_t*)*desc->stream_count);
+ desc->stream = calloc(desc->stream_count, sizeof(sdpplin_stream_t*));
handled=1;
data=nl(data);
}
diff --git a/src/input/libreal/sdpplin.h b/src/input/libreal/sdpplin.h
index ae03cf0cf..cb3b434d4 100644
--- a/src/input/libreal/sdpplin.h
+++ b/src/input/libreal/sdpplin.h
@@ -15,12 +15,9 @@
*
* 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-1307, USA
- *
- * $Id: sdpplin.h,v 1.2 2003/12/09 00:02:30 f1rmb Exp $
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
*
* sdp/sdpplin parser.
- *
*/
#ifndef HAVE_SDPPLIN_H