summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/demuxers/demux_matroska.c36
-rw-r--r--src/demuxers/demux_matroska.h1
-rw-r--r--src/demuxers/demux_qt.c2
-rw-r--r--src/demuxers/demux_ts.c6
-rw-r--r--src/demuxers/matroska.h2
-rw-r--r--src/input/input_cdda.c2
-rw-r--r--src/input/vcd/xineplug_inp_vcd.c4
-rw-r--r--src/libreal/xine_real_video_decoder.c2
-rw-r--r--src/post/planar/noise.c8
-rw-r--r--src/spu_dec/sputext_demuxer.c5
-rw-r--r--src/video_dec/image.c3
-rw-r--r--src/video_out/video_out_directx.c29
-rw-r--r--src/xine-engine/Makefile.am2
-rw-r--r--src/xine-engine/configfile.c4
-rw-r--r--src/xine-engine/events.c1
-rw-r--r--src/xine-engine/info_helper.c5
-rw-r--r--src/xine-engine/xine.c8
-rw-r--r--src/xine-utils/mangle.h9
-rw-r--r--src/xine-utils/memcpy.c22
-rw-r--r--src/xine-utils/xmlparser.c2
20 files changed, 110 insertions, 43 deletions
diff --git a/src/demuxers/demux_matroska.c b/src/demuxers/demux_matroska.c
index 2c0b7df4f..6392aaac0 100644
--- a/src/demuxers/demux_matroska.c
+++ b/src/demuxers/demux_matroska.c
@@ -304,8 +304,12 @@ static int parse_content_compression (demux_matroska_t *this, matroska_track_t *
}
break;
case MATROSKA_ID_CE_COMPSETTINGS:
- lprintf("ContentCompSettings (UNSUPPORTED)\n");
- if (!ebml_skip(ebml, &elem))
+ lprintf("ContentCompSettings\n");
+ track->compress_settings = calloc(1, elem.len);
+ track->compress_len = elem.len;
+ if (elem.len > this->compress_maxlen)
+ this->compress_maxlen = elem.len;
+ if(!ebml_read_binary(ebml, &elem, track->compress_settings))
return 0;
break;
default:
@@ -1785,8 +1789,8 @@ static int find_track_by_id(demux_matroska_t *this, int track_num,
}
-static int read_block_data (demux_matroska_t *this, size_t len) {
- alloc_block_data(this, len);
+static int read_block_data (demux_matroska_t *this, size_t len, size_t offset) {
+ alloc_block_data(this, len + offset);
/* block datas */
if (! this->block_data) {
@@ -1794,7 +1798,7 @@ static int read_block_data (demux_matroska_t *this, size_t len) {
"demux_matroska: memory allocation error\n");
return 0;
}
- if (this->input->read(this->input, this->block_data, len) != len) {
+ if (this->input->read(this->input, this->block_data + offset, len) != len) {
off_t pos = this->input->get_current_pos(this->input);
xprintf(this->stream->xine, XINE_VERBOSITY_LOG,
"demux_matroska: read error at position %" PRIdMAX "\n",
@@ -1824,8 +1828,9 @@ static int parse_block (demux_matroska_t *this, size_t block_size,
int16_t timecode_diff;
int64_t pts, xduration;
int decoder_flags = 0;
+ size_t headers_len = 0;
- data = this->block_data;
+ data = this->block_data + this->compress_maxlen;
if (!(num_len = parse_ebml_uint(this, data, &track_num)))
return 0;
data += num_len;
@@ -1878,12 +1883,21 @@ static int parse_block (demux_matroska_t *this, size_t block_size,
decoder_flags |= BUF_FLAG_PREVIEW;
}
+ if (track->compress_algo == MATROSKA_COMPRESS_HEADER_STRIP)
+ headers_len = track->compress_len;
+
if (lacing == MATROSKA_NO_LACING) {
size_t block_size_left;
lprintf("no lacing\n");
- block_size_left = (this->block_data + block_size) - data;
- lprintf("size: %d, block_size: %u\n", block_size_left, block_size);
+ block_size_left = (this->block_data + block_size + this->compress_maxlen) - data;
+ lprintf("size: %d, block_size: %u, block_offset: %u\n", block_size_left, block_size, this->compress_maxlen);
+
+ if (headers_len) {
+ data -= headers_len;
+ xine_fast_memcpy(data, track->compress_settings, headers_len);
+ block_size_left += headers_len;
+ }
if (track->handle_content != NULL) {
track->handle_content((demux_plugin_t *)this, track,
@@ -1913,7 +1927,7 @@ static int parse_block (demux_matroska_t *this, size_t block_size,
"demux_matroska: too many frames: %d\n", lace_num);
return 0;
}
- block_size_left = this->block_data + block_size - data;
+ block_size_left = this->block_data + block_size + this->compress_maxlen - data;
switch (lacing) {
case MATROSKA_XIPH_LACING: {
@@ -2046,7 +2060,7 @@ static int parse_simpleblock(demux_matroska_t *this, size_t block_len, uint64_t
if( file_len )
normpos = (int) ( (double) block_pos * 65535 / file_len );
- if (!read_block_data(this, block_len))
+ if (!read_block_data(this, block_len, this->compress_maxlen))
return 0;
has_block = 1;
@@ -2085,7 +2099,7 @@ static int parse_block_group(demux_matroska_t *this,
if( file_len )
normpos = (int) ( (double) block_pos * 65535 / file_len );
- if (!read_block_data(this, elem.len))
+ if (!read_block_data(this, elem.len, this->compress_maxlen))
return 0;
has_block = 1;
diff --git a/src/demuxers/demux_matroska.h b/src/demuxers/demux_matroska.h
index fe1b7f6cf..670827598 100644
--- a/src/demuxers/demux_matroska.h
+++ b/src/demuxers/demux_matroska.h
@@ -96,6 +96,7 @@ typedef struct {
int num_sub_tracks;
matroska_track_t *tracks[MAX_STREAMS];
+ size_t compress_maxlen;
/* maintain editions, number and capacity */
int num_editions, cap_editions;
diff --git a/src/demuxers/demux_qt.c b/src/demuxers/demux_qt.c
index c944e3c9e..c342cc381 100644
--- a/src/demuxers/demux_qt.c
+++ b/src/demuxers/demux_qt.c
@@ -457,7 +457,7 @@ static inline void dump_moov_atom(unsigned char *moov_atom, int moov_atom_size)
FILE *f;
- f = fopen(RAW_MOOV_FILENAME, "w");
+ f = fopen(RAW_MOOV_FILENAME, "wb");
if (!f) {
perror(RAW_MOOV_FILENAME);
return;
diff --git a/src/demuxers/demux_ts.c b/src/demuxers/demux_ts.c
index b038e52ef..49880f9a2 100644
--- a/src/demuxers/demux_ts.c
+++ b/src/demuxers/demux_ts.c
@@ -2344,6 +2344,7 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen,
demux_ts_t *this;
int i;
int hdmv = -1;
+ int size;
switch (stream->content_detection_method) {
@@ -2352,12 +2353,13 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen,
int i, j;
int try_again, ts_detected;
- if (!_x_demux_read_header(input, buf, sizeof(buf)))
+ size = _x_demux_read_header(input, buf, sizeof(buf));
+ if (size < PKT_SIZE)
return NULL;
if (detect_ts(buf, sizeof(buf), PKT_SIZE))
hdmv = 0;
- else if (detect_ts(buf, sizeof(buf), PKT_SIZE+4))
+ else if (size >= PKT_SIZE + 4 && detect_ts(buf, sizeof(buf), PKT_SIZE+4))
hdmv = 1;
else
return NULL;
diff --git a/src/demuxers/matroska.h b/src/demuxers/matroska.h
index 23e115edc..2fad31ce4 100644
--- a/src/demuxers/matroska.h
+++ b/src/demuxers/matroska.h
@@ -272,6 +272,8 @@ struct matroska_track_s {
uint32_t codec_private_len;
int default_flag;
uint32_t compress_algo;
+ uint32_t compress_len;
+ char *compress_settings;
uint32_t buf_type;
fifo_buffer_t *fifo;
diff --git a/src/input/input_cdda.c b/src/input/input_cdda.c
index 31bc51bc2..05250f51c 100644
--- a/src/input/input_cdda.c
+++ b/src/input/input_cdda.c
@@ -1280,7 +1280,7 @@ static void _cdda_mkdir_safe(xine_t *xine, char *path) {
hList = FindFirstFile(szDir, &FileData);
if (hList == INVALID_HANDLE_VALUE)
{
- if(_mkdir(path) != 0) {
+ if(mkdir(path, 0) != 0) {
xprintf(xine, XINE_VERBOSITY_DEBUG, "input_cdda: mkdir(%s) failed.\n", path);
return;
}
diff --git a/src/input/vcd/xineplug_inp_vcd.c b/src/input/vcd/xineplug_inp_vcd.c
index acd4775f4..1f6a885db 100644
--- a/src/input/vcd/xineplug_inp_vcd.c
+++ b/src/input/vcd/xineplug_inp_vcd.c
@@ -1500,6 +1500,10 @@ vcd_class_dispose (input_class_t *this_gen) {
dbg_print((INPUT_DBG_CALL|INPUT_DBG_EXT), "called\n");
vcd_close(class);
+ free(class->vcd_device);
+ free(my_vcd.v_config.title_format);
+ free(my_vcd.v_config.comment_format);
+ free(class);
}
/* Update the xine player title text. */
diff --git a/src/libreal/xine_real_video_decoder.c b/src/libreal/xine_real_video_decoder.c
index a4c40668b..ce717fe81 100644
--- a/src/libreal/xine_real_video_decoder.c
+++ b/src/libreal/xine_real_video_decoder.c
@@ -380,7 +380,7 @@ static void realdec_decode_data (video_decoder_t *this_gen, buf_element_t *buf)
xine_hexdump (this->chunk_buffer, this->chunk_buffer_size);
printf ("libreal: transform_in:\n");
- xine_hexdump ((uint8_t *) &transform_in, sizeof(rv_xform_in_t));
+ xine_hexdump ((uint8_t *) &transform_in, sizeof(transform_in_t));
printf ("libreal: chunk_table:\n");
xine_hexdump ((uint8_t *) buf->decoder_info_ptr[2],
diff --git a/src/post/planar/noise.c b/src/post/planar/noise.c
index 015925138..471670fb9 100644
--- a/src/post/planar/noise.c
+++ b/src/post/planar/noise.c
@@ -39,8 +39,10 @@
#ifdef ARCH_X86_64
# define REG_a "rax"
+# define intarch_t int64_t
#else
# define REG_a "eax"
+# define intarch_t int32_t
#endif
#define MAX_NOISE 4096
@@ -155,7 +157,7 @@ static inline void lineNoise_C(uint8_t *dst, uint8_t *src, int8_t *noise, int le
#ifdef ARCH_X86
static inline void lineNoise_MMX(uint8_t *dst, uint8_t *src, int8_t *noise, int len, int shift){
- long mmx_len= len&(~7);
+ intarch_t mmx_len= len&(~7);
noise+=shift;
asm volatile(
@@ -182,7 +184,7 @@ static inline void lineNoise_MMX(uint8_t *dst, uint8_t *src, int8_t *noise, int
//duplicate of previous except movntq
static inline void lineNoise_MMX2(uint8_t *dst, uint8_t *src, int8_t *noise, int len, int shift){
- long mmx_len= len&(~7);
+ intarch_t mmx_len= len&(~7);
noise+=shift;
asm volatile(
@@ -225,7 +227,7 @@ static inline void lineNoiseAvg_C(uint8_t *dst, uint8_t *src, int len, int8_t **
#ifdef ARCH_X86
static inline void lineNoiseAvg_MMX(uint8_t *dst, uint8_t *src, int len, int8_t **shift){
- long mmx_len= len&(~7);
+ intarch_t mmx_len= len&(~7);
asm volatile(
"mov %5, %%"REG_a" \n\t"
diff --git a/src/spu_dec/sputext_demuxer.c b/src/spu_dec/sputext_demuxer.c
index 0b89d03c8..a8e252c30 100644
--- a/src/spu_dec/sputext_demuxer.c
+++ b/src/spu_dec/sputext_demuxer.c
@@ -1374,7 +1374,8 @@ static demux_plugin_t *open_demux_plugin (demux_class_t *class_gen, xine_stream_
(strncasecmp(ending, ".sub", 4) != 0) &&
(strncasecmp(ending, ".srt", 4) != 0) &&
(strncasecmp(ending, ".smi", 4) != 0) &&
- (strncasecmp(ending, ".ssa", 4) != 0))) {
+ (strncasecmp(ending, ".ssa", 4) != 0) &&
+ (strncasecmp(ending, ".ass", 4) != 0))) {
free (this);
return NULL;
}
@@ -1431,7 +1432,7 @@ void *init_sputext_demux_class (xine_t *xine, void *data) {
/* do not report this mimetype, it might confuse browsers. */
/* "text/plain: asc txt sub srt: VIDEO subtitles;" */
this->demux_class.mimetypes = NULL;
- this->demux_class.extensions = "asc txt sub srt smi ssa";
+ this->demux_class.extensions = "asc txt sub srt smi ssa ass";
this->demux_class.dispose = default_demux_class_dispose;
/*
diff --git a/src/video_dec/image.c b/src/video_dec/image.c
index a4b6e43bd..cbbb9d722 100644
--- a/src/video_dec/image.c
+++ b/src/video_dec/image.c
@@ -101,12 +101,14 @@ static void image_decode_data (video_decoder_t *this_gen, buf_element_t *buf) {
/*
* this->image -> rgb data
*/
+ InitializeMagick(NULL);
wand = NewMagickWand();
status = MagickReadImageBlob(wand, this->image, this->index);
this->index = 0;
if (!status) {
DestroyMagickWand(wand);
+ DestroyMagick();
lprintf("error loading image\n");
return;
}
@@ -116,6 +118,7 @@ static void image_decode_data (video_decoder_t *this_gen, buf_element_t *buf) {
img_buf = malloc(width * height * 3);
MagickGetImagePixels(wand, 0, 0, width, height, "RGB", CharPixel, img_buf);
DestroyMagickWand(wand);
+ DestroyMagick();
_x_stream_info_set(this->stream, XINE_STREAM_INFO_VIDEO_WIDTH, width);
_x_stream_info_set(this->stream, XINE_STREAM_INFO_VIDEO_HEIGHT, height);
diff --git a/src/video_out/video_out_directx.c b/src/video_out/video_out_directx.c
index 26f1c1178..f37c730b8 100644
--- a/src/video_out/video_out_directx.c
+++ b/src/video_out/video_out_directx.c
@@ -110,6 +110,12 @@ typedef struct {
*
* ----------------------------------------- */
+typedef enum {
+ VO_DIRECTX_HWACCEL_FULL = 0,
+ VO_DIRECTX_HWACCEL_SCALE = 1,
+ VO_DIRECTX_HWACCEL_NONE = 2
+} vo_directx_hwaccel_enum;
+
typedef struct {
vo_driver_t vo_driver;
win32_visual_t *win32_visual;
@@ -128,6 +134,7 @@ typedef struct {
uint32_t width; /* frame with */
uint32_t height; /* frame height */
double ratio; /* frame ratio */
+ vo_directx_hwaccel_enum hwaccel; /* requested level of HW acceleration */
yuv2rgb_factory_t *yuv2rgb_factory; /* used for format conversion */
yuv2rgb_t *yuv2rgb; /* used for format conversion */
@@ -144,6 +151,8 @@ typedef struct {
xine_t *xine;
} directx_class_t;
+char *config_hwaccel_values[] = {"full", "scale", "none", NULL };
+
/* -----------------------------------------
*
* BEGIN : Direct Draw and win32 handlers
@@ -322,6 +331,8 @@ static boolean CreateSecondary( win32_driver_t * win32_driver, int width, int he
ddsd.dwWidth = width;
ddsd.dwHeight = height;
+ if (win32_driver->hwaccel <= VO_DIRECTX_HWACCEL_FULL) {
+
if( format == XINE_IMGFMT_YV12 )
{
/* the requested format is XINE_IMGFMT_YV12 */
@@ -378,6 +389,10 @@ static boolean CreateSecondary( win32_driver_t * win32_driver, int width, int he
if( IDirectDraw_CreateSurface( win32_driver->ddobj, &ddsd, &win32_driver->secondary, 0 ) == DD_OK )
return TRUE;
+ }
+
+ if (win32_driver->hwaccel <= VO_DIRECTX_HWACCEL_SCALE) {
+
/* Our fallback method is to create a back buffer
* with the same image format as the primary surface */
@@ -392,10 +407,13 @@ static boolean CreateSecondary( win32_driver_t * win32_driver, int width, int he
if( IDirectDraw_CreateSurface( win32_driver->ddobj, &ddsd, &win32_driver->secondary, 0 ) == DD_OK )
return TRUE;
+ }
+
/* Our second fallback - all w/o HW acceleration */
lprintf("CreateSecondary() - Falling back, disabling HW acceleration \n");
ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT;
ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
+ win32_driver->act_format = IMGFMT_NATIVE;
if( (result = IDirectDraw_CreateSurface( win32_driver->ddobj, &ddsd, &win32_driver->secondary, 0 )) == DD_OK )
return TRUE;
@@ -625,7 +643,7 @@ static boolean Overlay( LPDIRECTDRAWSURFACE src_surface, RECT * src_rect,
}
else
{
- Error( 0, "IDirectDrawSurface_UpdateOverlay : error 0x%lx", result );
+ Error( 0, "IDirectDrawSurface_UpdateOverlay : error 0x%lx. You can try disable hardware acceleration (option video.directx.hwaccel).", result );
return FALSE;
}
}
@@ -1265,6 +1283,15 @@ static vo_driver_t *open_plugin (video_driver_class_t *class_gen, const void *wi
win32_driver->vo_driver.dispose = win32_exit;
win32_driver->vo_driver.redraw_needed = win32_redraw_needed;
+ win32_driver->hwaccel = class->config->register_enum(class->config,
+ "video.directx.hwaccel", 0, config_hwaccel_values,
+ _("HW acceleration level"),
+ _("Possible values (default full):\n\n"
+"full: full acceleration\n"
+"scale: disable colorspace conversion (HW scaling only)\n"
+"none: disable all acceleration"),
+ 10, NULL, NULL);
+
if (!CreatePrimary( win32_driver )) {
Destroy( win32_driver );
return NULL;
diff --git a/src/xine-engine/Makefile.am b/src/xine-engine/Makefile.am
index 64ba68a97..15553380a 100644
--- a/src/xine-engine/Makefile.am
+++ b/src/xine-engine/Makefile.am
@@ -12,7 +12,7 @@ EXTRA_DIST = lrb.c lrb.h accel_vdpau.h accel_xvmc.h
if WIN32
DEF_FILE = libxine-$(XINE_MAJOR).def
-def_ldflags="-Wl,--output-def,$(DEF_FILE)"
+def_ldflags=-Wl,--output-def,$(DEF_FILE) $(LDFLAGS_NOUNDEFINED)
else
DEF_FILE =
endif
diff --git a/src/xine-engine/configfile.c b/src/xine-engine/configfile.c
index e5c42f6ea..b82db8b77 100644
--- a/src/xine-engine/configfile.c
+++ b/src/xine-engine/configfile.c
@@ -1026,8 +1026,8 @@ void xine_config_save (xine_t *xine, const char *filename) {
lprintf("backing up configfile to %s\n", temp);
- f_backup = fopen(temp, "w");
- f_config = fopen(filename, "r");
+ f_backup = fopen(temp, "wb");
+ f_config = fopen(filename, "rb");
if (f_config && f_backup && (stat(filename, &config_stat) == 0)) {
char *buf = NULL;
diff --git a/src/xine-engine/events.c b/src/xine-engine/events.c
index 33d9988be..11d6e8bd7 100644
--- a/src/xine-engine/events.c
+++ b/src/xine-engine/events.c
@@ -193,6 +193,7 @@ void xine_event_dispose_queue (xine_event_queue_t *queue) {
while ( (event = xine_event_get (queue)) ) {
xine_event_free (event);
}
+ xine_list_delete(queue->events);
pthread_mutex_destroy(&queue->lock);
pthread_cond_destroy(&queue->new_event);
diff --git a/src/xine-engine/info_helper.c b/src/xine-engine/info_helper.c
index 93fc2173d..85f43b357 100644
--- a/src/xine-engine/info_helper.c
+++ b/src/xine-engine/info_helper.c
@@ -241,9 +241,6 @@ static void meta_info_set_unlocked_encoding(xine_stream_t *stream, int info, con
xprintf(stream->xine, XINE_VERBOSITY_LOG,
_("info_helper: unsupported conversion %s -> UTF-8, no conversion performed\n"), enc);
- if (system_enc)
- free(system_enc);
-
if (cd != (iconv_t)-1) {
char *utf8_value;
ICONV_CONST char *inbuf;
@@ -273,6 +270,8 @@ static void meta_info_set_unlocked_encoding(xine_stream_t *stream, int info, con
return;
}
}
+
+ free(system_enc);
}
#endif
diff --git a/src/xine-engine/xine.c b/src/xine-engine/xine.c
index c2e6641ec..a03ac5686 100644
--- a/src/xine-engine/xine.c
+++ b/src/xine-engine/xine.c
@@ -696,6 +696,7 @@ xine_stream_t *xine_stream_new (xine_t *this,
pthread_mutexattr_init(&attr);
pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
pthread_mutex_init (&stream->frontend_lock, &attr);
+ pthread_mutexattr_destroy(&attr);
/*
* Clear meta/stream info
@@ -1534,6 +1535,8 @@ static void xine_dispose_internal (xine_stream_t *stream) {
stream->metronom->exit (stream->metronom);
+ xine_list_delete(stream->event_queues);
+
pthread_mutex_lock(&stream->xine->streams_lock);
ite = xine_list_find(stream->xine->streams, stream);
if (ite) {
@@ -1578,7 +1581,6 @@ void xine_dispose (xine_stream_t *stream) {
if (stream->osd_renderer)
stream->osd_renderer->close( stream->osd_renderer );
-
_x_refcounter_dec(stream->refcounter);
}
@@ -1607,6 +1609,8 @@ void xine_exit (xine_t *this) {
if(this->port_ticket)
this->port_ticket->dispose(this->port_ticket);
+ pthread_mutex_destroy(&this->log_lock);
+
#if defined(WIN32)
WSACleanup();
#endif
@@ -1652,6 +1656,7 @@ xine_t *xine_new (void) {
* log buffers
*/
memset(this->log_buffers, 0, sizeof(this->log_buffers));
+ pthread_mutex_init (&this->log_lock, NULL);
#ifdef WIN32
@@ -1747,7 +1752,6 @@ void xine_init (xine_t *this) {
* locks
*/
pthread_mutex_init (&this->streams_lock, NULL);
- pthread_mutex_init (&this->log_lock, NULL);
/* initialize color conversion tables and functions */
init_yuv_conversion();
diff --git a/src/xine-utils/mangle.h b/src/xine-utils/mangle.h
index 4ca7db7a5..a897e9229 100644
--- a/src/xine-utils/mangle.h
+++ b/src/xine-utils/mangle.h
@@ -36,10 +36,15 @@
// Use rip-relative addressing if compiling PIC code on x86-64.
#if defined(__MINGW32__) || defined(__CYGWIN__) || defined(__DJGPP__) || \
defined(__OS2__) || (defined (__OpenBSD__) && !defined(__ELF__))
+# if defined(__MINGW64__)
+# define EXTERN_PREFIX ""
+# else
+# define EXTERN_PREFIX "_"
+# endif
# if defined(__x86_64__) && defined(__PIC__)
-# define MANGLE(a) "_" #a"(%%rip)"
+# define MANGLE(a) EXTERN_PREFIX #a"(%%rip)"
# else
-# define MANGLE(a) "_" #a
+# define MANGLE(a) EXTERN_PREFIX #a
# endif
#else
# if defined(__x86_64__) && defined(__PIC__)
diff --git a/src/xine-utils/memcpy.c b/src/xine-utils/memcpy.c
index b7611ed86..cea2b5b0b 100644
--- a/src/xine-utils/memcpy.c
+++ b/src/xine-utils/memcpy.c
@@ -39,6 +39,8 @@
#ifdef HAVE_SYS_TIMES_H
#include <sys/times.h>
+#else
+#include <time.h>
#endif
#include <stdlib.h>
@@ -124,7 +126,7 @@ quote of the day:
/* for small memory blocks (<256 bytes) this version is faster */
#define small_memcpy(to,from,n)\
{\
-register unsigned long int dummy;\
+register uintptr_t dummy;\
__asm__ __volatile__(\
"rep; movsb"\
:"=&D"(to), "=&S"(from), "=&c"(dummy)\
@@ -154,7 +156,7 @@ int d0, d1, d2;
"movsb\n"
"2:"
: "=&c" (d0), "=&D" (d1), "=&S" (d2)
- :"0" (n/4), "q" (n),"1" ((long) to),"2" ((long) from)
+ :"0" (n/4), "q" (n),"1" ((uintptr_t) to),"2" ((uintptr_t) from)
: "memory");
return (to);
@@ -191,9 +193,9 @@ static void * sse_memcpy(void * to, const void * from, size_t len)
if(len >= MIN_LEN)
{
- register unsigned long int delta;
+ register uintptr_t delta;
/* Align destinition to MMREG_SIZE -boundary */
- delta = ((unsigned long int)to)&(SSE_MMREG_SIZE-1);
+ delta = ((uintptr_t)to)&(SSE_MMREG_SIZE-1);
if(delta)
{
delta=SSE_MMREG_SIZE-delta;
@@ -202,7 +204,7 @@ static void * sse_memcpy(void * to, const void * from, size_t len)
}
i = len >> 6; /* len/64 */
len&=63;
- if(((unsigned long)from) & 15)
+ if(((uintptr_t)from) & 15)
/* if SRC is misaligned */
for(; i>0; i--)
{
@@ -263,9 +265,9 @@ static void * mmx_memcpy(void * to, const void * from, size_t len)
if(len >= MMX1_MIN_LEN)
{
- register unsigned long int delta;
+ register uintptr_t delta;
/* Align destinition to MMREG_SIZE -boundary */
- delta = ((unsigned long int)to)&(MMX_MMREG_SIZE-1);
+ delta = ((uintptr_t)to)&(MMX_MMREG_SIZE-1);
if(delta)
{
delta=MMX_MMREG_SIZE-delta;
@@ -328,9 +330,9 @@ static void * mmx2_memcpy(void * to, const void * from, size_t len)
if(len >= MIN_LEN)
{
- register unsigned long int delta;
+ register uintptr_t delta;
/* Align destinition to MMREG_SIZE -boundary */
- delta = ((unsigned long int)to)&(MMX_MMREG_SIZE-1);
+ delta = ((uintptr_t)to)&(MMX_MMREG_SIZE-1);
if(delta)
{
delta=MMX_MMREG_SIZE-delta;
@@ -428,7 +430,7 @@ static uint64_t rdtsc(int config_flags)
struct tms tp;
return times(&tp);
#else
- return ((uint64_t)0);
+ return clock();
#endif /* HAVE_SYS_TIMES_H */
}
#endif
diff --git a/src/xine-utils/xmlparser.c b/src/xine-utils/xmlparser.c
index 320733ebf..ba0c51994 100644
--- a/src/xine-utils/xmlparser.c
+++ b/src/xine-utils/xmlparser.c
@@ -143,7 +143,7 @@ static void xml_parser_free_props(xml_property_t *current_property) {
}
static void xml_parser_free_tree_rec(xml_node_t *current_node, int free_next) {
- lprintf("xml_parser_free_tree_rec: %s\n", current_node->name);
+ lprintf("xml_parser_free_tree_rec: %s\n", current_node ? current_node->name : NULL);
if (current_node) {
/* properties */