From: <fla...@gm...> - 2007-11-20 12:38:50
|
# HG changeset patch # User Diego 'Flameeyes' Pettenò <fla...@gm...> # Date 1195562018 -3600 # Node ID 1acec799fb7ca10b47b28b8e07f499859c865788 # Parent ad5d4f53cb4242ed80860c94a5afa28b4d0ca29e # Parent bca95429b9fc88bacad3da03980a2276b2726e0a Merge from 1.1. diff -r 1acec799fb7ca10b47b28b8e07f499859c865788 -r ad5d4f53cb4242ed80860c94a5afa28b4d0ca29e src/demuxers/demux_flv.c --- a/src/demuxers/demux_flv.c Tue Nov 20 13:33:38 2007 +0100 +++ b/src/demuxers/demux_flv.c Tue Nov 20 13:33:11 2007 +0100 @@ -68,13 +68,21 @@ typedef struct { off_t start; /* in bytes */ off_t size; /* in bytes */ - unsigned char got_video; - unsigned char got_audio; + unsigned char got_video_header; + unsigned char got_audio_header; unsigned int length; /* in ms */ int width; int height; - double framerate; + int duration; + int videocodec; + + int samplerate; + int samplesize; + int stereo; + int audiocodec; + + off_t filesize; flv_index_entry_t *index; int num_indices; @@ -225,10 +233,37 @@ static int parse_flv_var(demux_flv_t *th _x_stream_info_set(this->stream, XINE_STREAM_INFO_VIDEO_HEIGHT, this->height); } else if (keylen == 9 && !strncmp(key, "framerate", 9)) { - this->framerate = val; + if (val > 0) { + this->duration = 90000.0 / val; + _x_stream_info_set(this->stream, XINE_STREAM_INFO_FRAME_DURATION, this->duration); + } } else if (keylen == 13 && !strncmp(key, "videodatarate", 13)) { - _x_stream_info_set(this->stream, XINE_STREAM_INFO_BITRATE, val*1000.0); + _x_stream_info_set(this->stream, XINE_STREAM_INFO_VIDEO_BITRATE, val*1000.0); + } + else if (keylen == 12 && !strncmp(key, "videocodecid", 12)) { + this->videocodec = val; + } + else if (keylen == 15 && !strncmp(key, "audiosamplerate", 15)) { + this->samplerate = val; + _x_stream_info_set(this->stream, XINE_STREAM_INFO_AUDIO_SAMPLERATE, this->samplerate); + } + else if (keylen == 15 && !strncmp(key, "audiosamplesize", 15)) { + this->samplesize = val; + _x_stream_info_set(this->stream, XINE_STREAM_INFO_AUDIO_BITS, this->samplesize); + } + else if (keylen == 5 && !strncmp(key, "stereo", 5)) { + this->stereo = val; + _x_stream_info_set(this->stream, XINE_STREAM_INFO_AUDIO_CHANNELS, this->stereo ? 2 : 1); + } + else if (keylen == 13 && !strncmp(key, "audiodatarate", 13)) { + _x_stream_info_set(this->stream, XINE_STREAM_INFO_AUDIO_BITRATE, val*1000.0); + } + else if (keylen == 12 && !strncmp(key, "audiocodecid", 12)) { + this->audiocodec = val; + } + else if (keylen == 8 && !strncmp(key, "filesize", 8)) { + this->filesize = val; } } tmp += 8; @@ -369,7 +404,8 @@ static int read_flv_packet(demux_flv_t * } remaining_bytes--; - switch (buffer[0] >> 4) { + this->audiocodec = buffer[0] >> 4; /* override */ + switch (this->audiocodec) { case FLV_SOUND_FORMAT_PCM_BE: buf_type = BUF_AUDIO_LPCM_BE; break; @@ -389,20 +425,18 @@ static int read_flv_packet(demux_flv_t * } fifo = this->audio_fifo; - if (!this->got_audio) { + if (preview && !this->got_audio_header) { /* send init info to audio decoder */ buf = fifo->buffer_pool_alloc(fifo); - buf->decoder_flags = BUF_FLAG_HEADER|BUF_FLAG_STDHEADER|BUF_FLAG_FRAME_END; + buf->decoder_flags = BUF_FLAG_HEADER | BUF_FLAG_STDHEADER | BUF_FLAG_FRAME_END; buf->decoder_info[0] = 0; buf->decoder_info[1] = 44100 >> (3 - ((buffer[0] >> 2) & 3)); /* samplerate */ buf->decoder_info[2] = (buffer[0] & 2) ? 16 : 8; /* bits per sample */ buf->decoder_info[3] = (buffer[0] & 1) + 1; /* channels */ buf->size = 0; /* no extra data */ buf->type = buf_type; - fifo->put(fifo, buf); - - this->got_audio = 1; + this->got_audio_header = 1; } break; @@ -417,7 +451,8 @@ static int read_flv_packet(demux_flv_t * if ((buffer[0] >> 4) == 0x01) buf_flags = BUF_FLAG_KEYFRAME; - switch (buffer[0] & 0x0F) { + this->videocodec = buffer[0] & 0x0F; /* override */ + switch (this->videocodec) { case FLV_VIDEO_FORMAT_FLV1: buf_type = BUF_VIDEO_FLV1; break; @@ -439,15 +474,15 @@ static int read_flv_packet(demux_flv_t * break; } - fifo = this->video_fifo; - if (!this->got_video) { + fifo = this->video_fifo; + if (preview && !this->got_video_header) { xine_bmiheader *bih; /* send init info to video decoder; send the bitmapinfo header to the decoder * primarily as a formality since there is no real data inside */ buf = fifo->buffer_pool_alloc(fifo); buf->decoder_flags = BUF_FLAG_HEADER | BUF_FLAG_STDHEADER | BUF_FLAG_FRAMERATE | BUF_FLAG_FRAME_END; - buf->decoder_info[0] = this->framerate ? (90000.0/this->framerate) : 0; + buf->decoder_info[0] = this->duration; [... 59 lines omitted ...] + break; + case FLV_VIDEO_FORMAT_VP6: + case FLV_VIDEO_FORMAT_VP6A: + buf->type = BUF_VIDEO_VP6F; + break; + default: + buf->type = BUF_VIDEO_UNKNOWN; + break; + } + buf->size = sizeof(xine_bmiheader); + bih = (xine_bmiheader *) buf->content; + memset(bih, 0, sizeof(xine_bmiheader)); + bih->biSize = sizeof(xine_bmiheader); + bih->biWidth = this->width; + bih->biHeight = this->height; + if (buf->type == BUF_VIDEO_VP6F) { + *((uint8_t *)buf->content+buf->size) = ((16-(this->width&15)) << 4) | + ((16-(this->height&15)) & 0xf); + bih->biSize++; + buf->size++; + } + this->video_fifo->put(this->video_fifo, buf); + this->got_video_header = 1; + } + + return this->status; + } continue; default: @@ -520,12 +621,13 @@ static int read_flv_packet(demux_flv_t * return this->status; } -static void seek_flv_file(demux_flv_t *this, int seek_pts) { +static void seek_flv_file(demux_flv_t *this, off_t seek_pos, int seek_pts) { unsigned char buffer[16]; unsigned int pts = this->cur_pts; int len = 0; int next_tag = 0; int do_rewind = (seek_pts < this->cur_pts); + int i; lprintf(" seeking %s to %d...\n", do_rewind ? "backward" : "forward", seek_pts); @@ -537,8 +639,6 @@ static void seek_flv_file(demux_flv_t *t } if (this->index) { - int i; - if (do_rewind) { for (i = this->num_indices-1; i > 0; i--) { if (this->index[i-1].pts < seek_pts) @@ -561,6 +661,44 @@ static void seek_flv_file(demux_flv_t *t return; } } + + if (seek_pos && this->videocodec) { + off_t pos, size; + + pos = this->input->get_current_pos(this->input); + size = this->filesize ? : this->input->get_length(this->input); + this->input->seek(this->input, (uint64_t)size * seek_pos / 65535, SEEK_SET); + lprintf(" resyncing...\n"); + + /* resync */ + for (i = 0; i < 200000; i++) { + uint8_t buf[4]; + + if (this->input->read(this->input, buf, 1) < 1) { + this->status = DEMUX_FINISHED; + return; + } + if (buf[0] == FLV_TAG_TYPE_VIDEO) { + this->input->seek(this->input, 7, SEEK_CUR); + if (this->input->read(this->input, buf, 4) < 4) { + this->status = DEMUX_FINISHED; + return; + } + /* check StreamID and CodecID */ + if (buf[0] == 0 && buf[1] == 0 && buf[2] == 0 && + buf[3] == (this->videocodec | 0x10)) { + this->input->seek(this->input, -16, SEEK_CUR); + lprintf(" ...resynced after %d bytes\n", i); + return; + } + this->input->seek(this->input, -11, SEEK_CUR); + } + } + + lprintf(" ...resync failed!\n"); + this->input->seek(this->input, pos, SEEK_SET); + return; + } while (do_rewind ? (seek_pts < this->cur_pts) : (seek_pts > this->cur_pts)) { unsigned char tag_type; @@ -619,6 +757,8 @@ static void demux_flv_send_headers(demux this->audio_fifo = this->stream->audio_fifo; this->status = DEMUX_OK; + + this->buf_flag_seek = 1; /* load stream information */ _x_stream_info_set(this->stream, XINE_STREAM_INFO_HAS_VIDEO, @@ -633,8 +773,8 @@ static void demux_flv_send_headers(demux for (i = 0; i < 20; i++) { if (read_flv_packet(this, 1) != DEMUX_OK) break; - if (((this->flags & FLV_FLAG_HAS_VIDEO) && this->got_video) && - ((this->flags & FLV_FLAG_HAS_AUDIO) && this->got_audio)) { + if (((this->flags & FLV_FLAG_HAS_VIDEO) && this->got_video_header) && + ((this->flags & FLV_FLAG_HAS_AUDIO) && this->got_audio_header)) { lprintf(" headers sent...\n"); break; } @@ -653,7 +793,7 @@ static int demux_flv_seek (demux_plugin_ start_time = (int64_t) this->length * start_pos / 65535; if (!this->length || start_time < this->length) { - seek_flv_file(this, start_time); + seek_flv_file(this, start_pos, start_time); if (playing) { this->buf_flag_seek = 1; diff -r 1acec799fb7ca10b47b28b8e07f499859c865788 -r ad5d4f53cb4242ed80860c94a5afa28b4d0ca29e src/xine-utils/ppcasm_string.S --- a/src/xine-utils/ppcasm_string.S Tue Nov 20 13:33:38 2007 +0100 +++ b/src/xine-utils/ppcasm_string.S Tue Nov 20 13:33:11 2007 +0100 @@ -34,7 +34,8 @@ #define _GLOBFN(n)\ .stabs __stringify(n:F-1),N_FUN,0,0,n;\ .type n,@function; \ - .globl n;\ + .globl n;\ + .hidden n;\ n: #define _SIZE(n) \ |
From: <li...@yo...> - 2007-11-25 21:35:33
|
# HG changeset patch # User Darren Salt <li...@yo...> # Date 1196025743 0 # Node ID 0b1ecd21a6263d065aa76152de340dc33a6274f7 # Parent a49085946834cc90d3ecfbb262d4576f2fe0cb42 # Parent 7cd1f3c9edfd503e445e9f31d840dfa93e7bce76 Merge from 1.1. Some fixups were required for the kfreebsd patch; needs testing. diff -r 0b1ecd21a6263d065aa76152de340dc33a6274f7 -r a49085946834cc90d3ecfbb262d4576f2fe0cb42 configure.ac --- a/configure.ac Sun Nov 25 21:22:23 2007 +0000 +++ b/configure.ac Sun Nov 25 19:47:27 2007 +0000 @@ -1081,6 +1081,22 @@ INCLUDES='-I$(top_srcdir) -I$(top_buildd INCLUDES='-I$(top_srcdir) -I$(top_builddir)/include -I$(top_srcdir)/include -I$(top_srcdir)/src -I$(top_builddir)/src/xine-engine -I$(top_srcdir)/src/xine-engine -I$(top_srcdir)/src/xine-utils $(INTLDIR) -I$(top_builddir)/src/input -I$(top_srcdir)/src/input $(WIN32_INCLUDES) -I$(top_builddir)/lib -I$(top_srcdir)/lib' AC_SUBST(INCLUDES) + +dnl signal FreeBSD have also FreeBSD based kernel. +dnl + +AH_BOTTOM([ +#if defined (__FreeBSD__) && !defined (__FreeBSD_kernel__) +#define __FreeBSD_kernel__ __FreeBSD__ +#endif + +#if defined (__FreeBSD_kernel__) +#include <sys/param.h> +# if defined (__FreeBSD_version) && !defined (__FreeBSD_kernel_version) +# define __FreeBSD_kernel_version __FreeBSD_version +# endif +#endif +]) dnl Common cflags for all platforms CFLAGS="$UNIVERSAL_CFLAGS \$(MULTIPASS_CFLAGS) $miscflags $warnflags $CFLAGS" diff -r 0b1ecd21a6263d065aa76152de340dc33a6274f7 -r a49085946834cc90d3ecfbb262d4576f2fe0cb42 contrib/libdha/ports.c --- a/contrib/libdha/ports.c Sun Nov 25 21:22:23 2007 +0000 +++ b/contrib/libdha/ports.c Sun Nov 25 19:47:27 2007 +0000 @@ -69,7 +69,7 @@ /* OS depended stuff */ #if defined (linux) #include "sysdep/pci_linux.c" -#elif defined (__FreeBSD__) +#elif defined (__FreeBSD_kernel__) #include "sysdep/pci_freebsd.c" #elif defined (__386BSD__) #include "sysdep/pci_386bsd.c" diff -r 0b1ecd21a6263d065aa76152de340dc33a6274f7 -r a49085946834cc90d3ecfbb262d4576f2fe0cb42 m4/video_out.m4 --- a/m4/video_out.m4 Sun Nov 25 21:22:23 2007 +0000 +++ b/m4/video_out.m4 Sun Nov 25 19:47:27 2007 +0000 @@ -343,7 +343,7 @@ AC_DEFUN([XINE_VIDEO_OUT_PLUGINS], [ else case "$host_or_hostalias" in i?86-*-linux* | k?-*-linux* | athlon-*-linux*) ;; - i?86-*-freebsd* | k?-*-freebsd* | athlon-*-freebsd*) ;; + i?86-*-freebsd* | k?-*-freebsd* | athlon-*-freebsd* | i?86-*-kfreebsd*) ;; *) have_vidix="no" ;; esac fi diff -r 0b1ecd21a6263d065aa76152de340dc33a6274f7 -r a49085946834cc90d3ecfbb262d4576f2fe0cb42 src/combined/xine_ogg_demuxer.c --- a/src/combined/xine_ogg_demuxer.c Sun Nov 25 21:22:23 2007 +0000 +++ b/src/combined/xine_ogg_demuxer.c Sun Nov 25 19:47:27 2007 +0000 @@ -236,13 +236,19 @@ static int read_ogg_packet (demux_ogg_t static int read_ogg_packet (demux_ogg_t *this) { char *buffer; long bytes; + long total = 0; while (ogg_sync_pageout(&this->oy,&this->og)!=1) { buffer = ogg_sync_buffer(&this->oy, CHUNKSIZE); bytes = this->input->read(this->input, buffer, CHUNKSIZE); + if (bytes == 0) { + if (total == 0) { + printf("read_ogg_packet read nothing\n"); + return 0; + } + break; + } ogg_sync_wrote(&this->oy, bytes); - if (bytes < CHUNKSIZE/2) { - return 0; - } + total += bytes; } return 1; } @@ -1359,7 +1365,6 @@ static void send_header (demux_ogg_t *th while (!done) { if (!read_ogg_packet(this)) { - this->status = DEMUX_FINISHED; return; } /* now we've got at least one new page */ diff -r 0b1ecd21a6263d065aa76152de340dc33a6274f7 -r a49085946834cc90d3ecfbb262d4576f2fe0cb42 src/combined/xine_vorbis_decoder.c --- a/src/combined/xine_vorbis_decoder.c Sun Nov 25 21:22:23 2007 +0000 +++ b/src/combined/xine_vorbis_decoder.c Sun Nov 25 19:47:27 2007 +0000 @@ -158,7 +158,7 @@ static void vorbis_decode_data (audio_de if( (res = vorbis_synthesis_headerin(&this->vi,&this->vc,&this->op)) < 0 ){ /* error case; not a vorbis header */ xine_log(this->stream->xine, XINE_LOG_MSG, "libvorbis: this bitstream does not contain vorbis audio data. Following first 64 bytes (return: %d).\n", res); - xine_hexdump(this->op.packet, this->op.bytes < 64 ? this->op.bytes : 64); + xine_hexdump((char *)this->op.packet, this->op.bytes < 64 ? this->op.bytes : 64); return; } @@ -219,7 +219,6 @@ static void vorbis_decode_data (audio_de */ int i,j; - int clipflag=0; int bout=(samples<this->convsize?samples:this->convsize); audio_buffer_t *audio_buffer; @@ -231,15 +230,13 @@ static void vorbis_decode_data (audio_de ogg_int16_t *ptr=audio_buffer->mem+i; float *mono=pcm[i]; for(j=0;j<bout;j++){ - int val=mono[j]*32767.f; + int val=(mono[j] + 1.0f) * 32768.f; + val -= 32768; /* might as well guard against clipping */ if(val>32767){ val=32767; - clipflag=1; - } - if(val<-32768){ + } else if(val<-32768){ val=-32768; - clipflag=1; } *ptr=val; ptr+=this->vi.channels; @@ -257,8 +254,9 @@ static void vorbis_decode_data (audio_de /* tell libvorbis how many samples we actually consumed */ vorbis_synthesis_read(&this->vd,bout); } - } - lprintf("output not open\n"); + } else { + lprintf("output not open\n"); + } } static void vorbis_dispose (audio_decoder_t *this_gen) { diff -r 0b1ecd21a6263d065aa76152de340dc33a6274f7 -r a49085946834cc90d3ecfbb262d4576f2fe0cb42 src/demuxers/id3.c --- a/src/demuxers/id3.c Sun Nov 25 21:22:23 2007 +0000 +++ b/src/demuxers/id3.c Sun Nov 25 19:47:27 2007 +0000 @@ -45,7 +45,7 @@ #include "bswap.h" #include "id3.h" -#define ID3_GENRE_COUNT 126 +#define ID3_GENRE_COUNT (sizeof (id3_genre) / sizeof (id3_genre[0])) static const char* const id3_genre[] = {"Blues", "Classic Rock", "Country", "Dance", "Disco", "Funk", "Grunge", "Hip-Hop", "Jazz", "Metal", @@ -72,7 +72,11 @@ static const char* const id3_genre[] = "Satire", "Slow Jam", "Club", "Tango", "Samba", "Folklore", "Ballad", "Power Ballad", "Rhythmic Soul", "Freestyle", "Duet", "Punk Rock", "Drum Solo", "A capella", "Euro-House", - "Dance Hall" }; + "Dance Hall", "Goa", "Drum & Bass", "Club-House", "Hardcore", "Terror", + "Indie", "BritPop", "Negerpunk", "Polsk Punk", "Beat", + "Christian Gangsta Rap", "Heavy Metal", "Black Metal", "Crossover", + "Contemporary Christian", "Christian Rock", "Merengue", "Salsa", + "Thrash Metal", "Anime", "JPop", "Synthpop" }; #define ID3_ENCODING_COUNT 4 static const char* const id3_encoding[] = { @@ -595,15 +599,15 @@ int id3v23_parse_tag(input_plugin_t *inp /* id3v2 "genre" parsing code. what a ugly format ! */ static int id3v24_parse_genre(char* dest, char *src, int len) { - int index = 0; + unsigned int index = 0; dest[0] = '\0'; - if (sscanf(src, "%2d", &index) == 1) { + if (sscanf(src, "%u", &index) == 1) { if (index < ID3_GENRE_COUNT) { strncpy(dest, id3_genre[index], len); dest[len - 1] = '\0'; } else { - lprintf("invalid index: %d\n", index); + lprintf("invalid index: %u\n", index); } } return 1; diff -r 0b1ecd21a6263d065aa76152de340dc33a6274f7 -r a49085946834cc90d3ecfbb262d4576f2fe0cb42 src/input/input_cdda.c --- a/src/input/input_cdda.c Sun Nov 25 21:22:23 2007 +0000 +++ b/src/input/input_cdda.c Sun Nov 25 19:47:27 2007 +0000 @@ -616,7 +616,7 @@ static int read_cdrom_frames(cdda_input_ return 0; } -#elif defined(__FreeBSD__) || defined(__NetBSD__) +#elif defined(__FreeBSD_kernel__) || defined(__NetBSD__) #include <sys/cdio.h> @@ -627,7 +627,7 @@ static int read_cdrom_toc(int fd, cdrom_ static int read_cdrom_toc(int fd, cdrom_toc *toc) { struct ioc_toc_header tochdr; -#if defined(__FreeBSD__) +#if defined(__FreeBSD_kernel__) struct ioc_read_toc_single_entry tocentry; #elif defined(__NetBSD__) struct ioc_read_toc_entry tocentry; @@ -658,7 +658,7 @@ static int read_cdrom_toc(int fd, cdrom_ memset(&tocentry, 0, sizeof(tocentry)); -#if defined(__FreeBSD__) +#if defined(__FreeBSD_kernel__) tocentry.track = i; tocentry.address_format = CD_MSF_FORMAT; if (ioctl(fd, CDIOREADTOCENTRY, &tocentry) == -1) { @@ -677,7 +677,7 @@ static int read_cdrom_toc(int fd, cdrom_ } #endif -#if defined(__FreeBSD__) +#if defined(__FreeBSD_kernel__) toc->toc_entries[i-1].track_mode = (tocentry.entry.control & 0x04) ? 1 : 0; toc->toc_entries[i-1].first_frame_minute = tocentry.entry.addr.msf.minute; toc->toc_entries[i-1].first_frame_second = tocentry.entry.addr.msf.second; @@ -701,7 +701,7 @@ static int read_cdrom_toc(int fd, cdrom_ /* fetch the leadout as well */ memset(&tocentry, 0, sizeof(tocentry)); -#if defined(__FreeBSD__) +#if defined(__FreeBSD_kernel__) tocentry.track = CD_LEADOUT_TRACK; tocentry.address_format = CD_MSF_FORMAT; if (ioctl(fd, CDIOREADTOCENTRY, &tocentry) == -1) { @@ -720,7 +720,7 @@ static int read_cdrom_toc(int fd, cdrom_ } #endif -#if defined(__FreeBSD__) +#if defined(__FreeBSD_kernel__) toc->leadout_track.track_mode = (tocentry.entry.control & 0x04) ? 1 : 0; toc->leadout_track.first_frame_minute = tocentry.entry.addr.msf.minute; toc->leadout_track.first_frame_second = tocentry.entry.addr.msf.second; @@ -749,8 +749,8 @@ static int read_cdrom_frames(cdda_input_ int fd = this_gen->fd; while( num_frames ) { -#if defined(__FreeBSD__) -#if __FreeBSD_version < 501106 +#if defined(__FreeBSD_kernel__) +#if __FreeBSD_kernel_version < 501106 struct ioc_read_audio cdda; cdda.address_format = CD_MSF_FORMAT; @@ -759,13 +759,10 @@ static int read_cdrom_frames(cdda_input_ cdda.address.msf.frame = frame % CD_FRAMES_PER_SECOND; cdda.nframes = 1; cdda.buffer = data; -#endif - -#if __FreeBSD_version >= 501106 - if (pread(fd, data, CD_RAW_FRAME_SIZE, frame * CD_RAW_FRAME_SIZE) != CD_RAW_FRAME_SIZE) { -#else /* read a frame */ if(ioctl(fd, CDIOCREADAUDIO, &cdda) < 0) { +#else + if (pread(fd, data, CD_RAW_FRAME_SIZE, frame * CD_RAW_FRAME_SIZE) != CD_RAW_FRAME_SIZE) { #endif perror("CDIOCREADAUDIO"); return -1; diff -r 0b1ecd21a6263d065aa76152de340dc33a6274f7 -r a49085946834cc90d3ecfbb262d4576f2fe0cb42 src/input/input_vcd.c --- a/src/input/input_vcd.c Sun Nov 25 21:22:23 2007 +0000 +++ b/src/input/input_vcd.c Sun Nov 25 19:47:27 2007 +0000 @@ -37,7 +37,7 @@ #ifdef HAVE_SYS_CDIO_H # include <sys/cdio.h> /* TODO: not clean yet */ -# if defined (__FreeBSD__) +# if defined (__FreeBSD_kernel__) # include <sys/cdrio.h> # endif #endif @@ -92,7 +92,7 @@ typedef struct { #if defined (__linux__) || defined(__sun) struct cdrom_tochdr tochdr; struct cdrom_tocentry tocent[100]; -#elif defined (__FreeBSD__) +#elif defined (__FreeBSD_kernel__) struct ioc_toc_header tochdr; struct cd_toc_entry *tocent; off_t cur_sec; @@ -117,7 +117,7 @@ typedef struct { int cur_track; -#if defined (__linux__) || defined(__sun) || defined(__FreeBSD__) +#if defined (__linux__) || defined(__sun) || defined (__FreeBSD_kernel__) uint8_t cur_min, cur_sec, cur_frame; #endif @@ -177,7 +177,7 @@ static int input_vcd_read_toc (vcd_input return 0; } -#elif defined (__FreeBSD__) +#elif defined (__FreeBSD_kernel__) static int input_vcd_read_toc (vcd_input_class_t *this, int fd) { struct ioc_read_toc_entry te; @@ -394,7 +394,7 @@ static off_t vcd_plugin_read (input_plug memcpy (buf, data.data, VCDSECTORSIZE); /* FIXME */ return VCDSECTORSIZE; } -#elif defined (__FreeBSD__) +#elif defined (__FreeBSD_kernel__) static off_t vcd_plugin_read (input_plugin_t *this_gen, void *buf_gen, off_t nlen) { vcd_input_plugin_t *this = (vcd_input_plugin_t *) this_gen; @@ -534,7 +534,7 @@ static buf_element_t *vcd_plugin_read_bl memcpy (buf->mem, data.data, VCDSECTORSIZE); /* FIXME */ return buf; } -#elif defined (__FreeBSD__) +#elif defined (__FreeBSD_kernel__) static buf_element_t *vcd_plugin_read_block (input_plugin_t *this_gen, fifo_buffer_t *fifo, off_t nlen) { @@ -693,7 +693,7 @@ static off_t vcd_plugin_seek (input_plug return offset ; /* FIXME */ } -#elif defined (__FreeBSD__) +#elif defined (__FreeBSD_kernel__) static off_t vcd_plugin_seek (input_plugin_t *this_gen, off_t offset, int origin) { @@ -767,7 +767,7 @@ static off_t vcd_plugin_get_length (inpu return (off_t) 0; } -#elif defined (__FreeBSD__) +#elif defined (__FreeBSD_kernel__) static off_t vcd_plugin_get_length (input_plugin_t *this_gen) { vcd_input_plugin_t *this = (vcd_input_plugin_t *) this_gen; off_t len ; @@ -862,7 +862,7 @@ static int vcd_plugin_open (input_plugin this->cur_min = this->cls->tocent[this->cur_track].cdte_addr.msf.minute; this->cur_sec = this->cls->tocent[this->cur_track].cdte_addr.msf.second; this->cur_frame = this->cls->tocent[this->cur_track].cdte_addr.msf.frame; -#elif defined (__FreeBSD__) +#elif defined (__FreeBSD_kernel__) { int bsize = 2352; if (ioctl (this->fd, CDRIOCSETBLOCKSIZE, &bsize) == -1) { diff -r 0b1ecd21a6263d065aa76152de340dc33a6274f7 -r a49085946834cc90d3ecfbb262d4576f2fe0cb42 src/input/libdvdnav/dvd_reader.c --- a/src/input/libdvdnav/dvd_reader.c Sun Nov 25 21:22:23 2007 +0000 +++ b/src/input/libdvdnav/dvd_reader.c Sun Nov 25 19:47:27 2007 +0000 @@ -58,7 +58,7 @@ static inline int _private_gettimeofday( #define lseek64 _lseeki64 #endif -#if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__bsdi__)|| defined(__DARWIN__) +#if defined(__FreeBSD_kernel__) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__bsdi__)|| defined(__DARWIN__) #define SYS_BSD 1 #endif diff -r 0b1ecd21a6263d065aa76152de340dc33a6274f7 -r a49085946834cc90d3ecfbb262d4576f2fe0cb42 src/input/media_helper.c --- a/src/input/media_helper.c Sun Nov 25 21:22:23 2007 +0000 +++ b/src/input/media_helper.c Sun Nov 25 19:47:27 2007 +0000 @@ -36,7 +36,7 @@ #include <unistd.h> #include <string.h> -#if defined(__NetBSD__) || defined(__OpenBSD__) || defined(__FreeBSD__) +#if defined(__NetBSD__) || defined(__OpenBSD__) || defined(__FreeBSD_kernel__) #include <sys/cdio.h> /* CDIOCALLOW etc... */ #elif defined(HAVE_LINUX_CDROM_H) #include <linux/cdrom.h> @@ -130,7 +130,7 @@ int media_eject_media (xine_t *xine, con return 0; } -#elif defined (__NetBSD__) || defined (__OpenBSD__) || defined (__FreeBSD__) +#elif defined (__NetBSD__) || defined (__OpenBSD__) || defined (__FreeBSD_kernel__) if (ioctl(fd, CDIOCALLOW) == -1) { xprintf(xine, XINE_VERBOSITY_DEBUG, "ioctl(cdromallow): %s\n", strerror(errno)); diff -r 0b1ecd21a6263d065aa76152de340dc33a6274f7 -r a49085946834cc90d3ecfbb262d4576f2fe0cb42 src/libw32dll/wine/ldt_keeper.c --- a/src/libw32dll/wine/ldt_keeper.c Sun Nov 25 21:22:23 2007 +0000 +++ b/src/libw32dll/wine/ldt_keeper.c Sun Nov 25 19:47:27 2007 +0000 @@ -78,7 +78,7 @@ int modify_ldt(int func, void *ptr, unsi } #endif #else -#if defined(__NetBSD__) || defined(__FreeBSD__) || defined(__OpenBSD__) +#if defined(__NetBSD__) || defined(__FreeBSD_kernel__) || defined(__OpenBSD__) #include <machine/segments.h> #include <machine/sysarch.h> #endif @@ -153,7 +153,7 @@ void Setup_FS_Segment(ldt_fs_t *ldt_fs) void Check_FS_Segment(ldt_fs_t *ldt_fs) { -#if defined(__FreeBSD__) && defined(LDT_AUTO_ALLOC) +#if defined(__FreeBSD_kernel__) && defined(LDT_AUTO_ALLOC) int fs; __asm__ __volatile__( "movw %%fs,%%ax; mov %%eax,%0" : "=r" (fs) :: "%eax" @@ -171,7 +171,7 @@ void Check_FS_Segment(ldt_fs_t *ldt_fs) #endif } -#if defined(__NetBSD__) || defined(__FreeBSD__) || defined(__OpenBSD__) +#if defined(__NetBSD__) || defined(__FreeBSD_kernel__) || defined(__OpenBSD__) static void LDT_EntryToBytes( unsigned long *buffer, const struct modify_ldt_ldt_s *content ) { *buffer++ = ((content->base_addr & 0x0000ffff) << 16) | @@ -202,12 +202,12 @@ static int _modify_ldt(ldt_fs_t *ldt_fs, } #endif /*linux*/ -#if defined(__NetBSD__) || defined(__FreeBSD__) || defined(__OpenBSD__) +#if defined(__NetBSD__) || defined(__FreeBSD_kernel__) || defined(__OpenBSD__) { unsigned long d[2]; LDT_EntryToBytes( d, &array ); -#if defined(__FreeBSD__) && defined(LDT_AUTO_ALLOC) +#if defined(__FreeBSD_kernel__) && defined(LDT_AUTO_ALLOC) ret = i386_set_ldt(LDT_AUTO_ALLOC, (union descriptor *)d, 1); array.entry_number = ret; ldt_fs->teb_sel = LDT_SEL(ret); diff -r 0b1ecd21a6263d065aa76152de340dc33a6274f7 -r a49085946834cc90d3ecfbb262d4576f2fe0cb42 src/libw32dll/wine/win32.c --- a/src/libw32dll/wine/win32.c Sun Nov 25 21:22:23 2007 +0000 +++ b/src/libw32dll/wine/win32.c Sun Nov 25 19:47:27 2007 +0000 @@ -894,7 +894,7 @@ static void WINAPI expGetSystemInfo(SYST /* FIXME: better values for the two entries below... */ static int cache = 0; static SYSTEM_INFO cachedsi; -#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__svr4__) +#if defined(__FreeBSD_kernel__) || defined(__NetBSD__) || defined(__svr4__) unsigned int regs[4]; #endif dbgprintf("GetSystemInfo(%p) =>\n", si); @@ -958,7 +958,7 @@ static void WINAPI expGetSystemInfo(SYST /* disable cpuid based detection (mplayer's cpudetect.c does this - see above) */ #ifndef MPLAYER -#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__svr4__) +#if defined(__FreeBSD_kernel__) || defined(__NetBSD__) || defined(__svr4__) do_cpuid(1, regs); switch ((regs[0] >> 8) & 0xf) { // cpu family case 3: cachedsi.dwProcessorType = PROCESSOR_INTEL_386; diff -r 0b1ecd21a6263d065aa76152de340dc33a6274f7 -r a49085946834cc90d3ecfbb262d4576f2fe0cb42 src/xine-engine/audio_out.c --- a/src/xine-engine/audio_out.c Sun Nov 25 21:22:23 2007 +0000 +++ b/src/xine-engine/audio_out.c Sun Nov 25 19:47:27 2007 +0000 @@ -291,6 +291,7 @@ struct audio_fifo_s { int num_buffers; }; +static int ao_set_property (xine_audio_port_t *this_gen, int property, int value); static audio_fifo_t *fifo_new (xine_t *xine) { @@ -1598,6 +1599,11 @@ static void ao_close(xine_audio_port_t * xprintf (this->xine, XINE_VERBOSITY_DEBUG, "audio_out: no streams left, closing driver\n"); if (this->audio_loop_running) { + if (this->clock->speed == XINE_SPEED_PAUSE || + (this->clock->speed != XINE_FINE_SPEED_NORMAL && !this->slow_fast_audio)) { + /* discard buffers, otherwise we'll wait forever */ + ao_set_property(this_gen, AO_PROP_DISCARD_BUFFERS, 1); + } /* make sure there are no more buffers on queue */ fifo_wait_empty(this->out_fifo); } diff -r 0b1ecd21a6263d065aa76152de340dc33a6274f7 -r a49085946834cc90d3ecfbb262d4576f2fe0cb42 src/xine-engine/input_cache.c --- a/src/xine-engine/input_cache.c Sun Nov 25 21:22:23 2007 +0000 +++ b/src/xine-engine/input_cache.c Sun Nov 25 19:47:27 2007 +0000 @@ -34,6 +34,7 @@ */ #include "xine_internal.h" +#include <assert.h> #define DEFAULT_BUFFER_SIZE 1024 @@ -191,6 +192,7 @@ static buf_element_t *cache_plugin_read_ if (buf) { buf->type = BUF_DEMUX_BLOCK; + assert(todo <= buf->max_size); read_len = cache_plugin_read (this_gen, buf->content, todo); buf->size = read_len; } diff -r 0b1ecd21a6263d065aa76152de340dc33a6274f7 -r a49085946834cc90d3ecfbb262d4576f2fe0cb42 src/xine-engine/xine.c --- a/src/xine-engine/xine.c Sun Nov 25 21:22:23 2007 +0000 +++ b/src/xine-engine/xine.c Sun Nov 25 19:47:27 2007 +0000 @@ -35,7 +35,7 @@ #include <pthread.h> #include <stdarg.h> #include <stdio.h> -#if defined (__linux__) +#if defined (__linux__) || defined (__GLIBC__) #include <endian.h> #elif defined (__FreeBSD__) #include <machine/endian.h> @@ -1233,7 +1233,11 @@ static int open_internal (xine_stream_t stream->demux_plugin->send_headers (stream->demux_plugin); if (stream->demux_plugin->get_status(stream->demux_plugin) != DEMUX_OK) { - xine_log (stream->xine, XINE_LOG_MSG, _("xine: demuxer failed to start\n")); + if (stream->demux_plugin->get_status(stream->demux_plugin) == DEMUX_FINISHED) { + xine_log (stream->xine, XINE_LOG_MSG, _("xine: demuxer is already done. that was fast!\n")); + } else { + xine_log (stream->xine, XINE_LOG_MSG, _("xine: demuxer failed to start\n")); + } _x_free_demux_plugin(stream, stream->demux_plugin); stream->demux_plugin = NULL; diff -r 0b1ecd21a6263d065aa76152de340dc33a6274f7 -r a49085946834cc90d3ecfbb262d4576f2fe0cb42 src/xine-engine/xine_interface.c --- a/src/xine-engine/xine_interface.c Sun Nov 25 21:22:23 2007 +0000 +++ b/src/xine-engine/xine_interface.c Sun Nov 25 19:47:27 2007 +0000 @@ -32,7 +32,7 @@ #include <stdlib.h> #include <pthread.h> #include <stdarg.h> -#if defined (__linux__) +#if defined (__linux__) || defined (__GLIBC__) #include <endian.h> #elif defined (__FreeBSD__) #include <machine/endian.h> diff -r 0b1ecd21a6263d065aa76152de340dc33a6274f7 -r a49085946834cc90d3ecfbb262d4576f2fe0cb42 src/xine-utils/utils.c --- a/src/xine-utils/utils.c Sun Nov 25 21:22:23 2007 +0000 +++ b/src/xine-utils/utils.c Sun Nov 25 19:47:27 2007 +0000 @@ -452,6 +452,7 @@ char *xine_chomp(char *str) { * a thread-safe usecond sleep */ void xine_usec_sleep(unsigned usec) { +#if 0 #if HAVE_NANOSLEEP /* nanosleep is prefered on solaris, because it's mt-safe */ struct timespec ts, remaining; @@ -466,6 +467,15 @@ void xine_usec_sleep(unsigned usec) { # else usleep(usec); # endif +#endif +#else + if (usec < 10000) { + usec = 10000; + } + struct timeval tm; + tm.tv_sec = usec / 1000000; + tm.tv_usec = usec % 1000000; + select(0, 0, 0, 0, &tm); #endif } |
From: <li...@yo...> - 2007-12-04 00:20:27
|
# HG changeset patch # User Darren Salt <li...@yo...> # Date 1196725977 0 # Node ID 850cfa08a9874ce276d33962bc0bd0bcc3e871d1 # Parent 0b1ecd21a6263d065aa76152de340dc33a6274f7 # Parent aba4d90445d821d9a32ee2fe8b1300d08999ab36 Merge from 1.1. diff -r 850cfa08a9874ce276d33962bc0bd0bcc3e871d1 -r 0b1ecd21a6263d065aa76152de340dc33a6274f7 ChangeLog --- a/ChangeLog Mon Dec 03 23:52:57 2007 +0000 +++ b/ChangeLog Sun Nov 25 21:22:23 2007 +0000 @@ -62,6 +62,14 @@ xine-lib (1.1.9) (unreleased) This requires conversion to UTF-8 of entities with codes >= 128. * Fixed ATSC support. [Bug 1749508] * Fixed a possible DVB plugin crash when switching channels. + * Fixed ogg demuxer to not discard data at the end of the stream. + * Fixed deadlock on ao_close while paused. + * Nicer wakeup behaviour, using select instead of nanosleep (800 -> 100 + wakeups/s). + * Fixed ALSA close function to not discard all data that had been written + but not played yet. + * Fixed a race condition between ao_loop and ao_close to not lose the last + buffer. xine-lib (1.1.8) * Send a channel-changed event to the frontend when receiving the SYNC diff -r 850cfa08a9874ce276d33962bc0bd0bcc3e871d1 -r 0b1ecd21a6263d065aa76152de340dc33a6274f7 debian/changelog --- a/debian/changelog Mon Dec 03 23:52:57 2007 +0000 +++ b/debian/changelog Sun Nov 25 21:22:23 2007 +0000 @@ -5,11 +5,13 @@ xine-lib-1.2 (1.2.0~hg-0) experimental; -- Darren Salt <li...@yo...> Tue, 17 Apr 2007 16:50:37 +0100 -xine-lib (1.1.6~hg-0) unstable; urgency=low - - * Hg snapshot. - - -- Darren Salt <li...@yo...> Mon, 16 Apr 2007 22:00:07 +0100 +xine-lib (1.1.9~hg-0) unstable; urgency=low + + [ Reinhard Tartler ] + * remove gs from build-dependencies + * change the maintainer field to xin...@li.... + + -- Reinhard Tartler <sir...@ta...> Sun, 25 Nov 2007 23:45:52 +0100 xine-lib (1.1.5~cvs-0) unstable; urgency=low diff -r 850cfa08a9874ce276d33962bc0bd0bcc3e871d1 -r 0b1ecd21a6263d065aa76152de340dc33a6274f7 debian/control --- a/debian/control Mon Dec 03 23:52:57 2007 +0000 +++ b/debian/control Sun Nov 25 21:22:23 2007 +0000 @@ -1,8 +1,7 @@ Source: xine-lib-1.2 Source: xine-lib-1.2 Section: libs Priority: optional -Maintainer: Darren Salt <li...@yo...> -Uploaders: Reinhard Tartler <sir...@ta...> +Maintainer: xine Developers <xin...@li...> Build-Depends: debhelper (>= 5.0.1), binutils (>= 2.12.90.0.9), pkg-config, automake1.9, autoconf, libtool, libxcb-xinerama0-dev | libxv-dev (<< 1:1.0.3), libxcb-xv0-dev | libxv-dev (<< 1:1.0.3), @@ -21,7 +20,7 @@ Build-Depends: debhelper (>= 5.0.1), bin libflac-dev, libpulse-dev, libsdl1.2-dev, libwavpack-dev, libsmbclient-dev, libspeex-dev, libmng-dev, libmad0-dev, libmpcdec-dev, libcdio-dev (>= 0.76-1), libvcdinfo-dev, - w3m, gs, xmlto, librsvg2-bin + w3m, xmlto, librsvg2-bin Build-Conflicts: libdvdnav-dev Standards-Version: 3.7.2 diff -r 850cfa08a9874ce276d33962bc0bd0bcc3e871d1 -r 0b1ecd21a6263d065aa76152de340dc33a6274f7 doc/man/en/xine.5 --- a/doc/man/en/xine.5 Mon Dec 03 23:52:57 2007 +0000 +++ b/doc/man/en/xine.5 Sun Nov 25 21:22:23 2007 +0000 @@ -79,14 +79,13 @@ to read from. Valid MRLs may be plain fi .BR rtsp://<host>... " (requires Real codecs)" .br .LP +Additional input plugins will provide additional MRL types. The ones listed +above are available with stock libxine. + \fBNOTE:\fP where a file name is required, the \fIfull path must be provided\fP - from a shell, you can use \fB"$PWD/file"\fP or \fB"$(pwd)/file"\fP or \fB"\`pwd\`/file"\fP if the file is in the current directory. (Which one depends on your shell; all three work in bash.) - -Several MRLs may be specified in order to play a number of consecutive -streams. Additional input plugins will provide additional MRL types. The ones -listed above are available with stock libxine... As of xine-lib 1.1.3, the DVD title number may be 0 (select navigation) and the chapter number may be 0 (full title). diff -r 850cfa08a9874ce276d33962bc0bd0bcc3e871d1 -r 0b1ecd21a6263d065aa76152de340dc33a6274f7 src/audio_out/audio_alsa_out.c --- a/src/audio_out/audio_alsa_out.c Mon Dec 03 23:52:57 2007 +0000 +++ b/src/audio_out/audio_alsa_out.c Sun Nov 25 21:22:23 2007 +0000 @@ -856,7 +856,11 @@ static void ao_alsa_close(ao_driver_t *t static void ao_alsa_close(ao_driver_t *this_gen) { alsa_driver_t *this = (alsa_driver_t *) this_gen; - if(this->audio_fd) snd_pcm_close(this->audio_fd); + if(this->audio_fd) { + snd_pcm_nonblock(this->audio_fd, 0); + snd_pcm_drain(this->audio_fd); + snd_pcm_close(this->audio_fd); + } this->audio_fd = NULL; this->has_pause_resume = 0; /* This is set at open time */ } diff -r 850cfa08a9874ce276d33962bc0bd0bcc3e871d1 -r 0b1ecd21a6263d065aa76152de340dc33a6274f7 src/combined/xine_ogg_demuxer.c --- a/src/combined/xine_ogg_demuxer.c Mon Dec 03 23:52:57 2007 +0000 +++ b/src/combined/xine_ogg_demuxer.c Sun Nov 25 21:22:23 2007 +0000 @@ -242,7 +242,7 @@ static int read_ogg_packet (demux_ogg_t bytes = this->input->read(this->input, buffer, CHUNKSIZE); if (bytes == 0) { if (total == 0) { - printf("read_ogg_packet read nothing\n"); + lprintf("read_ogg_packet read nothing\n"); return 0; } break; diff -r 850cfa08a9874ce276d33962bc0bd0bcc3e871d1 -r 0b1ecd21a6263d065aa76152de340dc33a6274f7 src/xine-engine/audio_out.c --- a/src/xine-engine/audio_out.c Mon Dec 03 23:52:57 2007 +0000 +++ b/src/xine-engine/audio_out.c Sun Nov 25 21:22:23 2007 +0000 @@ -342,9 +342,7 @@ static void fifo_append (audio_fifo_t *f pthread_mutex_unlock (&fifo->mutex); } -static audio_buffer_t *fifo_remove_int (audio_fifo_t *fifo, int blocking) { - audio_buffer_t *buf; - +static audio_buffer_t *fifo_peek_int (audio_fifo_t *fifo, int blocking) { while (!fifo->first) { pthread_cond_signal (&fifo->empty); if (blocking) @@ -359,25 +357,38 @@ static audio_buffer_t *fifo_remove_int ( return NULL; } } - - buf = fifo->first; - - if (buf) { - fifo->first = buf->next; - - if (!fifo->first) { - - fifo->last = NULL; - fifo->num_buffers = 0; - pthread_cond_signal (&fifo->empty); - - } else - fifo->num_buffers--; - - } + return fifo->first; +} + +static audio_buffer_t *fifo_remove_int (audio_fifo_t *fifo, int blocking) { + audio_buffer_t *buf = fifo_peek_int(fifo, blocking); + if (!buf) + return NULL; + + fifo->first = buf->next; + + if (!fifo->first) { + + fifo->last = NULL; + fifo->num_buffers = 0; + pthread_cond_signal (&fifo->empty); + + } else + fifo->num_buffers--; buf->next = NULL; - + + return buf; +} + +static audio_buffer_t *fifo_peek (audio_fifo_t *fifo) { + + audio_buffer_t *buf; + + pthread_mutex_lock (&fifo->mutex); + buf = fifo_peek_int(fifo, 1); + pthread_mutex_unlock (&fifo->mutex); + return buf; } @@ -1000,7 +1011,7 @@ static void *ao_loop (void *this_gen) { if (!in_buf) { lprintf ("loop: get buf from fifo\n"); - in_buf = fifo_remove (this->out_fifo); + in_buf = fifo_peek (this->out_fifo); bufs_since_sync++; lprintf ("got a buffer\n"); } @@ -1013,6 +1024,7 @@ static void *ao_loop (void *this_gen) { } if (this->discard_buffers) { + fifo_remove (this->out_fifo); if (in_buf->stream) _x_refcounter_dec(in_buf->stream->refcounter); fifo_append (this->free_fifo, in_buf); @@ -1039,6 +1051,7 @@ static void *ao_loop (void *this_gen) { cur_time = this->clock->get_current_time (this->clock); if (in_buf->vpts < cur_time ) { lprintf ("loop: next fifo\n"); + fifo_remove (this->out_fifo); if (in_buf->stream) _x_refcounter_dec(in_buf->stream->refcounter); fifo_append (this->free_fifo, in_buf); @@ -1163,6 +1176,7 @@ static void *ao_loop (void *this_gen) { /* drop package */ lprintf ("loop: drop package, next fifo\n"); + fifo_remove (this->out_fifo); if (in_buf->stream) _x_refcounter_dec(in_buf->stream->refcounter); fifo_append (this->free_fifo, in_buf); @@ -1229,6 +1243,7 @@ static void *ao_loop (void *this_gen) { } else { result = 0; } + fifo_remove (this->out_fifo); if( result < 0 ) { /* device unplugged. */ |
From: <fla...@gm...> - 2007-12-07 14:47:46
|
# HG changeset patch # User Diego 'Flameeyes' Pettenò <fla...@gm...> # Date 1197037715 -3600 # Node ID f57cb861ecff6bcd351c516ca2403acece4f84d1 # Parent 850cfa08a9874ce276d33962bc0bd0bcc3e871d1 # Parent 293845e465cc96eb9c709d2492a6412c8bb6e876 Merge from 1.1. diff -r f57cb861ecff6bcd351c516ca2403acece4f84d1 -r 850cfa08a9874ce276d33962bc0bd0bcc3e871d1 ChangeLog --- a/ChangeLog Fri Dec 07 15:28:35 2007 +0100 +++ b/ChangeLog Mon Dec 03 23:52:57 2007 +0000 @@ -62,7 +62,7 @@ xine-lib (1.1.9) (unreleased) This requires conversion to UTF-8 of entities with codes >= 128. * Fixed ATSC support. [Bug 1749508] * Fixed a possible DVB plugin crash when switching channels. - * Fixed ogg demuxer to not discard data at the end of the stream. + * Fixed a crash closing the frontend. [Bug FS#3] * Fixed deadlock on ao_close while paused. * Nicer wakeup behaviour, using select instead of nanosleep (800 -> 100 wakeups/s). @@ -70,6 +70,8 @@ xine-lib (1.1.9) (unreleased) but not played yet. * Fixed a race condition between ao_loop and ao_close to not lose the last buffer. + * DXR3 encoding with external ffmpeg should be fixed now. + (This was broken by ffmpeg revision 9283). xine-lib (1.1.8) * Send a channel-changed event to the frontend when receiving the SYNC diff -r f57cb861ecff6bcd351c516ca2403acece4f84d1 -r 850cfa08a9874ce276d33962bc0bd0bcc3e871d1 src/libffmpeg/ff_video_decoder.c --- a/src/libffmpeg/ff_video_decoder.c Fri Dec 07 15:28:35 2007 +0100 +++ b/src/libffmpeg/ff_video_decoder.c Mon Dec 03 23:52:57 2007 +0000 @@ -213,11 +213,13 @@ static void release_buffer(struct AVCode ff_video_decoder_t *this = (ff_video_decoder_t *)context->opaque; if (av_frame->type == FF_BUFFER_TYPE_USER) { - vo_frame_t *img = (vo_frame_t *)av_frame->opaque; + if ( av_frame->opaque ) { + vo_frame_t *img = (vo_frame_t *)av_frame->opaque; + + img->free(img); + } + xine_list_iterator_t it; - - assert(av_frame->opaque); - img->free(img); it = xine_list_find(this->dr1_frames, av_frame); assert(it); diff -r f57cb861ecff6bcd351c516ca2403acece4f84d1 -r 850cfa08a9874ce276d33962bc0bd0bcc3e871d1 src/libffmpeg/ffmpeg_encoder.c --- a/src/libffmpeg/ffmpeg_encoder.c Fri Dec 07 15:28:35 2007 +0100 +++ b/src/libffmpeg/ffmpeg_encoder.c Mon Dec 03 23:52:57 2007 +0000 @@ -70,7 +70,7 @@ int dxr3_encoder_init(dxr3_driver_t *drv lavc_data_t* this; avcodec_init(); - register_avcodec(&mpeg1video_encoder); + avcodec_register_all(); lprintf("lavc init , version %x\n", avcodec_version()); this = xine_xmalloc(sizeof(lavc_data_t)); if (!this) return 0; |
From: <li...@yo...> - 2007-12-09 05:28:30
|
# HG changeset patch # User Darren Salt <li...@yo...> # Date 1197178017 0 # Node ID 97ebd38d80e4182466a80263c1bd323d64af7726 # Parent f57cb861ecff6bcd351c516ca2403acece4f84d1 # Parent b9d8d256fe2210d1a003f37a6380640a363a83bb Merge from 1.1. diff -r 97ebd38d80e4182466a80263c1bd323d64af7726 -r f57cb861ecff6bcd351c516ca2403acece4f84d1 ChangeLog --- a/ChangeLog Sun Dec 09 05:26:57 2007 +0000 +++ b/ChangeLog Fri Dec 07 15:28:35 2007 +0100 @@ -72,6 +72,7 @@ xine-lib (1.1.9) (unreleased) buffer. * DXR3 encoding with external ffmpeg should be fixed now. (This was broken by ffmpeg revision 9283). + * Enabled the WMV VC1 (ffmpeg) codec. xine-lib (1.1.8) * Send a channel-changed event to the frontend when receiving the SYNC diff -r 97ebd38d80e4182466a80263c1bd323d64af7726 -r f57cb861ecff6bcd351c516ca2403acece4f84d1 src/libffmpeg/ff_video_decoder.c --- a/src/libffmpeg/ff_video_decoder.c Sun Dec 09 05:26:57 2007 +0000 +++ b/src/libffmpeg/ff_video_decoder.c Fri Dec 07 15:28:35 2007 +0100 @@ -243,6 +243,7 @@ static const ff_codec_t ff_video_lookup[ {BUF_VIDEO_WMV7, CODEC_ID_WMV1, "MS Windows Media Video 7 (ffmpeg)"}, {BUF_VIDEO_WMV8, CODEC_ID_WMV2, "MS Windows Media Video 8 (ffmpeg)"}, {BUF_VIDEO_WMV9, CODEC_ID_WMV3, "MS Windows Media Video 9 (ffmpeg)"}, + {BUF_VIDEO_VC1, CODEC_ID_VC1, "MS Windows Media Video VC-1 (ffmpeg)"}, {BUF_VIDEO_MPEG4, CODEC_ID_MPEG4, "ISO MPEG-4 (ffmpeg)"}, {BUF_VIDEO_XVID, CODEC_ID_MPEG4, "ISO MPEG-4 (XviD, ffmpeg)"}, {BUF_VIDEO_DIVX5, CODEC_ID_MPEG4, "ISO MPEG-4 (DivX5, ffmpeg)"}, @@ -1595,6 +1596,9 @@ static uint32_t supported_video_types[] #if defined(HAVE_FFMPEG) || CONFIG_WMV3_DECODER BUF_VIDEO_WMV9, #endif +#if defined(HAVE_FFMPEG) || CONFIG_VC1_DECODER + BUF_VIDEO_VC1, +#endif #if defined(HAVE_FFMPEG) || CONFIG_MPEG4_DECODER BUF_VIDEO_MPEG4, #endif diff -r 97ebd38d80e4182466a80263c1bd323d64af7726 -r f57cb861ecff6bcd351c516ca2403acece4f84d1 src/libspudvb/xine_spudvb_decoder.c --- a/src/libspudvb/xine_spudvb_decoder.c Sun Dec 09 05:26:57 2007 +0000 +++ b/src/libspudvb/xine_spudvb_decoder.c Fri Dec 07 15:28:35 2007 +0100 @@ -49,6 +49,7 @@ typedef struct { typedef struct { int width, height; + int empty; int depth; int CLUT_id; int objects_start; @@ -107,11 +108,40 @@ typedef struct dvb_spu_decoder_s { } dvb_spu_decoder_t; +static void update_osd(dvb_spu_decoder_t *this, int region_id) +{ + dvbsub_func_t *dvbsub = this->dvbsub; + region_t *reg = &dvbsub->regions[region_id]; + + if ( !reg->img ) { + if ( reg->osd ) { + pthread_mutex_lock( &this->dvbsub_osd_mutex ); + this->stream->osd_renderer->free_object( reg->osd ); + reg->osd = NULL; + pthread_mutex_unlock( &this->dvbsub_osd_mutex ); + } + return; + } + + if ( reg->osd ) { + if ( reg->width!=reg->osd->width || reg->height!=reg->osd->height ) { + pthread_mutex_lock( &this->dvbsub_osd_mutex ); + this->stream->osd_renderer->free_object( reg->osd ); + reg->osd = NULL; + pthread_mutex_unlock( &this->dvbsub_osd_mutex ); + } + } + + if ( !reg->osd ) + reg->osd = this->stream->osd_renderer->new_object( this->stream->osd_renderer, reg->width, reg->height ); +} + static void update_region (dvb_spu_decoder_t * this, int region_id, int region_width, int region_height, int fill, int fill_color) { dvbsub_func_t *dvbsub = this->dvbsub; region_t *reg = &dvbsub->regions[region_id]; + page_t *page = &dvbsub->page; /* reject invalid sizes and set some limits ! */ if ( region_width<=0 || region_height<=0 || region_width>720 || region_height>576 ) { @@ -119,19 +149,13 @@ static void update_region (dvb_spu_decod free( reg->img ); reg->img = NULL; } - if ( reg->osd ) { - pthread_mutex_lock( &this->dvbsub_osd_mutex ); - this->stream->osd_renderer->free_object( reg->osd ); - reg->osd = NULL; - pthread_mutex_unlock( &this->dvbsub_osd_mutex ); - } #ifdef LOG printf("SPUDVB: rejected region %d = %dx%d\n", region_id, region_width, region_height ); #endif return; } - if ( reg->width!=region_width || reg->height!=region_height ) { + if ( reg->width*reg->height<region_width*region_height ) { #ifdef LOG printf("SPUDVB: update size of region %d = %dx%d\n", region_id, region_width, region_height); #endif @@ -139,12 +163,6 @@ static void update_region (dvb_spu_decod free( reg->img ); reg->img = NULL; } - if ( reg->osd ) { - pthread_mutex_lock( &this->dvbsub_osd_mutex ); - this->stream->osd_renderer->free_object( reg->osd ); - reg->osd = NULL; - pthread_mutex_unlock( &this->dvbsub_osd_mutex ); - } } if ( !reg->img ) { @@ -152,15 +170,20 @@ static void update_region (dvb_spu_decod lprintf( "can't allocate mem for region %d\n", region_id ); return; } - } - if ( !reg->osd ) - reg->osd = this->stream->osd_renderer->new_object( this->stream->osd_renderer, region_width, region_height ); - - if ( fill!=1 ) fill_color = 15; - memset( reg->img, fill_color, region_width*region_height ); + fill = 1; + } + + if ( fill ) { + memset( reg->img, fill_color, region_width*region_height ); + reg->empty = 1; +#ifdef LOG + printf("SPUDVB : FILL REGION %d\n", region_id); +#endif + } reg->width = region_width; reg->height = region_height; + page->regions[region_id].is_visible = 1; } @@ -171,8 +194,10 @@ static void do_plot (dvb_spu_decoder_t * i = (y * dvbsub->regions[r].width) + x; /* do some clipping */ - if ( i<(dvbsub->regions[r].width*dvbsub->regions[r].height) ) + if ( i<(dvbsub->regions[r].width*dvbsub->regions[r].height) ) { dvbsub->regions[r].img[i] = pixel; + dvbsub->regions[r].empty = 0; + } } static void plot (dvb_spu_decoder_t * this, int r, int run_length, unsigned char pixel) @@ -429,15 +454,14 @@ static void process_page_composition_seg dvbsub->page.page_version_number = (dvbsub->buf[dvbsub->i] & 0xf0) >> 4; dvbsub->page.page_state = (dvbsub->buf[dvbsub->i] & 0x0c) >> 2; dvbsub->i++; - if ((dvbsub->page.page_state != 2) && (dvbsub->page.page_state != 1)) { + if (dvbsub->page.page_state==2) { + for (r=0; r<MAX_REGIONS; r++) + dvbsub->page.regions[r].is_visible = 0; + } + else if ( dvbsub->page.page_state!=0 && dvbsub->page.page_state!=1 ) { return; } - else { - } - - for (r = 0; r < MAX_REGIONS; r++) { - dvbsub->page.regions[r].is_visible = 0; - } + while (dvbsub->i < j) { region_id = dvbsub->buf[dvbsub->i++]; dvbsub->i++; /* reserved */ @@ -448,10 +472,7 @@ static void process_page_composition_seg dvbsub->page.regions[region_id].x = region_x; dvbsub->page.regions[region_id].y = region_y; - dvbsub->page.regions[region_id].is_visible = 1; - - } - + } } @@ -668,7 +689,10 @@ static void draw_subtitles (dvb_spu_deco for (r = 0; r < MAX_REGIONS; r++) { if (this->dvbsub->regions[r].img) { - if (this->dvbsub->page.regions[r].is_visible && this->dvbsub->regions[r].osd) { + if (this->dvbsub->page.regions[r].is_visible && !this->dvbsub->regions[r].empty) { + update_osd( this, r ); + if ( !this->dvbsub->regions[r].osd ) + continue; /* clear osd */ this->stream->osd_renderer->clear( this->dvbsub->regions[r].osd ); if (this->dvbsub->regions[r].width>dest_width) { @@ -691,7 +715,7 @@ static void draw_subtitles (dvb_spu_deco printf("SPUDVB: this->vpts=%llu\n",this->vpts); #endif for ( r=0; r<MAX_REGIONS; r++ ) { - if ( this->dvbsub->page.regions[r].is_visible && this->dvbsub->regions[r].osd ) { + if ( this->dvbsub->page.regions[r].is_visible && this->dvbsub->regions[r].osd && !this->dvbsub->regions[r].empty ) { this->stream->osd_renderer->set_position( this->dvbsub->regions[r].osd, this->dvbsub->page.regions[r].x, this->dvbsub->page.regions[r].y ); this->stream->osd_renderer->show( this->dvbsub->regions[r].osd, this->vpts ); #ifdef LOG @@ -706,8 +730,6 @@ static void draw_subtitles (dvb_spu_deco #endif } } - /* reset page */ - this->dvbsub->page.regions[r].is_visible = 0; } this->dvbsub_hide_timeout.tv_nsec = 0; this->dvbsub_hide_timeout.tv_sec = time(NULL) + this->dvbsub->page.page_time_out; diff -r 97ebd38d80e4182466a80263c1bd323d64af7726 -r f57cb861ecff6bcd351c516ca2403acece4f84d1 src/xine-engine/buffer.h --- a/src/xine-engine/buffer.h Sun Dec 09 05:26:57 2007 +0000 +++ b/src/xine-engine/buffer.h Fri Dec 07 15:28:35 2007 +0100 @@ -196,6 +196,7 @@ extern "C" { #define BUF_VIDEO_CAVS 0x02620000 #define BUF_VIDEO_VP6F 0x02630000 #define BUF_VIDEO_THEORA_RAW 0x02640000 +#define BUF_VIDEO_VC1 0x02650000 /*@}*/ /** diff -r 97ebd38d80e4182466a80263c1bd323d64af7726 -r f57cb861ecff6bcd351c516ca2403acece4f84d1 src/xine-engine/buffer_types.c --- a/src/xine-engine/buffer_types.c Sun Dec 09 05:26:57 2007 +0000 +++ b/src/xine-engine/buffer_types.c Fri Dec 07 15:28:35 2007 +0100 @@ -318,6 +318,16 @@ static const video_db_t video_db[] = { }, { { + ME_FOURCC('W','V','C','1'), + ME_FOURCC('W','M','V','A'), + ME_FOURCC('v','c','-','1'), + 0 + }, + BUF_VIDEO_VC1, + "Windows Media Video VC-1" +}, +{ + { ME_FOURCC('c','r','a','m'), ME_FOURCC('C','R','A','M'), ME_FOURCC('M','S','V','C'), |
From: <fla...@gm...> - 2007-12-10 21:40:40
|
# HG changeset patch # User Diego 'Flameeyes' Pettenò <fla...@gm...> # Date 1197322830 -3600 # Node ID 534894c722bb69edd35ba3924ad21a57c3075abd # Parent ab3a3cbc9970e8658812a24cb2c5eda44ef802cf # Parent 59dbb80070008f9e54eaa5cbd0244ffedbc81497 Merge from 1.1. diff -r 534894c722bb69edd35ba3924ad21a57c3075abd -r ab3a3cbc9970e8658812a24cb2c5eda44ef802cf src/audio_out/audio_pulse_out.c --- a/src/audio_out/audio_pulse_out.c Mon Dec 10 22:40:30 2007 +0100 +++ b/src/audio_out/audio_pulse_out.c Mon Dec 10 17:43:56 2007 +0100 @@ -51,24 +51,12 @@ /* CHECKME: should this be conditional on autotools? */ extern const char *__progname; -typedef struct operation_waiter { - struct pa_operation *operation; /**< Operation waiting */ - pthread_cond_t condition; /**< Condition to signal */ - - struct operation_waiter *prev; - struct operation_waiter *next; -} operation_waiter_t; - typedef struct { audio_driver_class_t driver_class; xine_t *xine; struct pa_context *context; /*< Pulseaudio connection context */ struct pa_threaded_mainloop *mainloop; /*< Main event loop object */ - operation_waiter_t *op_list; /**< List of operations awaited */ - pthread_mutex_t op_mutex; /**< Mutex controlling op_list access. */ - pthread_t op_thread; /**< The operation_waiting_thread() thread. */ - pthread_cond_t op_list_newentries; /**< condition signalled when new entries are added to the list */ } pulse_class_t; typedef struct pulse_driver_s { @@ -80,6 +68,8 @@ typedef struct pulse_driver_s { char *host; /*< The host to connect to */ char *sink; /*< The sink to connect to */ struct pa_stream *stream; /*< Pulseaudio playback stream object */ + + pthread_mutex_t info_mutex; /**< Mutex for info callback signaling */ pa_volume_t swvolume; pa_cvolume cvolume; @@ -96,77 +86,6 @@ typedef struct pulse_driver_s { } pulse_driver_t; - -static void *operation_waiting_thread(void *class_gen) { - pulse_class_t *class = class_gen; - operation_waiter_t *curr_op; - - pthread_mutex_t condmutex = PTHREAD_MUTEX_INITIALIZER; - - while(1) { - if ( class->op_list == NULL ) { - pthread_mutex_lock(&condmutex); - pthread_cond_wait(&class->op_list_newentries, &condmutex); - } - - pa_threaded_mainloop_lock(class->mainloop); - pa_threaded_mainloop_wait(class->mainloop); - - pthread_mutex_lock(&class->op_mutex); - - curr_op = class->op_list; - while(curr_op) { - if ( pa_operation_get_state(curr_op->operation) != PA_OPERATION_RUNNING ) { - /* Unlink the current operation from the list. */ - if ( curr_op->prev ) - curr_op->prev->next = curr_op->next; - if ( class->op_list == curr_op ) - class->op_list = curr_op->next; - - pthread_cond_signal(&curr_op->condition); - } - curr_op = curr_op->next; - } - - pthread_mutex_unlock(&class->op_mutex); - - pa_threaded_mainloop_unlock(class->mainloop); - - pthread_testcancel(); - } - - return NULL; -} - -static void wait_for_operation(pulse_driver_t *this, struct pa_operation *operation) { - operation_waiter_t *op = xine_xmalloc(sizeof(operation_waiter_t)); - int signal_new_entries = 0; /* Signal that new entries are available */ - pthread_mutex_t condmutex = PTHREAD_MUTEX_INITIALIZER; - pthread_mutex_lock(&condmutex); - - op->operation = operation; - pthread_cond_init(&op->condition, NULL); - - pthread_mutex_lock(&this->pa_class->op_mutex); - - if ( this->pa_class->op_list ) - op->next = this->pa_class->op_list; - else - signal_new_entries = 1; - this->pa_class->op_list = op; - - if ( signal_new_entries ) - pthread_cond_signal(&this->pa_class->op_list_newentries); - - pthread_mutex_unlock(&this->pa_class->op_mutex); - - pthread_cond_wait(&op->condition, &condmutex); - - /* Assuming that the waiting thread already unlinked it from the list */ - pthread_mutex_lock(&this->pa_class->op_mutex); - free(op); - pthread_mutex_unlock(&this->pa_class->op_mutex); -} /** * @brief Callback function called when a stream operation succeed @@ -176,14 +95,11 @@ static void wait_for_operation(pulse_dri * instance. */ static void __xine_pa_stream_success_callback(pa_stream *const stream, const int success, - void *const this_gen) -{ - pulse_driver_t *const this = (pulse_driver_t*)this_gen; - - _x_assert(stream); _x_assert(this); - _x_assert(stream == this->stream); - - pa_threaded_mainloop_signal(this->pa_class->mainloop, 0); + void *const mutex_gen) +{ + pthread_mutex_t *const completion_mutex = (pthread_mutex_t*)mutex_gen; + + pthread_mutex_unlock(completion_mutex); } /** @@ -195,9 +111,6 @@ static void __xine_pa_context_status_cal static void __xine_pa_context_status_callback(pa_context *const ctx, void *const this_gen) { pulse_driver_t *const this = (pulse_driver_t*)this_gen; - - _x_assert(ctx); _x_assert(this); - _x_assert(ctx == this->pa_class->context); switch (pa_context_get_state(ctx)) { case PA_CONTEXT_READY: @@ -259,7 +172,7 @@ static void __xine_pa_sink_info_callback this->cvolume = info->volume; - __xine_pa_context_success_callback(ctx, 0, this); + pthread_mutex_unlock(&this->info_mutex); } /* @@ -472,8 +385,13 @@ static void ao_pulse_close(ao_driver_t * pulse_driver_t *this = (pulse_driver_t *) this_gen; if (this->stream) { - if (pa_stream_get_state(this->stream) == PA_STREAM_READY) - wait_for_operation(this, pa_stream_drain(this->stream, __xine_pa_stream_success_callback, this)); + if (pa_stream_get_state(this->stream) == PA_STREAM_READY) { + pthread_mutex_t completion_callback = PTHREAD_MUTEX_INITIALIZER; pthread_mutex_lock(&completion_callback); + pa_stream_drain(this->stream, __xine_pa_stream_success_callback, &completion_callback); + + pthread_mutex_lock(&completion_callback); + pthread_mutex_destroy(&completion_callback); + } pa_stream_disconnect(this->stream); pa_stream_unref(this->stream); @@ -506,11 +424,12 @@ static int ao_pulse_get_property (ao_dri case AO_PROP_PCM_VOL: case AO_PROP_MIXER_VOL: { + pthread_mutex_lock(&this->info_mutex); pa_operation *o = pa_context_get_sink_input_info(this->pa_class->context, pa_stream_get_index(this->stream), __xine_pa_sink_info_callback, this); if ( ! o ) return 0; - wait_for_operation(this, o); + pthread_mutex_lock(&this->info_mutex); pthread_mutex_unlock(&this->info_mutex); result = (pa_sw_volume_to_linear(this->swvolume)*100); } @@ -536,9 +455,9 @@ static int ao_pulse_set_property (ao_dri case AO_PROP_MIXER_VOL: this->swvolume = pa_sw_volume_from_linear((double)value/100.0); pa_cvolume_set(&this->cvolume, pa_stream_get_sample_spec(this->stream)->channels, this->swvolume); - wait_for_operation(this, - pa_context_set_sink_input_volume(this->pa_class->context, pa_stream_get_index(this->stream), - &this->cvolume, __xine_pa_context_success_callback, this)); + + pa_context_set_sink_input_volume(this->pa_class->context, pa_stream_get_index(this->stream), + &this->cvolume, __xine_pa_context_success_callback, this); result = value; break; @@ -549,9 +468,8 @@ static int ao_pulse_set_property (ao_dri else pa_cvolume_set(&this->cvolume, pa_stream_get_sample_spec(this->stream)->channels, this->swvolume); - wait_for_operation(this, - pa_context_set_sink_input_volume(this->pa_class->context, pa_stream_get_index(this->stream), - &this->cvolume, __xine_pa_context_success_callback, this)); + pa_context_set_sink_input_volume(this->pa_class->context, pa_stream_get_index(this->stream), + &this->cvolume, __xine_pa_context_success_callback, this); result = value; break; @@ -570,8 +488,13 @@ static int ao_pulse_ctrl(ao_driver_t *th case AO_CTRL_FLUSH_BUFFERS: _x_assert(this->stream && this->pa_class->context); - if(pa_stream_get_state(this->stream) == PA_STREAM_READY) - wait_for_operation(this,pa_stream_flush(this->stream, __xine_pa_stream_success_callback, this)); + if(pa_stream_get_state(this->stream) == PA_STREAM_READY) { + pthread_mutex_t completion_callback = PTHREAD_MUTEX_INITIALIZER; pthread_mutex_lock(&completion_callback); + pa_stream_flush(this->stream, __xine_pa_stream_success_callback, &completion_callback); + + pthread_mutex_lock(&completion_callback); + pthread_mutex_destroy(&completion_callback); + } this->frames_written = 0; @@ -637,6 +560,8 @@ static ao_driver_t *open_plugin (audio_d this->host = strdup(device); } + pthread_mutex_init(&this->info_mutex, NULL); + xprintf (class->xine, XINE_VERBOSITY_DEBUG, "audio_pulse_out: host %s sink %s\n", this->host ? this->host : "(null)", this->sink ? this->sink : "(null)"); @@ -692,10 +617,6 @@ static void *init_class (xine_t *xine, v pa_threaded_mainloop_start(this->mainloop); - pthread_mutex_init(&this->op_mutex, NULL); - pthread_cond_init(&this->op_list_newentries, NULL); - pthread_create(&this->op_thread, NULL, &operation_waiting_thread, this); - this->context = NULL; return this; |
From: <li...@yo...> - 2007-12-15 04:22:23
|
# HG changeset patch # User Darren Salt <li...@yo...> # Date 1197668716 0 # Node ID 2ef30abcd3d34ca3db06683460df9ece2312e292 # Parent c77f0999402d9c7cca95db013fcd2ef923ae76e6 # Parent e8f75116518fccd2380d503246f1133714984f1b Merge from 1.1. diff -r 2ef30abcd3d34ca3db06683460df9ece2312e292 -r c77f0999402d9c7cca95db013fcd2ef923ae76e6 ChangeLog --- a/ChangeLog Fri Dec 14 21:45:16 2007 +0000 +++ b/ChangeLog Fri Dec 14 22:23:52 2007 +0100 @@ -67,6 +67,7 @@ xine-lib (1.1.9) (unreleased) * Build fix for when using Linux 2.6.23 headers. [Bug 1820958] * Implemented decoding of XML character entities with codes >= 256. This requires conversion to UTF-8 of entities with codes >= 128. + * Handle initial Unicde BOMs in XML; convert other UTF encodings to UTF-8. * Fixed ATSC support. [Bug 1749508] * Fixed a possible DVB plugin crash when switching channels. * Fixed a crash closing the frontend. [Bug FS#3] @@ -80,6 +81,7 @@ xine-lib (1.1.9) (unreleased) * DXR3 encoding with external ffmpeg should be fixed now. (This was broken by ffmpeg revision 9283). * Enabled the WMV VC1 (ffmpeg) codec. + * Fixed a crash that happened when a video output was closed xine-lib (1.1.8) * Send a channel-changed event to the frontend when receiving the SYNC diff -r 2ef30abcd3d34ca3db06683460df9ece2312e292 -r c77f0999402d9c7cca95db013fcd2ef923ae76e6 src/xine-engine/video_out.c --- a/src/xine-engine/video_out.c Fri Dec 14 21:45:16 2007 +0000 +++ b/src/xine-engine/video_out.c Fri Dec 14 22:23:52 2007 +0100 @@ -979,6 +979,7 @@ static vo_frame_t *get_next_frame (vos_t if (!img->stream || _x_stream_info_get(img->stream, XINE_STREAM_INFO_VIDEO_HAS_STILL) || + !img->stream->video_fifo || img->stream->video_fifo->size(img->stream->video_fifo) < 10) { lprintf ("possible still frame\n"); diff -r 2ef30abcd3d34ca3db06683460df9ece2312e292 -r c77f0999402d9c7cca95db013fcd2ef923ae76e6 src/xine-utils/xmllexer.c --- a/src/xine-utils/xmllexer.c Fri Dec 14 21:45:16 2007 +0000 +++ b/src/xine-utils/xmllexer.c Fri Dec 14 22:23:52 2007 +0100 @@ -40,6 +40,8 @@ #include <iconv.h> #endif +#include "bswap.h" + /* private constants*/ /* private global variables */ @@ -47,6 +49,45 @@ static int lexbuf_size = 0; static int lexbuf_size = 0; static int lexbuf_pos = 0; static int in_comment = 0; +static char *lex_malloc = NULL; + +enum utf { UTF32BE, UTF32LE, UTF16BE, UTF16LE }; + +static void lex_convert (const char * buf, int size, enum utf utf) +{ + char *utf8 = malloc (size * (utf >= UTF16BE ? 3 : 6) + 1); + char *bp = utf8; + while (size > 0) + { + uint32_t c = 0; + switch (utf) + { + case UTF32BE: c = _X_BE_32 (buf); buf += 4; break; + case UTF32LE: c = _X_LE_32 (buf); buf += 4; break; + case UTF16BE: c = _X_BE_16 (buf); buf += 2; break; + case UTF16LE: c = _X_LE_16 (buf); buf += 2; break; + } + if (!c) + break; /* embed a NUL, get a truncated string */ + if (c < 128) + *bp++ = c; + else + { + int count = (c >= 0x04000000) ? 5 : + (c >= 0x00200000) ? 4 : + (c >= 0x00010000) ? 3 : + (c >= 0x00000800) ? 2 : 1; + *bp = (char)(0x1F80 >> count); + count *= 6; + *bp++ |= c >> count; + while ((count -= 6) >= 0) + *bp++ = 128 | ((c >> count) & 0x3F); + } + } + *bp = 0; + lexbuf_size = bp - utf8; + lexbuf = lex_malloc = realloc (utf8, lexbuf_size + 1); +} static enum { NORMAL, @@ -55,8 +96,29 @@ static enum { } lex_mode = NORMAL; void lexer_init(const char * buf, int size) { + static const char boms[] = { 0xFF, 0xFE, 0, 0, 0xFE, 0xFF }, + bom_utf8[] = { 0xEF, 0xBB, 0xBF }; + + free (lex_malloc); + lex_malloc = NULL; + lexbuf = buf; lexbuf_size = size; + + if (size >= 4 && !memcmp (buf, boms + 2, 4)) + lex_convert (buf + 4, size - 4, UTF32BE); + else if (size >= 4 && !memcmp (buf, boms, 4)) + lex_convert (buf + 4, size - 4, UTF32LE); + else if (size >= 3 && !memcmp (buf, bom_utf8, 4)) + { + lexbuf += 3; + lexbuf_size -= 3; + } + else if (size >= 2 && !memcmp (buf, boms + 4, 2)) + lex_convert (buf + 2, size - 2, UTF16BE); + else if (size >= 2 && !memcmp (buf, boms, 2)) + lex_convert (buf + 2, size - 2, UTF16LE); + lexbuf_pos = 0; lex_mode = NORMAL; in_comment = 0; |
From: <li...@yo...> - 2007-12-17 16:57:46
|
# HG changeset patch # User Darren Salt <li...@yo...> # Date 1197910654 0 # Node ID d5261f020b897a9b5521b997297b86d1b9382970 # Parent b4e179bf27d09cf95c2523af3e838351dd983ca4 # Parent 0fc19b2fcbe672867c6a2d912b91b2ee9060051b Merge from 1.1. diff -r d5261f020b897a9b5521b997297b86d1b9382970 -r b4e179bf27d09cf95c2523af3e838351dd983ca4 ChangeLog --- a/ChangeLog Mon Dec 17 16:57:34 2007 +0000 +++ b/ChangeLog Sun Dec 16 14:20:34 2007 +0000 @@ -82,6 +82,7 @@ xine-lib (1.1.9) (unreleased) (This was broken by ffmpeg revision 9283). * Enabled the WMV VC1 (ffmpeg) codec. * Fixed a crash that happened when a video output was closed + * Made the Real demuxer recognise http references. xine-lib (1.1.8) * Send a channel-changed event to the frontend when receiving the SYNC diff -r d5261f020b897a9b5521b997297b86d1b9382970 -r b4e179bf27d09cf95c2523af3e838351dd983ca4 src/demuxers/demux_real.c --- a/src/demuxers/demux_real.c Mon Dec 17 16:57:34 2007 +0000 +++ b/src/demuxers/demux_real.c Sun Dec 16 14:20:34 2007 +0000 @@ -820,8 +820,8 @@ static int demux_real_parse_references( if( !strncmp(&buf[i],"-->",3) ) comment = 0; - if( (!strncmp(&buf[i],"pnm://",6) || !strncmp(&buf[i],"rtsp://",7)) && - !comment ) { + if( (!strncmp(&buf[i],"pnm://",6) || !strncmp(&buf[i],"rtsp://",7) || + !strncmp(&buf[i],"http://",7)) && !comment ) { for(j=i; buf[j] && buf[j] != '"' && !isspace(buf[j]); j++ ) ; buf[j]='\0'; @@ -1529,7 +1529,8 @@ static int real_check_stream_type(uint8_ return 1; buf[len] = '\0'; - if( strstr(buf,"pnm://") || strstr(buf,"rtsp://") || strstr(buf,"<smil>") ) + if( strstr(buf,"pnm://") || strstr(buf,"rtsp://") || strstr(buf,"<smil>") || + strstr(buf,"http://") ) return 2; return 0; diff -r d5261f020b897a9b5521b997297b86d1b9382970 -r b4e179bf27d09cf95c2523af3e838351dd983ca4 src/xine-utils/xmllexer.c --- a/src/xine-utils/xmllexer.c Mon Dec 17 16:57:34 2007 +0000 +++ b/src/xine-utils/xmllexer.c Sun Dec 16 14:20:34 2007 +0000 @@ -109,7 +109,7 @@ void lexer_init(const char * buf, int si lex_convert (buf + 4, size - 4, UTF32BE); else if (size >= 4 && !memcmp (buf, boms, 4)) lex_convert (buf + 4, size - 4, UTF32LE); - else if (size >= 3 && !memcmp (buf, bom_utf8, 4)) + else if (size >= 3 && !memcmp (buf, bom_utf8, 3)) { lexbuf += 3; lexbuf_size -= 3; |
From: <li...@yo...> - 2007-12-18 23:22:58
|
# HG changeset patch # User Darren Salt <li...@yo...> # Date 1198019446 0 # Node ID ccf20c11641aa2773a4f046fa914f6ae8d567cf9 # Parent 0b60e0194e923562c568f5fbc77f6f0555a60dd4 # Parent 8ffe18290ba5579c9e12647289dcbdadce22deb0 Merge from 1.1. diff -r ccf20c11641aa2773a4f046fa914f6ae8d567cf9 -r 0b60e0194e923562c568f5fbc77f6f0555a60dd4 ChangeLog --- a/ChangeLog Tue Dec 18 23:10:46 2007 +0000 +++ b/ChangeLog Tue Dec 18 21:55:52 2007 +0000 @@ -83,6 +83,8 @@ xine-lib (1.1.9) (unreleased) * Enabled the WMV VC1 (ffmpeg) codec. * Fixed a crash that happened when a video output was closed * Made the Real demuxer recognise http references. + * Require correct URL encoding of '#'s which aren't separators. + * Don't decode %nn in raw filenames. [Bug 1784272] xine-lib (1.1.8) * Send a channel-changed event to the frontend when receiving the SYNC diff -r ccf20c11641aa2773a4f046fa914f6ae8d567cf9 -r 0b60e0194e923562c568f5fbc77f6f0555a60dd4 src/demuxers/demux_flv.c --- a/src/demuxers/demux_flv.c Tue Dec 18 23:10:46 2007 +0000 +++ b/src/demuxers/demux_flv.c Tue Dec 18 21:55:52 2007 +0000 @@ -870,6 +870,30 @@ static demux_plugin_t *open_plugin (demu return &this->demux_plugin; } +static const char *get_description (demux_class_t *this_gen) { + return "Flash Video file demux plugin"; +} + +static const char *get_identifier (demux_class_t *this_gen) { + return "FLV"; +} + +static const char *get_extensions (demux_class_t *this_gen) { + return "flv"; +} + +static const char *get_mimetypes (demux_class_t *this_gen) { + return "video/x-flv: flv: Flash video;" + "video/flv: flv: Flash video;" + "application/x-flash-video: flv: Flash video;"; +} + +static void class_dispose (demux_class_t *this_gen) { + demux_flv_class_t *this = (demux_flv_class_t *) this_gen; + + free (this); +} + static void *init_plugin (xine_t *xine, void *data) { demux_flv_class_t *this; @@ -878,7 +902,9 @@ static void *init_plugin (xine_t *xine, this->demux_class.open_plugin = open_plugin; this->demux_class.description = N_("Flash Video file demux plugin"); this->demux_class.identifier = "FLV"; - this->demux_class.mimetypes = "video/x-flv: flv: Flash video;"; + this->demux_class.mimetypes = "video/x-flv: flv: Flash video;" + "video/flv: flv: Flash video;" + "application/x-flash-video: flv: Flash video;"; this->demux_class.extensions = "flv"; this->demux_class.dispose = default_demux_class_dispose; @@ -897,3 +923,4 @@ const plugin_info_t xine_plugin_info[] E { PLUGIN_DEMUX, 27, "flashvideo", XINE_VERSION_CODE, &demux_info_flv, init_plugin }, { PLUGIN_NONE, 0, "", 0, NULL, NULL } }; + diff -r ccf20c11641aa2773a4f046fa914f6ae8d567cf9 -r 0b60e0194e923562c568f5fbc77f6f0555a60dd4 src/input/input_file.c --- a/src/input/input_file.c Tue Dec 18 23:10:46 2007 +0000 +++ b/src/input/input_file.c Tue Dec 18 21:55:52 2007 +0000 @@ -337,7 +337,7 @@ static int file_plugin_open (input_plugi lprintf("file_plugin_open\n"); - if (strncasecmp (this->mrl, "file:", 5) == 0) + if (strncasecmp (this->mrl, "file:/", 6) == 0) { if (strncasecmp (this->mrl, "file://localhost/", 16) == 0) filename = decode_uri(&(this->mrl[16])); @@ -347,42 +347,26 @@ static int file_plugin_open (input_plugi filename = decode_uri(&(this->mrl[5])); } else - filename = decode_uri(this->mrl); + filename = strdup(this->mrl); /* NEVER unescape plain file names! */ this->fh = open (filename, O_RDONLY|O_BINARY); - + + if (this->fh == -1) { + if (errno == EACCES) { + _x_message(this->stream, XINE_MSG_PERMISSION_ERROR, this->mrl, NULL); + xine_log (this->stream->xine, XINE_LOG_MSG, + _("input_file: Permission denied: >%s<\n"), this->mrl); + } else if (errno == ENOENT) { + _x_message(this->stream, XINE_MSG_FILE_NOT_FOUND, this->mrl, NULL); + xine_log (this->stream->xine, XINE_LOG_MSG, + _("input_file: File not found: >%s<\n"), this->mrl); + } + + free(filename); + return -1; + } + free(filename); - - if (this->fh == -1) { - /* try again without unescaping; such MRLs might be invalid, - * but we are a nice software */ - if (strncasecmp (this->mrl, "file:", 5) == 0) - { - if (strncasecmp (this->mrl, "file://localhost/", 16) == 0) - this->fh = open(&this->mrl[16], O_RDONLY|O_BINARY); - else if (strncasecmp (this->mrl, "file://127.0.0.1/", 16) == 0) - this->fh = open(&this->mrl[16], O_RDONLY|O_BINARY); - else - this->fh = open(&this->mrl[5], O_RDONLY|O_BINARY); - } - else - this->fh = open(this->mrl, O_RDONLY|O_BINARY); - - if (this->fh == -1) { - if (errno == EACCES) { - _x_message(this->stream, XINE_MSG_PERMISSION_ERROR, this->mrl, NULL); - xine_log (this->stream->xine, XINE_LOG_MSG, - _("input_file: Permission denied: >%s<\n"), this->mrl); - return -1; - } else if (errno == ENOENT) { - _x_message(this->stream, XINE_MSG_FILE_NOT_FOUND, this->mrl, NULL); - xine_log (this->stream->xine, XINE_LOG_MSG, - _("input_file: File not found: >%s<\n"), this->mrl); - } - - return -1; - } - } #ifdef HAVE_MMAP this->mmap_on = 0; diff -r ccf20c11641aa2773a4f046fa914f6ae8d567cf9 -r 0b60e0194e923562c568f5fbc77f6f0555a60dd4 src/xine-engine/xine.c --- a/src/xine-engine/xine.c Tue Dec 18 23:10:46 2007 +0000 +++ b/src/xine-engine/xine.c Tue Dec 18 21:55:52 2007 +0000 @@ -35,6 +35,7 @@ #include <pthread.h> #include <stdarg.h> #include <stdio.h> +#include <ctype.h> #if defined (__linux__) || defined (__GLIBC__) #include <endian.h> #elif defined (__FreeBSD__) @@ -819,9 +820,9 @@ void _x_flush_events_queues (xine_stream pthread_mutex_unlock (&stream->event_queues_lock); } -static int open_internal (xine_stream_t *stream, const char *mrl) { - - const char *stream_setup; +/*static*/ int open_internal (xine_stream_t *stream, const char *mrl) { + + const char *stream_setup = NULL; int no_cache = 0; if (!mrl) { @@ -846,13 +847,19 @@ static int open_internal (xine_stream_t * look for a stream_setup in MRL and try finding an input plugin */ - stream_setup = mrl; - /* look for the next '#' or try the whole MRL, if none is found */ - while (*stream_setup && - (stream_setup = (strchr(stream_setup, '#') ? strchr(stream_setup, '#') : strlen(mrl) + mrl))) { - char input_source[stream_setup - mrl + 1]; - memcpy(input_source, mrl, stream_setup - mrl); - input_source[stream_setup - mrl] = '\0'; + if (isalpha (*mrl)) + { + stream_setup = mrl + 1; + while (isalnum (*stream_setup) || *stream_setup == '+' || *stream_setup == '-' || *stream_setup == '.') + ++stream_setup; + if (stream_setup[0] == ':' && stream_setup[1] == '/') + stream_setup = strchr (mrl, '#'); + else + stream_setup = NULL; + } + + { + char *input_source = strndup (mrl, stream_setup ? stream_setup - mrl : strlen (mrl)); /* * find an input plugin @@ -874,6 +881,7 @@ static int open_internal (xine_stream_t case 1: /* Open successfull */ break; case -1: /* Open unsuccessfull, but correct plugin */ + free(input_source); stream->err = XINE_ERROR_INPUT_FAILED; _x_flush_events_queues (stream); return 0; @@ -883,13 +891,9 @@ static int open_internal (xine_stream_t stream->input_plugin = NULL; stream->err = XINE_ERROR_INPUT_FAILED; } - if ( res ) break; - } - - /* if we fail when passing up to the first '#' to the input plugins, - * maybe the user stated a (invalid) MRL, with a '#' belonging to the - * input source -> look for the next '#' and try again */ - if (*stream_setup) stream_setup++; + } + + free(input_source); } if (!stream->input_plugin) { @@ -899,7 +903,7 @@ static int open_internal (xine_stream_t return 0; } - if (*stream_setup) { + if (stream_setup) { while (stream_setup && *stream_setup && *(++stream_setup)) { if (strncasecmp(stream_setup, "demux", 5) == 0) { |
From: <fla...@gm...> - 2007-12-22 23:23:53
|
# HG changeset patch # User Diego 'Flameeyes' Pettenò <fla...@gm...> # Date 1198365821 -3600 # Node ID 8d409674d609dcc8ccd08397d7794a9aa2c54bc9 # Parent a5d05dd53685d792bde6c86688020374e5db6ca7 # Parent d1310c5691a4116b8222335e496a1a73c9e9b5f1 Merge from 1.1. diff -r 8d409674d609dcc8ccd08397d7794a9aa2c54bc9 -r a5d05dd53685d792bde6c86688020374e5db6ca7 ChangeLog --- a/ChangeLog Sun Dec 23 00:23:41 2007 +0100 +++ b/ChangeLog Sun Dec 23 00:18:43 2007 +0100 @@ -85,6 +85,9 @@ xine-lib (1.1.9) (unreleased) * Made the Real demuxer recognise http references. * Require correct URL encoding of '#'s which aren't separators. * Don't decode %nn in raw filenames. [Bug 1784272] + * Always enable a52dec capabilities for external a52dec, this makes it + possible to use the DJB accelerated FFT when using the external a52dec + liba52 library. xine-lib (1.1.8) * Send a channel-changed event to the frontend when receiving the SYNC diff -r 8d409674d609dcc8ccd08397d7794a9aa2c54bc9 -r a5d05dd53685d792bde6c86688020374e5db6ca7 src/audio_dec/xine_a52_decoder.c --- a/src/audio_dec/xine_a52_decoder.c Sun Dec 23 00:23:41 2007 +0100 +++ b/src/audio_dec/xine_a52_decoder.c Sun Dec 23 00:18:43 2007 +0100 @@ -673,8 +673,25 @@ static audio_decoder_t *open_plugin (aud this->pts_list[0] = 0; this->pts_list_position = 0; - if( !this->a52_state ) - this->a52_state = a52_init (xine_mm_accel()); + if( !this->a52_state ) { + this->a52_state = +#ifdef HAVE_A52DEC_A52_H /* External liba52 */ + /* When using external liba52, enable _all_ capabilities, even + if that might break stuff if they add some new capability + that depends on CPU's caps. + At the moment the only capability is DJBFFT, which is tested + only if djbfft is being used at compile time. + + The actual question would be: why don't they check for + capabilities themselves? + */ +#warning "Enabling all external liba52 capabilities." + a52_init (0xFFFFFFFF) +#else + a52_init (xine_mm_accel()) +#endif + ; + } /* * find out if this driver supports a52 output |
From: <li...@yo...> - 2008-01-01 03:06:49
|
# HG changeset patch # User Darren Salt <li...@yo...> # Date 1199156018 0 # Node ID 68d664661603dfbe76ee5b76e7760f8e4752c7cf # Parent 03b6e8a40e93f53cad184b5107b81097bd10c8e7 # Parent 9bee0ce95d11cfe9234f15f66f96e0d77f02bd98 Merge from 1.1. diff -r 68d664661603dfbe76ee5b76e7760f8e4752c7cf -r 03b6e8a40e93f53cad184b5107b81097bd10c8e7 include/xine/xmllexer.h --- a/include/xine/xmllexer.h Tue Jan 01 02:53:38 2008 +0000 +++ b/include/xine/xmllexer.h Mon Dec 31 23:21:09 2007 +0100 @@ -53,7 +53,8 @@ /* public functions */ void lexer_init(const char * buf, int size) XINE_PROTECTED; -int lexer_get_token(char ** tok, int * tok_size) XINE_PROTECTED; +int lexer_get_token_d(char ** tok, int * tok_size, int fixed) XINE_PROTECTED; +int lexer_get_token(char * tok, int tok_size) XINE_PROTECTED; char *lexer_decode_entities (const char *tok) XINE_PROTECTED; #endif diff -r 68d664661603dfbe76ee5b76e7760f8e4752c7cf -r 03b6e8a40e93f53cad184b5107b81097bd10c8e7 src/combined/ffmpeg/ff_video_decoder.c --- a/src/combined/ffmpeg/ff_video_decoder.c Tue Jan 01 02:53:38 2008 +0000 +++ b/src/combined/ffmpeg/ff_video_decoder.c Mon Dec 31 23:21:09 2007 +0100 @@ -63,6 +63,8 @@ typedef struct ff_video_class_s { int pp_quality; int thread_count; + int8_t skip_loop_filter_enum; + int8_t choose_speed_over_accuracy; xine_t *xine; } ff_video_class_t; @@ -314,6 +316,24 @@ static const ff_codec_t ff_video_lookup[ {BUF_VIDEO_THEORA_RAW, CODEC_ID_THEORA, "Theora (ffmpeg)"}, }; +static const char *const skip_loop_filter_enum_names[] = { + "default", /* AVDISCARD_DEFAULT */ + "none", /* AVDISCARD_NONE */ + "nonref", /* AVDISCARD_NONREF */ + "bidir", /* AVDISCARD_BIDIR */ + "nonkey", /* AVDISCARD_NONKEY */ + "all", /* AVDISCARD_ALL */ + NULL +}; + +static const int skip_loop_filter_enum_values[] = { + AVDISCARD_DEFAULT, + AVDISCARD_NONE, + AVDISCARD_NONREF, + AVDISCARD_BIDIR, + AVDISCARD_NONKEY, + AVDISCARD_ALL +}; static void init_video_codec (ff_video_decoder_t *this, unsigned int codec_type) { size_t i; @@ -358,6 +378,9 @@ static void init_video_codec (ff_video_d this->context->flags |= CODEC_FLAG_EMU_EDGE; } + if (this->class->choose_speed_over_accuracy) + this->context->flags2 |= CODEC_FLAG2_FAST; + pthread_mutex_lock(&ffmpeg_lock); if (avcodec_open (this->context, this->codec) < 0) { pthread_mutex_unlock(&ffmpeg_lock); @@ -373,6 +396,8 @@ static void init_video_codec (ff_video_d avcodec_thread_init(this->context, this->class->thread_count); this->context->thread_count = this->class->thread_count; } + + this->context->skip_loop_filter = skip_loop_filter_enum_values[this->class->skip_loop_filter_enum]; pthread_mutex_unlock(&ffmpeg_lock); @@ -429,6 +454,18 @@ static void init_video_codec (ff_video_d break; } +} + +static void choose_speed_over_accuracy_cb(void *user_data, xine_cfg_entry_t *entry) { + ff_video_class_t *class = (ff_video_class_t *) user_data; + + class->choose_speed_over_accuracy = entry->num_value; +} + +static void skip_loop_filter_enum_cb(void *user_data, xine_cfg_entry_t *entry) { + ff_video_class_t *class = (ff_video_class_t *) user_data; + + class->skip_loop_filter_enum = entry->num_value; } static void thread_count_cb(void *user_data, xine_cfg_entry_t *entry) { @@ -1158,7 +1195,7 @@ static void ff_handle_buffer (ff_video_d int got_one_picture = 0; int offset = 0; int codec_type = buf->type & 0xFFFF0000; - int video_step_to_use; + int video_step_to_use = this->video_step; /* pad input data */ /* note: bitstream, alt bitstream reader or something will cause @@ -1558,9 +1595,27 @@ void *init_video_plugin (xine_t *xine, v _("You can adjust the number of video decoding threads which FFmpeg may use.\n" "Higher values should speed up decoding but it depends on the codec used " "whether parallel decoding is supported. A rule of thumb is to have one " - "decoding thread per logical CPU (typically 1 to 4). A change will take " - "effect with playing the next stream."), + "decoding thread per logical CPU (typically 1 to 4).\n" + "A change of this setting will take effect with playing the next stream."), 10, thread_count_cb, this); + + this->skip_loop_filter_enum = xine->config->register_enum(config, "video.processing.ffmpeg_skip_loop_filter", 0, + (char **)skip_loop_filter_enum_names, + _("Skip loop filter"), + _("You can control for which frames the loop filter shall be skipped after " + "decoding.\n" + "Skipping the loop filter will speedup decoding but may lead to artefacts. " + "The number of frames for which it is skipped increases from 'none' to 'all'. " + "The default value leaves the decision up to the implementation.\n" + "A change of this setting will take effect with playing the next stream."), + 10, skip_loop_filter_enum_cb, this); + + this->choose_speed_over_accuracy = xine->config->register_bool(config, "video.processing.ffmpeg_choose_speed_over_accuracy", 0, + _("Choose speed over specification compliance"), + _("You may want to allow speed cheats which violate codec specification.\n" + "Cheating may speed up decoding but can also lead to decoding artefacts.\n" + "A change of this setting will take effect with playing the next stream."), + 10, choose_speed_over_accuracy_cb, this); return this; } diff -r 68d664661603dfbe76ee5b76e7760f8e4752c7cf -r 03b6e8a40e93f53cad184b5107b81097bd10c8e7 src/video_dec/libmpeg2/header.c --- a/src/video_dec/libmpeg2/header.c Tue Jan 01 02:53:38 2008 +0000 +++ b/src/video_dec/libmpeg2/header.c Mon Dec 31 23:21:09 2007 +0100 @@ -101,6 +101,14 @@ static uint32_t get_bits(uint8_t *buffer return result; } +static int32_t get_bits_signed(uint8_t *buffer, uint32_t count, uint32_t *bit_position) { + uint32_t value = get_bits(buffer, count, bit_position); + uint32_t sign_mask = (uint32_t)(-1 << (count - 1)); + if (value & sign_mask) + value |= sign_mask; /* sign-extend value */ + return (int32_t)value; +} + void mpeg2_header_state_init (picture_t * picture) { picture->scan = mpeg2_scan_norm; @@ -291,13 +299,13 @@ static int picture_display_extension (pi bit_position = 0; padding = get_bits(buffer, 4, &bit_position); - picture->frame_centre_horizontal_offset = get_bits(buffer, 16, &bit_position); + picture->frame_centre_horizontal_offset = get_bits_signed(buffer, 16, &bit_position); padding = get_bits(buffer, 1, &bit_position); - picture->frame_centre_vertical_offset = get_bits(buffer, 16, &bit_position); + picture->frame_centre_vertical_offset = get_bits_signed(buffer, 16, &bit_position); padding = get_bits(buffer, 1, &bit_position); #ifdef LOG_PAN_SCAN - printf("Pan & Scan centre (x,y) = (%u, %u)\n", + printf("Pan & Scan centre (x,y) = (%d, %d)\n", picture->frame_centre_horizontal_offset, picture->frame_centre_vertical_offset); #endif diff -r 68d664661603dfbe76ee5b76e7760f8e4752c7cf -r 03b6e8a40e93f53cad184b5107b81097bd10c8e7 src/video_dec/libmpeg2/mpeg2_internal.h --- a/src/video_dec/libmpeg2/mpeg2_internal.h Tue Jan 01 02:53:38 2008 +0000 +++ b/src/video_dec/libmpeg2/mpeg2_internal.h Mon Dec 31 23:21:09 2007 +0100 @@ -177,8 +177,8 @@ typedef struct picture_s { int progressive_sequence; int repeat_first_field; int progressive_frame; - uint32_t frame_centre_horizontal_offset; - uint32_t frame_centre_vertical_offset; + int32_t frame_centre_horizontal_offset; + int32_t frame_centre_vertical_offset; uint32_t video_format; uint32_t colour_description; uint32_t colour_primatives; diff -r 68d664661603dfbe76ee5b76e7760f8e4752c7cf -r 03b6e8a40e93f53cad184b5107b81097bd10c8e7 src/video_out/video_out_directfb.c --- a/src/video_out/video_out_directfb.c Tue Jan 01 02:53:38 2008 +0000 +++ b/src/video_out/video_out_directfb.c Mon Dec 31 23:21:09 2007 +0100 @@ -923,18 +923,6 @@ static int directfb_get_property (vo_dri case VO_PROP_WINDOW_HEIGHT: return this->sc.gui_height; - case VO_PROP_OUTPUT_WIDTH: - return this->cur_frame->sc.output_width; - - case VO_PROP_OUTPUT_HEIGHT: - return this->cur_frame->sc.output_height; - - case VO_PROP_OUTPUT_XOFFSET: - return this->cur_frame->sc.output_xoffset; - - case VO_PROP_OUTPUT_YOFFSET: - return this->cur_frame->sc.output_yoffset; - case VO_PROP_MAX_NUM_FRAMES: return (this->type & DLTF_VIDEO) ? 8 : 15; diff -r 68d664661603dfbe76ee5b76e7760f8e4752c7cf -r 03b6e8a40e93f53cad184b5107b81097bd10c8e7 src/xine-engine/configfile.c --- a/src/xine-engine/configfile.c Tue Jan 01 02:53:38 2008 +0000 +++ b/src/xine-engine/configfile.c Mon Dec 31 23:21:09 2007 +0100 @@ -1060,7 +1060,7 @@ void xine_config_save (xine_t *xine, con if (!entry->key[0]) /* deleted key */ - continue; + goto next; lprintf ("saving key '%s'\n", entry->key); @@ -1130,6 +1130,7 @@ void xine_config_save (xine_t *xine, con break; } + next: entry = entry->next; } pthread_mutex_unlock(&this->config_lock); diff -r 68d664661603dfbe76ee5b76e7760f8e4752c7cf -r 03b6e8a40e93f53cad184b5107b81097bd10c8e7 src/xine-utils/xmllexer.c --- a/src/xine-utils/xmllexer.c Tue Jan 01 02:53:38 2008 +0000 +++ b/src/xine-utils/xmllexer.c Mon Dec 31 23:21:09 2007 +0100 @@ -144,7 +144,7 @@ typedef enum { STATE_IDENT /* must be last */ } lexer_state_t; -int lexer_get_token(char ** _tok, int * _tok_size) { +int lexer_get_token_d(char ** _tok, int * _tok_size, int fixed) { char *tok = *_tok; int tok_size = *_tok_size; int tok_pos = 0; @@ -515,12 +515,14 @@ int lexer_get_token(char ** _tok, int * /* pb */ if (tok_pos >= tok_size) { + if (fixed) + return T_ERROR; *_tok_size *= 2; *_tok = realloc (*_tok, *_tok_size); lprintf("token buffer is too small\n"); lprintf("increasing buffer size to %d bytes\n", *_tok_size); if (*_tok) { - return lexer_get_token (_tok, _tok_size); + return lexer_get_token_d (_tok, _tok_size, 0); } else { return T_ERROR; } @@ -564,6 +566,12 @@ int lexer_get_token(char ** _tok, int * /* tok == null */ lprintf("token buffer is null\n"); return T_ERROR; +} + +/* for ABI compatibility */ +int lexer_get_token (char *tok, int tok_size) +{ + return lexer_get_token_d (&tok, &tok_size, 1); } static struct { diff -r 68d664661603dfbe76ee5b76e7760f8e4752c7cf -r 03b6e8a40e93f53cad184b5107b81097bd10c8e7 src/xine-utils/xmlparser.c --- a/src/xine-utils/xmlparser.c Tue Jan 01 02:53:38 2008 +0000 +++ b/src/xine-utils/xmlparser.c Mon Dec 31 23:21:09 2007 +0100 @@ -241,7 +241,7 @@ static int xml_parser_get_node_internal memset (tok, 0, *token_buffer_size); - while ((bypass_get_token) || (res = lexer_get_token(token_buffer, token_buffer_size)) != T_ERROR) { + while ((bypass_get_token) || (res = lexer_get_token_d(token_buffer, token_buffer_size, 0)) != T_ERROR) { tok = *token_buffer; bypass_get_token = 0; lprintf("info: %d - %d : '%s'\n", state, res, tok); |
From: <li...@yo...> - 2008-01-06 21:32:23
|
# HG changeset patch # User Darren Salt <li...@yo...> # Date 1199654429 0 # Node ID 04ba8050c38ecb04bcf4208377d20c95d6a0d07a # Parent e19ff9a0ec5577f5acd748d10fa8fdf953c4a4c3 # Parent edd79c4bf466a9eed908c65ba29da5b269573128 Merge from 1.1. diff -r 04ba8050c38ecb04bcf4208377d20c95d6a0d07a -r e19ff9a0ec5577f5acd748d10fa8fdf953c4a4c3 .hgsigs --- a/.hgsigs Sun Jan 06 21:20:29 2008 +0000 +++ b/.hgsigs Thu Jan 03 01:38:06 2008 +0100 @@ -1,2 +1,3 @@ 5e6d0656ac4efdc1a89ed0fc32f11050f4a22970 5e6d0656ac4efdc1a89ed0fc32f11050f4a22970 0 iD8DBQBGZ207sBKtjPGfWZ8RAhdEAKCrkwiBT6bTof7ro5QQwewRfF/dMACffsvfK42+ahQrjpSfQxEp6k7RpCI= 42358e16442fe54fa554006e0b0bafd51e065c32 0 iD8DBQBG0xz0zbwfTn7RbcARAoD3AJ4012pabmpQvCKKDokZNyZzfPIbWgCfRk5FRly/Eei/xXnSaT54XHAT5KM= +1dbf784bebc791266fcca02e917ee63034ac2e0b 0 iD8DBQBHgQ2mzbwfTn7RbcARArl9AKCslqZDrrm0GiU3IbBvcQVbOdSXlwCgyEMuHY2y/+T6WEeB2CXvCTs5ulI= diff -r 04ba8050c38ecb04bcf4208377d20c95d6a0d07a -r e19ff9a0ec5577f5acd748d10fa8fdf953c4a4c3 .hgtags --- a/.hgtags Sun Jan 06 21:20:29 2008 +0000 +++ b/.hgtags Thu Jan 03 01:38:06 2008 +0100 @@ -62,3 +62,4 @@ 7b60f85a95345c41fb074dc5e3f7355d9e72968e 7b60f85a95345c41fb074dc5e3f7355d9e72968e xine-lib-1_1_6-release ab1531337553ad5eac24a69ac665eae33916b423 xine-lib-1_1_7-release e0a332b9d3e8bb3fad4d7feac1e519292b062056 xine-lib-1_1_8-release +b6be674453e922114b55d4613cb197c77d19f094 xine-lib-1_1_9-release diff -r 04ba8050c38ecb04bcf4208377d20c95d6a0d07a -r e19ff9a0ec5577f5acd748d10fa8fdf953c4a4c3 ChangeLog --- a/ChangeLog Sun Jan 06 21:20:29 2008 +0000 +++ b/ChangeLog Thu Jan 03 01:38:06 2008 +0100 @@ -53,7 +53,7 @@ xine-lib (1.1.90) (Unreleased) * Check for supported extensions before opening the plugin and remove redundant core from plugins. -xine-lib (1.1.9) (unreleased) +xine-lib (1.1.9) * Fix dvd://.../title[.chapter] handling (somewhat broken in 1.1.8). * Fix switching DVB subtitles channels. * DVB sub: switch to dyn mem alloc and allow multiple CLUTs per page. @@ -80,9 +80,9 @@ xine-lib (1.1.9) (unreleased) buffer. * DXR3 encoding with external ffmpeg should be fixed now. (This was broken by ffmpeg revision 9283). - * Enabled the WMV VC1 (ffmpeg) codec. + * Enabled the WMV VC1 & VMware Screen (ffmpeg) codecs. * Fixed a crash that happened when a video output was closed - * Made the Real demuxer recognise http references. + * Made the Real demuxer recognise simple lists of http references. * Require correct URL encoding of '#'s which aren't separators. * Don't decode %nn in raw filenames. [Bug 1784272] * Always enable a52dec capabilities for external a52dec, this makes it @@ -93,6 +93,13 @@ xine-lib (1.1.9) (unreleased) reading the COMM_TAG. [Bug #6] * Avoid potential mislinkage at install time if a system-wide libxine.so is present but is *not* pointing at libxine.so.1. + * Update French translation, thanks to Christophe Giraud. [Bug #15] + * Detect corrupted or broken seek tables in CBR MP3 files. [Bug #3] + * Fixed an issue in input_pvr with setting the frequency of the tuner for + ivtv versions 0.10.6+ + * Add Turkish translation by Serdar Soytetir and Server Acim. + * Workaround for subtitle rendering when using variable-length character + encodings other than UTF-8. (There is probably still some breakage here.) xine-lib (1.1.8) * Send a channel-changed event to the frontend when receiving the SYNC @@ -1660,3 +1667,4 @@ xine (0.3.0+older) unstable; urgency=low - minor Makefile fixes for FreeBSD ports -- Siggi Langauf <si...@us...> Sun, 7 Jan 2001 23:59:12 +0100 + diff -r 04ba8050c38ecb04bcf4208377d20c95d6a0d07a -r e19ff9a0ec5577f5acd748d10fa8fdf953c4a4c3 configure.ac --- a/configure.ac Sun Jan 06 21:20:29 2008 +0000 +++ b/configure.ac Thu Jan 03 01:38:06 2008 +0100 @@ -1206,6 +1206,13 @@ AC_CONFIG_COMMANDS([default],[[chmod +x AC_CONFIG_COMMANDS([default],[[chmod +x ./misc/SlackBuild ./misc/build_rpms.sh ./misc/relchk.sh]],[[]]) AC_OUTPUT +dnl Guard against multiple inclusion +AH_TOP([#ifndef _XINE_CONFIGURE_H_ +#define _XINE_CONFIGURE_H_ +]) +AH_BOTTOM([#endif +]) + dnl --------------------------------------------- dnl Work around a suspected bug in libtool: dnl diff -r 04ba8050c38ecb04bcf4208377d20c95d6a0d07a -r e19ff9a0ec5577f5acd748d10fa8fdf953c4a4c3 include/xine/buffer.h --- a/include/xine/buffer.h Sun Jan 06 21:20:29 2008 +0000 +++ b/include/xine/buffer.h Thu Jan 03 01:38:06 2008 +0100 @@ -192,6 +192,7 @@ extern "C" { #define BUF_VIDEO_VP6F 0x02630000 #define BUF_VIDEO_THEORA_RAW 0x02640000 #define BUF_VIDEO_VC1 0x02650000 +#define BUF_VIDEO_VMNC 0x02660000 /*@}*/ /** diff -r 04ba8050c38ecb04bcf4208377d20c95d6a0d07a -r e19ff9a0ec5577f5acd748d10fa8fdf953c4a4c3 po/LINGUAS --- a/po/LINGUAS Sun Jan 06 21:20:29 2008 +0000 +++ b/po/LINGUAS Thu Jan 03 01:38:06 2008 +0100 @@ -7,3 +7,4 @@ pl pl pt_BR sk +tr diff -r 04ba8050c38ecb04bcf4208377d20c95d6a0d07a -r e19ff9a0ec5577f5acd748d10fa8fdf953c4a4c3 po/cs.po --- a/po/cs.po Sun Jan 06 21:20:29 2008 +0000 +++ b/po/cs.po Thu Jan 03 01:38:06 2008 +0100 @@ -6,7 +6,7 @@ msgstr "" msgstr "" "Project-Id-Version: xine-lib 1.0.1\n" "Report-Msgid-Bugs-To: xin...@li...\n" -"POT-Creation-Date: 2007-12-30 15:46+0000\n" +"POT-Creation-Date: 2008-01-06 21:08+0000\n" "PO-Revision-Date: 2005-12-11 20:47+0100\n" "Last-Translator: František Dvořák <va...@at...>\n" "Language-Team: Czech <cs...@li...>\n" @@ -1561,12 +1561,12 @@ msgid "%s: can't connect to %s:%d\n" msgid "%s: can't connect to %s:%d\n" msgstr "%s: http: nelze se připojit k %s:%d\n" -#: src/input/input_cdda.c:1633 -#, c-format -msgid "input_cdda: successfuly connected to cddb server '%s:%d'.\n" +#: src/input/input_cdda.c:1631 +#, fuzzy, c-format +msgid "input_cdda: successfully connected to cddb server '%s:%d'.\n" msgstr "input_cdda: úspěšně připojeno k CDDB serveru '%s:%d'.\n" -#: src/input/input_cdda.c:1638 +#: src/input/input_cdda.c:1636 #, c-format msgid "input_cdda: failed to connect to cddb server '%s:%d' (%s).\n" msgstr "input_cdda: nelze se připojit k CDDB serveru '%s:%d' (%s).\n" @@ -2888,8 +2888,33 @@ msgid "" "You can adjust the number of video decoding threads which FFmpeg may use.\n" "Higher values should speed up decoding but it depends on the codec used " "whether parallel decoding is supported. A rule of thumb is to have one " -"decoding thread per logical CPU (typically 1 to 4). A change will take " -"effect with playing the next stream." +"decoding thread per logical CPU (typically 1 to 4).\n" +"A change of this setting will take effect with playing the next stream." +msgstr "" + +#: src/combined/ffmpeg/ff_video_decoder.c:1605 +msgid "Skip loop filter" +msgstr "" + +#: src/combined/ffmpeg/ff_video_decoder.c:1606 +msgid "" +"You can control for which frames the loop filter shall be skipped after " +"decoding.\n" +"Skipping the loop filter will speedup decoding but may lead to artefacts. " +"The number of frames for which it is skipped increases from 'none' to 'all'. " +"The default value leaves the decision up to the implementation.\n" +"A change of this setting will take effect with playing the next stream." +msgstr "" + +#: src/combined/ffmpeg/ff_video_decoder.c:1615 +msgid "Choose speed over specification compliance" +msgstr "" + +#: src/combined/ffmpeg/ff_video_decoder.c:1616 +msgid "" +"You may want to allow speed cheats which violate codec specification.\n" +"Cheating may speed up decoding but can also lead to decoding artefacts.\n" +"A change of this setting will take effect with playing the next stream." msgstr "" #: src/libreal/real_common.c:139 diff -r 04ba8050c38ecb04bcf4208377d20c95d6a0d07a -r e19ff9a0ec5577f5acd748d10fa8fdf953c4a4c3 po/de.po --- a/po/de.po Sun Jan 06 21:20:29 2008 +0000 +++ b/po/de.po Thu Jan 03 01:38:06 2008 +0100 @@ -6,7 +6,7 @@ msgstr "" msgstr "" "Project-Id-Version: xine-lib 1.1.6\n" "Report-Msgid-Bugs-To: xin...@li...\n" -"POT-Creation-Date: 2007-12-30 15:46+0000\n" +"POT-Creation-Date: 2008-01-06 21:08+0000\n" "PO-Revision-Date: 2007-04-18 11:00+0200\n" "Last-Translator: Philipp Hahn <pm...@us...>\n" "Language-Team: German <de...@li...>\n" @@ -1562,12 +1562,12 @@ msgid "%s: can't connect to %s:%d\n" msgid "%s: can't connect to %s:%d\n" msgstr "%s: Kann keine Verbindung zu '%s:%d' aufbauen\n" -#: src/input/input_cdda.c:1633 -#, c-format -msgid "input_cdda: successfuly connected to cddb server '%s:%d'.\n" +#: src/input/input_cdda.c:1631 +#, fuzzy, c-format +msgid "input_cdda: successfully connected to cddb server '%s:%d'.\n" msgstr "input_cdda: Verbindung zum CDDB-Server '%s:%d' steht.\n" -#: src/input/input_cdda.c:1638 +#: src/input/input_cdda.c:1636 #, c-format msgid "input_cdda: failed to connect to cddb server '%s:%d' (%s).\n" msgstr "" @@ -2892,8 +2892,33 @@ msgid "" "You can adjust the number of video decoding threads which FFmpeg may use.\n" "Higher values should speed up decoding but it depends on the codec used " "whether parallel decoding is supported. A rule of thumb is to have one " -"decoding thread per logical CPU (typically 1 to 4). A change will take " -"effect with playing the next stream." +"decoding thread per logical CPU (typically 1 to 4).\n" +"A change of this setting will take effect with playing the next stream." +msgstr "" + +#: src/combined/ffmpeg/ff_video_decoder.c:1605 +msgid "Skip loop filter" +msgstr "" + +#: src/combined/ffmpeg/ff_video_decoder.c:1606 +msgid "" +"You can control for which frames the loop filter shall be skipped after " +"decoding.\n" +"Skipping the loop filter will speedup decoding but may lead to artefacts. " +"The number of frames for which it is skipped increases from 'none' to 'all'. " +"The default value leaves the decision up to the implementation.\n" +"A change of this setting will take effect with playing the next stream." +msgstr "" + +#: src/combined/ffmpeg/ff_video_decoder.c:1615 +msgid "Choose speed over specification compliance" +msgstr "" + +#: src/combined/ffmpeg/ff_video_decoder.c:1616 +msgid "" +"You may want to allow speed cheats which violate codec specification.\n" +"Cheating may speed up decoding but can also lead to decoding artefacts.\n" +"A change of this setting will take effect with playing the next stream." msgstr "" #: src/libreal/real_common.c:139 diff -r 04ba8050c38ecb04bcf4208377d20c95d6a0d07a -r e19ff9a0ec5577f5acd748d10fa8fdf953c4a4c3 po/es.po --- a/po/es.po Sun Jan 06 21:20:29 2008 +0000 +++ b/po/es.po Thu Jan 03 01:38:06 2008 +0100 @@ -9,7 +9,7 @@ msgstr "" msgstr "" "Project-Id-Version: xine-lib-1.1.4\n" "Report-Msgid-Bugs-To: xin...@li...\n" -"POT-Creation-Date: 2007-12-30 15:46+0000\n" +"POT-Creation-Date: 2008-01-06 21:08+0000\n" "PO-Revision-Date: 2007-10-28 00:11+0200\n" "Last-Translator: Carlos E. Robinson <car...@us...>\n" "Language-Team: Spanish\n" @@ -1606,12 +1606,12 @@ msgid "%s: can't connect to %s:%d\n" msgid "%s: can't connect to %s:%d\n" msgstr "%s: no se puede conectar a %s:%d\n" -#: src/input/input_cdda.c:1633 -#, c-format -msgid "input_cdda: successfuly connected to cddb server '%s:%d'.\n" +#: src/input/input_cdda.c:1631 +#, fuzzy, c-format +msgid "input_cdda: successfully connected to cddb server '%s:%d'.\n" msgstr "input_cdda: conectado con éxito al servidor cddb '%s:%d'.\n" -#: src/input/input_cdda.c:1638 +#: src/input/input_cdda.c:1636 #, c-format msgid "input_cdda: failed to connect to cddb server '%s:%d' (%s).\n" msgstr "input_cdda: falló al conectar al servidor cddb '%s:%d' (%s).\n" @@ -2979,8 +2979,33 @@ msgid "" "You can adjust the number of video decoding threads which FFmpeg may use.\n" "Higher values should speed up decoding but it depends on the codec used " "whether parallel decoding is supported. A rule of thumb is to have one " -"decoding thread per logical CPU (typically 1 to 4). A change will take " -"effect with playing the next stream." +"decoding thread per logical CPU (typically 1 to 4).\n" +"A change of this setting will take effect with playing the next stream." +msgstr "" + +#: src/combined/ffmpeg/ff_video_decoder.c:1605 +msgid "Skip loop filter" +msgstr "" + +#: src/combined/ffmpeg/ff_video_decoder.c:1606 +msgid "" +"You can control for which frames the loop filter shall be skipped after " +"decoding.\n" +"Skipping the loop filter will speedup decoding but may lead to artefacts. " +"The number of frames for which it is skipped increases from 'none' to 'all'. " +"The default value leaves the decision up to the implementation.\n" +"A change of this setting will take effect with playing the next stream." +msgstr "" + +#: src/combined/ffmpeg/ff_video_decoder.c:1615 +msgid "Choose speed over specification compliance" +msgstr "" + +#: src/combined/ffmpeg/ff_video_decoder.c:1616 +msgid "" +"You may want to allow speed cheats which violate codec specification.\n" +"Cheating may speed up decoding but can also lead to decoding artefacts.\n" +"A change of this setting will take effect with playing the next stream." msgstr "" #: src/libreal/real_common.c:139 diff -r 04ba8050c38ecb04bcf4208377d20c95d6a0d07a -r e19ff9a0ec5577f5acd748d10fa8fdf953c4a4c3 po/eu.po --- a/po/eu.po Sun Jan 06 21:20:29 2008 +0000 +++ b/po/eu.po Thu Jan 03 01:38:06 2008 +0100 @@ -8,7 +8,7 @@ msgstr "" msgstr "" "Project-Id-Version: xine-lib-1\n" "Report-Msgid-Bugs-To: xin...@li...\n" -"POT-Creation-Date: 2007-12-30 15:46+0000\n" +"POT-Creation-Date: 2008-01-06 21:08+0000\n" "PO-Revision-Date: 2005-02-17 14:29+0100\n" "Last-Translator: Piarres Beobide <pi...@be...>\n" "Language-Team: lubrezale <lib...@li...>\n" @@ -1532,12 +1532,12 @@ msgid "%s: can't connect to %s:%d\n" msgid "%s: can't connect to %s:%d\n" msgstr "%s: Ezin da %s-ra konektatu: %d\n" -#: src/input/input_cdda.c:1633 -#, c-format -msgid "input_cdda: successfuly connected to cddb server '%s:%d'.\n" +#: src/input/input_cdda.c:1631 +#, fuzzy, c-format +msgid "input_cdda: successfully connected to cddb server '%s:%d'.\n" msgstr "input_cdda: arrakastatsuki konektaturik cddb zerbitzarira'%s:%d'.\n" -#: src/input/input_cdda.c:1638 +#: src/input/input_cdda.c:1636 #, c-format msgid "input_cdda: failed to connect to cddb server '%s:%d' (%s).\n" msgstr "input_cdda: huts cddb zerbitzarira konektatzerakoan '%s:%d' (%s).\n" @@ -2783,8 +2783,33 @@ msgid "" "You can adjust the number of video decoding threads which FFmpeg may use.\n" "Higher values should speed up decoding but it depends on the codec used " "whether parallel decoding is supported. A rule of thumb is to have one " -"decoding thread per logical CPU (typically 1 to 4). A change will take " -"effect with playing the next stream." +"decoding thread per logical CPU (typically 1 to 4).\n" +"A change of this setting will take effect with playing the next stream." +msgstr "" + +#: src/combined/ffmpeg/ff_video_decoder.c:1605 +msgid "Skip loop filter" +msgstr "" + +#: src/combined/ffmpeg/ff_video_decoder.c:1606 +msgid "" +"You can control for which frames the loop filter shall be skipped after " +"decoding.\n" +"Skipping the loop filter will speedup decoding but may lead to artefacts. " +"The number of frames for which it is skipped increases from 'none' to 'all'. " +"The default value leaves the decision up to the implementation.\n" +"A change of this setting will take effect with playing the next stream." +msgstr "" + +#: src/combined/ffmpeg/ff_video_decoder.c:1615 +msgid "Choose speed over specification compliance" +msgstr "" + +#: src/combined/ffmpeg/ff_video_decoder.c:1616 +msgid "" +"You may want to allow speed cheats which violate codec specification.\n" +"Cheating may speed up decoding but can also lead to decoding artefacts.\n" +"A change of this setting will take effect with playing the next stream." msgstr "" #: src/libreal/real_common.c:139 diff -r 04ba8050c38ecb04bcf4208377d20c95d6a0d07a -r e19ff9a0ec5577f5acd748d10fa8fdf953c4a4c3 po/fr.po --- a/po/fr.po Sun Jan 06 21:20:29 2008 +0000 +++ b/po/fr.po Thu Jan 03 01:38:06 2008 +0100 @@ -1,57 +1,60 @@ -# Frensh xine-lib.po file. -# Copyright (C) 2002 Free Software Foundation, Inc. -# Daniel Caujolle-Bert <seg...@cl...>, 2001 -# -msgid "" -msgstr "" -"Project-Id-Version: xine-lib 0.9.13\n" +# translation of fr.po to français +# Daniel Caujolle-Bert <seg...@cl...>, 2001. +# Christophe Giraud <chr...@gm...>, 2007, 2008. +# French xine-lib.po file. +# Copyright (C) 2002, 2007, 2008 Free Software Foundation, Inc. +msgid "" +msgstr "" +"Project-Id-Version: xine-lib 1.1.9\n" "Report-Msgid-Bugs-To: xin...@li...\n" -"POT-Creation-Date: 2007-12-30 15:46+0000\n" -"PO-Revision-Date: 2002-06-07 15:08 +0200\n" -"Last-Translator: Daniel Caujolle-Bert <seg...@cl...>\n" -"Language-Team: French <fr...@li...>\n" +"POT-Creation-Date: 2008-01-06 21:08+0000\n" +"PO-Revision-Date: 2008-01-01 15:18+0100\n" +"Last-Translator: Christophe Giraud <chr...@gm...>\n" +"Language-Team: french <fr...@li...>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8-bit\n" +"Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: KBabel 1.11.4\n" #: lib/hstrerror.c:17 msgid "No error" -msgstr "" +msgstr "Aucune erreur" #: lib/hstrerror.c:18 msgid "Unknown host" -msgstr "" +msgstr "Hôte inconnu" #: lib/hstrerror.c:19 msgid "No address associated with name" -msgstr "" +msgstr "Aucune adresse associée à ce nom" #: lib/hstrerror.c:20 msgid "Unknown server error" -msgstr "" +msgstr "Erreur du serveur inconnue" #: lib/hstrerror.c:21 msgid "Host name lookup failure" -msgstr "" +msgstr "La recherche du nom d'hôte a échouée" #: lib/hstrerror.c:22 msgid "Unknown error" -msgstr "" +msgstr "Erreur inconnue" #: src/audio_out/audio_alsa_out.c:350 #, c-format msgid "audio_alsa_out:Already open...WHY!" -msgstr "" +msgstr "audio_alsa_out: Déjà ouvert...POURQUOI!" #: src/audio_out/audio_alsa_out.c:378 #, c-format msgid "audio_alsa_out: snd_pcm_open() of %s failed: %s\n" -msgstr "" +msgstr "audio_alsa_out: snd_pcm_open() de %s a echoué: %s\n" #: src/audio_out/audio_alsa_out.c:380 msgid "audio_alsa_out: >>> check if another program already uses PCM <<<\n" msgstr "" +"audio_alsa_out: >>> Vérifie si un autre programme utilise déjà PCM <<<\n" #: src/audio_out/audio_alsa_out.c:393 #, c-format @@ -59,10 +62,12 @@ msgid "" "audio_alsa_out: broken configuration for this PCM: no configurations " "available: %s\n" msgstr "" +"audio_alsa_out: Mauvaise configuration pour ce PCM: aucune configuration " +"disponible: %s\n" #: src/audio_out/audio_alsa_out.c:1295 msgid "notify changes to the hardware mixer" -msgstr "" +msgstr "Notifie les changements au mixeur matériel" #: src/audio_out/audio_alsa_out.c:1296 msgid "" @@ -70,15 +75,18 @@ msgid "" "notification so that it can update its graphical representation of the mixer " "settings on the fly." msgstr "" +"A chaque modification du mixeur matériel , votre application recevra une " +"notification afin qu'elle puisse automatiquement mettre à jour sa " +"représentation graphique du mixeur ." #: src/audio_out/audio_alsa_out.c:1361 #, c-format msgid "snd_lib_error_set_handler() failed: %d" -msgstr "" +msgstr "snd_lib_error_set_handler() a échoué: %d" #: src/audio_out/audio_alsa_out.c:1368 msgid "sound card can do mmap" -msgstr "" +msgstr "La carte son peut utiliser mmap" #: src/audio_out/audio_alsa_out.c:1369 msgid "" @@ -86,6 +94,10 @@ msgid "" "You can try enabling it and check, if everything works. If it does, this " "will increase performance." msgstr "" +"Activez ceci si votre carte son et votre pilote alsa supportent memory " +"mapped IO.\n" +"Essayez de l'activer et contrôlez que tout fonctionne correctement.Si c'est " +"le cas,cela augmentera les performances ." [... 2118 lines omitted ...] #: src/xine-engine/xine.c:928 #, c-format @@ -4888,9 +5001,8 @@ msgstr "" msgstr "" #: src/xine-engine/xine.c:971 -#, fuzzy msgid "xine: error opening rip input plugin instance\n" -msgstr "input_dvd: erreur de lecture dans le plugin input_dvd\n" +msgstr "" #: src/xine-engine/xine.c:1002 #, c-format @@ -4919,9 +5031,8 @@ msgstr "" msgstr "" #: src/xine-engine/xine.c:1145 -#, fuzzy msgid "xine: error opening subtitle mrl\n" -msgstr "input_dvd: ne peux pas ouvrir le fichier >%s<\n" +msgstr "xine: erreur à l'ouverture des sous-titres de la mrl\n" #: src/xine-engine/xine.c:1177 #, c-format @@ -5043,7 +5154,7 @@ msgstr "messages" #: src/xine-engine/xine.c:2099 msgid "plugin" -msgstr "" +msgstr "plugin" #: src/xine-engine/xine.c:2100 msgid "trace" @@ -5051,62 +5162,57 @@ msgstr "" #: src/xine-engine/xine_interface.c:946 msgid "Warning:" -msgstr "" +msgstr "Attention:" #: src/xine-engine/xine_interface.c:947 msgid "Unknown host:" -msgstr "" +msgstr "Hôte inconnu:" #: src/xine-engine/xine_interface.c:948 msgid "Unknown device:" -msgstr "" +msgstr "Périphérique inconnu:" #: src/xine-engine/xine_interface.c:949 msgid "Network unreachable" -msgstr "" +msgstr "Réseau inaccessible" #: src/xine-engine/xine_interface.c:950 msgid "Connection refused:" -msgstr "" +msgstr "Connexion refusée:" #: src/xine-engine/xine_interface.c:951 -#, fuzzy msgid "File not found:" -msgstr "input_file: erreur de lecture (%s)\n" +msgstr "Fichier non trouvé:" #: src/xine-engine/xine_interface.c:952 msgid "Read error from:" -msgstr "" +msgstr "Erreur de lecture provenant de:" #: src/xine-engine/xine_interface.c:953 msgid "Error loading library:" msgstr "" #: src/xine-engine/xine_interface.c:954 -#, fuzzy msgid "Encrypted media stream detected" -msgstr "" -"ogg: flux audio vorbis detecté\n" -"\n" +msgstr "Flux média crypté détecté" #: src/xine-engine/xine_interface.c:955 msgid "Security message:" -msgstr "" +msgstr "Message de sécurité:" #: src/xine-engine/xine_interface.c:956 -#, fuzzy msgid "Audio device unavailable" -msgstr "fifo non disponible (%d)\n" +msgstr "Périphérique audio non disponible" #: src/xine-engine/xine_interface.c:957 msgid "Permission error" -msgstr "" +msgstr "Erreur de permission" #: src/xine-engine/xine_interface.c:958 msgid "File is empty:" -msgstr "" - -#: src/xine-utils/memcpy.c:479 +msgstr "Le fichier est vide:" + +#: src/xine-utils/memcpy.c:478 msgid "memcopy method used by xine" msgstr "" @@ -5121,13 +5227,12 @@ msgid "Benchmarking memcpy methods (smal msgid "Benchmarking memcpy methods (smaller is better):\n" msgstr "" +#~ msgid "xine audio output plugin using kde artsd" +#~ msgstr "plugin de sortie audio xine utilisant arts de kde" + #, fuzzy #~ msgid "demux_asf: Wrong ASX version: %s\n" #~ msgstr "demux_asf: copyright : %s\n" - -#, fuzzy -#~ msgid "xine audio output plugin using kde artsd" -#~ msgstr "plugin de sortie audio de xine utilisant esd" #, fuzzy #~ msgid "dvbsub: cannot create timer thread\n" diff -r 04ba8050c38ecb04bcf4208377d20c95d6a0d07a -r e19ff9a0ec5577f5acd748d10fa8fdf953c4a4c3 po/it.po --- a/po/it.po Sun Jan 06 21:20:29 2008 +0000 +++ b/po/it.po Thu Jan 03 01:38:06 2008 +0100 @@ -9,7 +9,7 @@ msgstr "" msgstr "" "Project-Id-Version: it\n" "Report-Msgid-Bugs-To: xin...@li...\n" -"POT-Creation-Date: 2007-12-30 15:46+0000\n" +"POT-Creation-Date: 2008-01-06 21:08+0000\n" "PO-Revision-Date: 2006-06-18 23:05+0200\n" "Last-Translator: Diego 'Flameeyes' Pettenò <fla...@ge...>\n" "Language-Team: Italian\n" @@ -1597,12 +1597,12 @@ msgid "%s: can't connect to %s:%d\n" msgid "%s: can't connect to %s:%d\n" msgstr "%s: impossibile connettersi a %s: %d\n" -#: src/input/input_cdda.c:1633 -#, c-format -msgid "input_cdda: successfuly connected to cddb server '%s:%d'.\n" +#: src/input/input_cdda.c:1631 +#, fuzzy, c-format +msgid "input_cdda: successfully connected to cddb server '%s:%d'.\n" msgstr "input_cdda: connesso al server CDDB %s:%d con successo.\n" -#: src/input/input_cdda.c:1638 +#: src/input/input_cdda.c:1636 #, c-format msgid "input_cdda: failed to connect to cddb server '%s:%d' (%s).\n" msgstr "input_cdda: connessione al server CDDB '%s:%d' non riuscita (%s).\n" @@ -2954,8 +2954,33 @@ msgid "" "You can adjust the number of video decoding threads which FFmpeg may use.\n" "Higher values should speed up decoding but it depends on the codec used " "whether parallel decoding is supported. A rule of thumb is to have one " -"decoding thread per logical CPU (typically 1 to 4). A change will take " -"effect with playing the next stream." +"decoding thread per logical CPU (typically 1 to 4).\n" +"A change of this setting will take effect with playing the next stream." +msgstr "" + +#: src/combined/ffmpeg/ff_video_decoder.c:1605 +msgid "Skip loop filter" +msgstr "" + +#: src/combined/ffmpeg/ff_video_decoder.c:1606 +msgid "" +"You can control for which frames the loop filter shall be skipped after " +"decoding.\n" +"Skipping the loop filter will speedup decoding but may lead to artefacts. " +"The number of frames for which it is skipped increases from 'none' to 'all'. " +"The default value leaves the decision up to the implementation.\n" +"A change of this setting will take effect with playing the next stream." +msgstr "" + +#: src/combined/ffmpeg/ff_video_decoder.c:1615 +msgid "Choose speed over specification compliance" +msgstr "" + +#: src/combined/ffmpeg/ff_video_decoder.c:1616 +msgid "" +"You may want to allow speed cheats which violate codec specification.\n" +"Cheating may speed up decoding but can also lead to decoding artefacts.\n" +"A change of this setting will take effect with playing the next stream." msgstr "" #: src/libreal/real_common.c:139 diff -r 04ba8050c38ecb04bcf4208377d20c95d6a0d07a -r e19ff9a0ec5577f5acd748d10fa8fdf953c4a4c3 po/libxine2.pot --- a/po/libxine2.pot Sun Jan 06 21:20:29 2008 +0000 +++ b/po/libxine2.pot Thu Jan 03 01:38:06 2008 +0100 @@ -8,7 +8,7 @@ msgstr "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: xin...@li...\n" -"POT-Creation-Date: 2007-12-30 15:46+0000\n" +"POT-Creation-Date: 2008-01-06 21:08+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL...@li...>\n" @@ -1300,12 +1300,12 @@ msgid "%s: can't connect to %s:%d\n" msgid "%s: can't connect to %s:%d\n" msgstr "" -#: src/input/input_cdda.c:1633 -#, c-format -msgid "input_cdda: successfuly connected to cddb server '%s:%d'.\n" -msgstr "" - -#: src/input/input_cdda.c:1638 +#: src/input/input_cdda.c:1631 +#, c-format +msgid "input_cdda: successfully connected to cddb server '%s:%d'.\n" +msgstr "" + +#: src/input/input_cdda.c:1636 #, c-format msgid "input_cdda: failed to connect to cddb server '%s:%d' (%s).\n" msgstr "" @@ -2466,8 +2466,33 @@ msgid "" "You can adjust the number of video decoding threads which FFmpeg may use.\n" "Higher values should speed up decoding but it depends on the codec used " "whether parallel decoding is supported. A rule of thumb is to have one " -"decoding thread per logical CPU (typically 1 to 4). A change will take " -"effect with playing the next stream." +"decoding thread per logical CPU (typically 1 to 4).\n" +"A change of this setting will take effect with playing the next stream." +msgstr "" + +#: src/combined/ffmpeg/ff_video_decoder.c:1605 +msgid "Skip loop filter" +msgstr "" + +#: src/combined/ffmpeg/ff_video_decoder.c:1606 +msgid "" +"You can control for which frames the loop filter shall be skipped after " +"decoding.\n" +"Skipping the loop filter will speedup decoding but may lead to artefacts. " +"The number of frames for which it is skipped increases from 'none' to 'all'. " +"The default value leaves the decision up to the implementation.\n" +"A change of this setting will take effect with playing the next stream." +msgstr "" + +#: src/combined/ffmpeg/ff_video_decoder.c:1615 +msgid "Choose speed over specification compliance" +msgstr "" + +#: src/combined/ffmpeg/ff_video_decoder.c:1616 +msgid "" +"You may want to allow speed cheats which violate codec specification.\n" +"Cheating may speed up decoding but can also lead to decoding artefacts.\n" +"A change of this setting will take effect with playing the next stream." msgstr "" #: src/libreal/real_common.c:139 diff -r 04ba8050c38ecb04bcf4208377d20c95d6a0d07a -r e19ff9a0ec5577f5acd748d10fa8fdf953c4a4c3 po/pl.po --- a/po/pl.po Sun Jan 06 21:20:29 2008 +0000 +++ b/po/pl.po Thu Jan 03 01:38:06 2008 +0100 @@ -7,7 +7,7 @@ msgstr "" msgstr "" "Project-Id-Version: pl_PL\n" "Report-Msgid-Bugs-To: xin...@li...\n" -"POT-Creation-Date: 2007-12-30 15:46+0000\n" +"POT-Creation-Date: 2008-01-06 21:08+0000\n" "PO-Revision-Date: 2003-05-24 12:36+0200\n" "Last-Translator: Bartłomiej Muryn <_4...@ir...>\n" "Language-Team: Polish <pl...@li...>\n" @@ -1417,13 +1417,14 @@ msgid "%s: can't connect to %s:%d\n" msgid "%s: can't connect to %s:%d\n" msgstr "http: nie mogę się podłączyć do >%s<\n" -#: src/input/input_cdda.c:1633 -#, c-format -msgid "input_cdda: successfuly connected to cddb server '%s:%d'.\n" -msgstr "" - # src/input/input_net.c:138 -#: src/input/input_cdda.c:1638 +#: src/input/input_cdda.c:1631 +#, fuzzy, c-format +msgid "input_cdda: successfully connected to cddb server '%s:%d'.\n" +msgstr "input_net: nie mogę podłączyć się do '%s'.\n" + +# src/input/input_net.c:138 +#: src/input/input_cdda.c:1636 #, fuzzy, c-format msgid "input_cdda: failed to connect to cddb server '%s:%d' (%s).\n" msgstr "input_net: nie mogę podłączyć się do '%s'.\n" @@ -2668,8 +2669,33 @@ msgid "" "You can adjust the number of video decoding threads which FFmpeg may use.\n" "Higher values should speed up decoding but it depends on the codec used " "whether parallel decoding is supported. A rule of thumb is to have one " -"decoding thread per logical CPU (typically 1 to 4). A change will take " -"effect with playing the next stream." +"decoding thread per logical CPU (typically 1 to 4).\n" +"A change of this setting will take effect with playing the next stream." +msgstr "" + +#: src/combined/ffmpeg/ff_video_decoder.c:1605 +msgid "Skip loop filter" +msgstr "" + +#: src/combined/ffmpeg/ff_video_decoder.c:1606 +msgid "" +"You can control for which frames the loop filter shall be skipped after " +"decoding.\n" +"Skipping the loop filter will speedup decoding but may lead to artefacts. " +"The number of frames for which it is skipped increases from 'none' to 'all'. " +"The default value leaves the decision up to the implementation.\n" +"A change of this setting will take effect with playing the next stream." +msgstr "" + +#: src/combined/ffmpeg/ff_video_decoder.c:1615 +msgid "Choose speed over specification compliance" +msgstr "" + +#: src/combined/ffmpeg/ff_video_decoder.c:1616 +msgid "" +"You may want to allow speed cheats which violate codec specification.\n" +"Cheating may speed up decoding but can also lead to decoding artefacts.\n" +"A change of this setting will take effect with playing the next stream." msgstr "" # src/libw32dll/w32codec.c:1404 src/libw32dll/w32codec.c:1453 diff -r 04ba8050c38ecb04bcf4208377d20c95d6a0d07a -r e19ff9a0ec5577f5acd748d10fa8fdf953c4a4c3 po/pt_BR.po --- a/po/pt_BR.po Sun Jan 06 21:20:29 2008 +0000 +++ b/po/pt_BR.po Thu Jan 03 01:38:06 2008 +0100 @@ -6,7 +6,7 @@ msgstr "" msgstr "" "Project-Id-Version: xine-lib 0.9.13\n" "Report-Msgid-Bugs-To: xin...@li...\n" -"POT-Creation-Date: 2007-12-30 15:46+0000\n" +"POT-Creation-Date: 2008-01-06 21:08+0000\n" "PO-Revision-Date: 2002-01-22 18:31GMT-3\n" "Last-Translator: Marcelo Roberto Jimenez <mro...@ce...>\n" "Language-Team: Portuguese (Brazilian) <pt...@li...>\n" @@ -1313,12 +1313,12 @@ msgid "%s: can't connect to %s:%d\n" msgid "%s: can't connect to %s:%d\n" msgstr "http: unable to connect to >%s<\n" -#: src/input/input_cdda.c:1633 -#, fuzzy, c-format -msgid "input_cdda: successfuly connected to cddb server '%s:%d'.\n" +#: src/input/input_cdda.c:1631 +#, fuzzy, c-format +msgid "input_cdda: successfully connected to cddb server '%s:%d'.\n" msgstr "input_cda: server '%s:%d' successfuly connected.\n" -#: src/input/input_cdda.c:1638 +#: src/input/input_cdda.c:1636 #, fuzzy, c-format msgid "input_cdda: failed to connect to cddb server '%s:%d' (%s).\n" msgstr "input_net: incapaz de conectar em '%s'.\n" @@ -2499,8 +2499,33 @@ msgid "" "You can adjust the number of video decoding threads which FFmpeg may use.\n" "Higher values should speed up decoding but it depends on the codec used " "whether parallel decoding is supported. A rule of thumb is to have one " -"decoding thread per logical CPU (typically 1 to 4). A change will take " -"effect with playing the next stream." +"decoding thread per logical CPU (typically 1 to 4).\n" +"A change of this setting will take effect with playing the next stream." +msgstr "" + +#: src/combined/ffmpeg/ff_video_decoder.c:1605 +msgid "Skip loop filter" +msgstr "" + +#: src/combined/ffmpeg/ff_video_decoder.c:1606 +msgid "" +"You can control for which frames the loop filter shall be skipped after " +"decoding.\n" +"Skipping the loop filter will speedup decoding but may lead to artefacts. " +"The number of frames for which it is skipped increases from 'none' to 'all'. " +"The default value leaves the decision up to the implementation.\n" +"A change of this setting will take effect with playing the next stream." +msgstr "" + +#: src/combined/ffmpeg/ff_video_decoder.c:1615 +msgid "Choose speed over specification compliance" +msgstr "" + +#: src/combined/ffmpeg/ff_video_decoder.c:1616 +msgid "" +"You may want to allow speed cheats which violate codec specification.\n" +"Cheating may speed up decoding but can also lead to decoding artefacts.\n" +"A change of this setting will take effect with playing the next stream." msgstr "" #: src/libreal/real_common.c:139 diff -r 04ba8050c38ecb04bcf4208377d20c95d6a0d07a -r e19ff9a0ec5577f5acd748d10fa8fdf953c4a4c3 po/sk.po --- a/po/sk.po Sun Jan 06 21:20:29 2008 +0000 +++ b/po/sk.po Thu Jan 03 01:38:06 2008 +0100 @@ -6,7 +6,7 @@ msgstr "" msgstr "" "Project-Id-Version: xine-lib 1.0\n" "Report-Msgid-Bugs-To: xin...@li...\n" -"POT-Creation-Date: 2007-12-30 15:46+0000\n" +"POT-Creation-Date: 2008-01-06 21:08+0000\n" "PO-Revision-Date: 2004-09-15 13:53+0100\n" "Last-Translator: \n" "Language-Team: Slovak <sk...@li...>\n" @@ -1401,12 +1401,12 @@ msgid "%s: can't connect to %s:%d\n" msgid "%s: can't connect to %s:%d\n" msgstr "rtsp: nemožno sa pripojiť k '%s'\n" -#: src/input/input_cdda.c:1633 -#, c-format -msgid "input_cdda: successfuly connected to cddb server '%s:%d'.\n" +#: src/input/input_cdda.c:1631 +#, fuzzy, c-format +msgid "input_cdda: successfully connected to cddb server '%s:%d'.\n" msgstr "input_cdda: úspešne pripojenie na cddb server '%s:%d'.\n" -#: src/input/input_cdda.c:1638 +#: src/input/input_cdda.c:1636 #, c-format msgid "input_cdda: failed to connect to cddb server '%s:%d' (%s).\n" msgstr "input_cdda: nemožno sa pripojiť na cddb server '%s:%d' (%s).\n" @@ -2625,8 +2625,33 @@ msgid "" "You can adjust the number of video decoding threads which FFmpeg may use.\n" "Higher values should speed up decoding but it depends on the codec used " "whether parallel decoding is supported. A rule of thumb is to have one " -"decoding thread per logical CPU (typically 1 to 4). A change will take " -"effect with playing the next stream." +"decoding thread per logical CPU (typically 1 to 4).\n" +"A change of this setting will take effect with playing the next stream." +msgstr "" + +#: src/combined/ffmpeg/ff_video_decoder.c:1605 +msgid "Skip loop filter" +msgstr "" + +#: src/combined/ffmpeg/ff_video_decoder.c:1606 +msgid "" +"You can control for which frames the loop filter shall be skipped after " +"decoding.\n" +"Skipping the loop filter will speedup decoding but may lead to artefacts. " +"The number of frames for which it is skipped increases from 'none' to 'all'. " +"The default value leaves the decision up to the implementation.\n" +"A change of this setting will take effect with playing the next stream." +msgstr "" + +#: src/combined/ffmpeg/ff_video_decoder.c:1615 +msgid "Choose speed over specification compliance" +msgstr "" + +#: src/combined/ffmpeg/ff_video_decoder.c:1616 +msgid "" +"You may want to allow speed cheats which violate codec specification.\n" +"Cheating may speed up decoding but can also lead to decoding artefacts.\n" +"A change of this setting will take effect with playing the next stream." msgstr "" #: src/libreal/real_common.c:139 diff -r 04ba8050c38ecb04bcf4208377d20c95d6a0d07a -r e19ff9a0ec5577f5acd748d10fa8fdf953c4a4c3 src/combined/ffmpeg/ff_video_decoder.c --- a/src/combined/ffmpeg/ff_video_decoder.c Sun Jan 06 21:20:29 2008 +0000 +++ b/src/combined/ffmpeg/ff_video_decoder.c Thu Jan 03 01:38:06 2008 +0100 @@ -313,6 +313,7 @@ static const ff_codec_t ff_video_lookup[ {BUF_VIDEO_KMVC, CODEC_ID_KMVC, "Karl Morton's Video Codec (ffmpeg)"}, {BUF_VIDEO_FLASHSV, CODEC_ID_FLASHSV, "Flash Screen Video (ffmpeg)"}, {BUF_VIDEO_CAVS, CODEC_ID_CAVS, "Chinese AVS (ffmpeg)"}, + {BUF_VIDEO_VMNC, CODEC_ID_VMNC, "VMware Screen Codec (ffmpeg)"}, {BUF_VIDEO_THEORA_RAW, CODEC_ID_THEORA, "Theora (ffmpeg)"}, }; @@ -1841,6 +1842,9 @@ static const uint32_t supported_video_ty #if defined(HAVE_FFMPEG) || CONFIG_CAVS_DECODER BUF_VIDEO_CAVS, #endif +#if defined(HAVE_FFMPEG) || CONFIG_VMNC_DECODER + BUF_VIDEO_VMNC, +#endif BUF_VIDEO_THEORA_RAW, 0 }; diff -r 04ba8050c38ecb04bcf4208377d20c95d6a0d07a -r e19ff9a0ec5577f5acd748d10fa8fdf953c4a4c3 src/demuxers/demux_mpgaudio.c --- a/src/demuxers/demux_mpgaudio.c Sun Jan 06 21:20:29 2008 +0000 +++ b/src/demuxers/demux_mpgaudio.c Thu Jan 03 01:38:06 2008 +0100 @@ -64,6 +64,7 @@ /* Xing header stuff */ #define XING_TAG FOURCC_TAG('X', 'i', 'n', 'g') +#define INFO_TAG FOURCC_TAG('I', 'n', 'f', 'o') #define XING_FRAMES_FLAG 0x0001 #define XING_BYTES_FLAG 0x0002 #define XING_TOC_FLAG 0x0004 @@ -295,16 +296,8 @@ static int parse_frame_header(mpg_audio_ */ static xing_header_t* parse_xing_header(mpg_audio_frame_t *frame, uint8_t *buf, int bufsize) { - -#ifdef LOG - int i; -#endif uint8_t *ptr = buf; - xing_header_t *xing; - - xing = xine_xmalloc (sizeof (xing_header_t)); - if (!xing) - return NULL; + xing_header_t *xing = NULL; /* offset of the Xing header */ if (frame->lsf_bit) { @@ -319,52 +312,87 @@ static xing_header_t* parse_xing_header( ptr += (9 + 4); } - if (ptr >= (buf + bufsize - 4)) return 0; + if (ptr >= (buf + bufsize - 4)) goto exit_error; lprintf("checking %08X\n", *ptr); + if (_X_BE_32(ptr) == XING_TAG) { + int has_frames_flag = 0; + int has_bytes_flag = 0; + + xing = xine_xmalloc (sizeof (xing_header_t)); + if (!xing) + goto exit_error; + lprintf("Xing header found\n"); ptr += 4; - if (ptr >= (buf + bufsize - 4)) return 0; + if (ptr >= (buf + bufsize - 4)) goto exit_error; xing->flags = _X_BE_32(ptr); ptr += 4; if (xing->flags & XING_FRAMES_FLAG) { - if (ptr >= (buf + bufsize - 4)) return 0; + if (ptr >= (buf + bufsize - 4)) goto exit_error; xing->stream_frames = _X_BE_32(ptr); ptr += 4; lprintf("stream frames: %d\n", xing->stream_frames); + has_frames_flag = 1; } if (xing->flags & XING_BYTES_FLAG) { - if (ptr >= (buf + bufsize - 4)) return 0; + if (ptr >= (buf + bufsize - 4)) goto exit_error; xing->stream_size = _X_BE_32(ptr); ptr += 4; lprintf("stream size: %d\n", xing->stream_size); - } + has_bytes_flag = 1; + } + + /* check if it's a useful Xing header */ + if (!has_frames_flag || !has_bytes_flag) { + lprintf("Stupid Xing tag, cannot do anything with it !\n"); + goto exit_error; + } + if (xing->flags & XING_TOC_FLAG) { + int i; + lprintf("toc found\n"); - if (ptr >= (buf + bufsize - XING_TOC_LENGTH)) return 0; - + + if (ptr >= (buf + bufsize - XING_TOC_LENGTH)) goto exit_error; memcpy(xing->toc, ptr, XING_TOC_LENGTH); #ifdef LOG for (i = 0; i < XING_TOC_LENGTH; i++) { - lprintf("%d ", xing->toc[i]); - } - lprintf("\n"); + printf("%d ", xing->toc[i]); + } + printf("\n"); #endif + /* check the table validity + * - MUST start with 0 + * - values MUST increase + */ + if (xing->toc[0] != 0) { + lprintf("invalid Xing toc\n"); + goto exit_error; + } + for (i = 1; i < XING_TOC_LENGTH; i++) { + if (xing->toc[i] < xing->toc[i-1]) { + lprintf("invalid Xing toc\n"); + goto exit_error; + } + } ptr += XING_TOC_LENGTH; } xing->vbr_scale = -1; if (xing->flags & XING_VBR_SCALE_FLAG) { - if (ptr >= (buf + bufsize - 4)) return 0; + if (ptr >= (buf + bufsize - 4)) goto exit_error; xing->vbr_scale = _X_BE_32(ptr); lprintf("vbr_scale: %d\n", xing->vbr_scale); } - - return xing; } else { lprintf("Xing header not found\n"); + } + return xing; + +exit_error: + lprintf("Xing header parse error\n"); free(xing); return NULL; } -} /* * Parse a Vbri header @@ -919,7 +947,7 @@ static int demux_mpgaudio_seek (demux_pl if (this->stream_length > 0) { if (this->xing_header && - (this->xing_header->flags & (XING_TOC_FLAG | XING_BYTES_FLAG))) { + (this->xing_header->flags & XING_TOC_FLAG)) { seek_pos += xing_get_seek_point(this->xing_header, start_time, this->stream_length); lprintf("time seek: xing: time=%d, pos=%"PRId64"\n", start_time, seek_pos); } else if (this->vbri_header) { diff -r 04ba8050c38ecb04bcf4208377d20c95d6a0d07a -r e19ff9a0ec5577f5acd748d10fa8fdf953c4a4c3 src/demuxers/demux_real.c --- a/src/demuxers/demux_real.c Sun Jan 06 21:20:29 2008 +0000 +++ b/src/demuxers/demux_real.c Thu Jan 03 01:38:06 2008 +0100 @@ -800,12 +800,22 @@ static int demux_real_parse_references( if (!strncmp(buf,"http://",7)) { - for (i = 0; buf[i] && !isspace(buf[i]); ++i) - /**/; - buf[i] = 0; - lprintf("reference [%s] found\n", buf); - - _x_demux_send_mrl_reference (this->stream, 0, buf, NULL, 0, 0); + i = 0; + while (buf[i]) + { + j = i; + while (buf[i] && !isspace(buf[i])) + ++i; /* skip non-space */ + len = buf[i]; + buf[i] = 0; + if (strncmp (buf + j, "http://", 7) || (i - j) < 8) + break; /* stop at the first non-http reference */ + lprintf("reference [%s] found\n", buf + j); + _x_demux_send_mrl_reference (this->stream, 0, buf + j, NULL, 0, 0); + buf[i] = (char) len; + while (buf[i] && isspace(buf[i])) + ++i; /* skip spaces */ + } } else for (i = 0; i < buf_used; ++i) { diff -r 04ba8050c38ecb04bcf4208377d20c95d6a0d07a -r e19ff9a0ec5577f5acd748d10fa8fdf953c4a4c3 src/input/input_pvr.c --- a/src/input/input_pvr.c Sun Jan 06 21:20:29 2008 +0000 +++ b/src/input/input_pvr.c Thu Jan 03 01:38:06 2008 +0100 @@ -1008,19 +1008,21 @@ static void pvr_event_handler (pvr_input /* change input */ if (v4l2_data->input != -1 && v4l2_data->input != this->input) { - lprintf("change input to:%d\n", v4l2_data->input); this->input = v4l2_data->input; /* as of ivtv 0.10.6: must close and reopen to set input */ close(this->dev_fd); this->dev_fd = open (this->class->devname, O_RDWR); - if (this->dev_fd == -1) { + if (this->dev_fd < 0) { xprintf(this->stream->xine, XINE_VERBOSITY_DEBUG, "input_pvr: error opening device %s\n", this->class->devname ); } else { - if( ioctl(this->dev_fd, VIDIOC_S_INPUT, &this->input) ) + if( ioctl(this->dev_fd, VIDIOC_S_INPUT, &this->input) == 0 ) { + lprintf("Tuner Input set to:%d\n", v4l2_data->input); + } else { xprintf(this->stream->xine, XINE_VERBOSITY_DEBUG, "input_pvr: error setting v4l2 input\n"); + } } } @@ -1032,14 +1034,30 @@ static void pvr_event_handler (pvr_input /* change frequency */ if (v4l2_data->frequency != -1 && v4l2_data->frequency != this->frequency) { - lprintf("changing frequency to:%.2f\n", (float)v4l2_data->frequency * 62.5); + double freq = (double)v4l2_data->frequency / 1000.0; struct v4l2_frequency vf; + struct v4l2_tuner vt; + double fac = 16; + + memset(&vf, 0, sizeof(vf)); + memset(&vt, 0, sizeof(vt)); + this->frequency = v4l2_data->frequency; - vf.frequency = this->frequency; + + if (ioctl(this->dev_fd, VIDIOC_G_TUNER, &vt) == 0) { + fac = (vt.capability & V4L2_TUNER_CAP_LOW) ? 16000 : 16; + } + vf.tuner = 0; - if( ioctl(this->dev_fd, VIDIOC_S_FREQUENCY, &vf) ) + vf.type = vt.type; + vf.frequency = (__u32)(freq * fac); + + if (ioctl(this->dev_fd, VIDIOC_S_FREQUENCY, &vf) == 0) { + lprintf("Tuner Frequency set to %d (%f.3 MHz)\n", vf.frequency, vf.frequency / fac); + } else { xprintf(this->stream->xine, XINE_VERBOSITY_DEBUG, "input_pvr: error setting v4l2 frequency\n"); + } } pthread_mutex_unlock(&this->dev_lock); diff -r 04ba8050c38ecb04bcf4208377d20c95d6a0d07a -r e19ff9a0ec5577f5acd748d10fa8fdf953c4a4c3 src/spu_dec/sputext_decoder.c --- a/src/spu_dec/sputext_decoder.c Sun Jan 06 21:20:29 2008 +0000 +++ b/src/spu_dec/sputext_decoder.c Thu Jan 03 01:38:06 2008 +0100 @@ -507,11 +507,52 @@ static void read_ssa_tag(sputext_decoder (*sub_x), (*sub_y), (*max_width), (*alignment)); } +static int is_cjk_encoding(const char *enc) { + /* CJK charset strings defined in iconvdata/gconv-modules of glibc */ + static const char cjk_encoding_strings[][16] = { + "SJIS", + "CP932", + "EUC-KR", + "UHC", + "JOHAB", + "BIG5", + "BIG5HKSCS", + "EUC-JP-MS", + "EUC-JP", + "EUC-CN", + "GBBIG5", + "GBK", + "GBGBK", + "EUC-TW", + "ISO-2022-JP", + "ISO-2022-JP-2", + "ISO-2022-JP-3", + "ISO-2022-KR", + "ISO-2022-CN", + "ISO-2022-CN-EXT", + "GB18030", + "EUC-JISX0213", + "SHIFT_JISX0213", + }; + + int pstr; + + /* return 1 if encoding string is one of the CJK(Chinese,Jananese,Korean) + * character set strings. */ + for (pstr = 0; pstr < sizeof (cjk_encoding_strings) / sizeof (cjk_encoding_strings[0]); pstr++) + if (strcasecmp (enc, cjk_encoding_strings[pstr]) == 0) + return 1; + + return 0; +} + static void draw_subtitle(sputext_decoder_t *this, int64_t sub_start, int64_t sub_end ) { int line, y; int font_size; char *font; + const char *encoding = (this->buf_encoding)?this->buf_encoding: + this->class->src_encoding; int sub_x, sub_y, max_width; int alignment; int rebuild_all; @@ -720,7 +761,12 @@ static void draw_subtitle(sputext_decode } } - ogm_render_line(this, x, y + line*this->line_height, this->text[line]); + if( is_cjk_encoding(encoding) ) { + this->renderer->render_text (this->osd, x, y + line * this->line_height, + this->text[line], OSD_TEXT1); + } else { + ogm_render_line(this, x, y + line*this->line_height, this->text[line]); + } } if( font_size != this->font_size ) diff -r 04ba8050c38ecb04bcf4208377d20c95d6a0d07a -r e19ff9a0ec5577f5acd748d10fa8fdf953c4a4c3 src/video_out/Makefile.am --- a/src/video_out/Makefile.am Sun Jan 06 21:20:29 2008 +0000 +++ b/src/video_out/Makefile.am Thu Jan 03 01:38:06 2008 +0100 @@ -142,6 +142,7 @@ xineplug_vo_out_opengl_la_CFLAGS = $(AM_ xineplug_vo_out_syncfb_la_SOURCES = video_out_syncfb.c xineplug_vo_out_syncfb_la_LIBADD = $(XINE_LIB) $(X_LIBS) $(PTHREAD_LIBS) $(LTLIBINTL) +xineplug_vo_out_syncfb_la_CFLAGS = $(AM_CFLAGS) $(X_CFLAGS) xineplug_vo_out_pgx64_la_SOURCES = video_out_pgx64.c xineplug_vo_out_pgx64_la_LIBADD = $(XINE_LIB) $(X_LIBS) $(SUNDGA_LIBS) $(PTHREAD_LIBS) $(LTLIBINTL) diff -r 04ba8050c38ecb04bcf4208377d20c95d6a0d07a -r e19ff9a0ec5577f5acd748d10fa8fdf953c4a4c3 src/xine-engine/buffer_types.c --- a/src/xine-engine/buffer_types.c Sun Jan 06 21:20:29 2008 +0000 +++ b/src/xine-engine/buffer_types.c Thu Jan 03 01:38:06 2008 +0100 @@ -771,6 +771,14 @@ static const video_db_t video_db[] = { BUF_VIDEO_KMVC, "Karl Morton's Video Codec" }, +{ + { + ME_FOURCC('V','M','n','c'), + 0 + }, + BUF_VIDEO_VMNC, + "VMware Screen Codec" +}, { { 0 }, 0, "last entry" } }; |
From: <li...@yo...> - 2008-01-09 22:53:42
|
# HG changeset patch # User Darren Salt <li...@yo...> # Date 1199919188 0 # Node ID feb6b16b7882ff36d037a831c01a52e87e1a5bbc # Parent 8c1dd80eed13e992e2a54b9970c246bc76b9100d # Parent d54ee3555e451eb427ccf920616f488f77f53117 Merge from 1.1. diff -r feb6b16b7882ff36d037a831c01a52e87e1a5bbc -r 8c1dd80eed13e992e2a54b9970c246bc76b9100d ChangeLog --- a/ChangeLog Wed Jan 09 22:53:08 2008 +0000 +++ b/ChangeLog Wed Jan 09 22:51:40 2008 +0000 @@ -52,6 +52,10 @@ xine-lib (1.1.90) (Unreleased) for specific input protocols. * Check for supported extensions before opening the plugin and remove redundant core from plugins. + +xine-lib (1.1.9.1) (unreleased) + * Fix a read-past-end bug in xine-lib's internal strtok_r replacement. + (Only affects systems without strtok_r.) xine-lib (1.1.9) * Fix dvd://.../title[.chapter] handling (somewhat broken in 1.1.8). diff -r feb6b16b7882ff36d037a831c01a52e87e1a5bbc -r 8c1dd80eed13e992e2a54b9970c246bc76b9100d lib/strtok_r.c --- a/lib/strtok_r.c Wed Jan 09 22:53:08 2008 +0000 +++ b/lib/strtok_r.c Wed Jan 09 22:51:40 2008 +0000 @@ -19,7 +19,7 @@ char *xine_private_strtok_r(char *s, con else s = *ptrptr; /* end of searching */ - if (!s || s == '\0') return NULL; + if (!s || !*s) return NULL; /* cut the initial garbage */ cutlen = strspn(s, delim); @@ -32,11 +32,11 @@ char *xine_private_strtok_r(char *s, con } next = s + toklen; + /* prepare next call */ + *ptrptr = *next ? next + 1 : NULL; + /* cut current token */ *next = '\0'; - - /* prepare next call */ - *ptrptr = next + 1; /* return the token */ return s; |
From: <li...@yo...> - 2008-01-12 21:36:30
|
# HG changeset patch # User Darren Salt <li...@yo...> # Date 1200071909 0 # Node ID 1dad98a822c64406810fff529669bfc6f2509a9e # Parent 4001140a3649e9bb2210121e4a03fd194b32fd52 # Parent aa7eb9f098c6607b85a82b59c991569e9c595629 Merge from 1.1. diff -r 1dad98a822c64406810fff529669bfc6f2509a9e -r 4001140a3649e9bb2210121e4a03fd194b32fd52 .hgsigs --- a/.hgsigs Fri Jan 11 17:18:29 2008 +0000 +++ b/.hgsigs Thu Jan 10 18:29:48 2008 +0000 @@ -1,3 +1,4 @@ 5e6d0656ac4efdc1a89ed0fc32f11050f4a22970 5e6d0656ac4efdc1a89ed0fc32f11050f4a22970 0 iD8DBQBGZ207sBKtjPGfWZ8RAhdEAKCrkwiBT6bTof7ro5QQwewRfF/dMACffsvfK42+ahQrjpSfQxEp6k7RpCI= 42358e16442fe54fa554006e0b0bafd51e065c32 0 iD8DBQBG0xz0zbwfTn7RbcARAoD3AJ4012pabmpQvCKKDokZNyZzfPIbWgCfRk5FRly/Eei/xXnSaT54XHAT5KM= 1dbf784bebc791266fcca02e917ee63034ac2e0b 0 iD8DBQBHgQ2mzbwfTn7RbcARArl9AKCslqZDrrm0GiU3IbBvcQVbOdSXlwCgyEMuHY2y/+T6WEeB2CXvCTs5ulI= +b591d00fcd386cdd3779378c34b2d42b7504afc4 0 iD8DBQBHh5UfsBKtjPGfWZ8RAgvMAJ9xwnDNifmaobFYe2nR7+rJlLTkEQCgguGMqwqRZY68HWQXhEx918hp4Yg= diff -r 1dad98a822c64406810fff529669bfc6f2509a9e -r 4001140a3649e9bb2210121e4a03fd194b32fd52 .hgtags --- a/.hgtags Fri Jan 11 17:18:29 2008 +0000 +++ b/.hgtags Thu Jan 10 18:29:48 2008 +0000 @@ -63,3 +63,4 @@ ab1531337553ad5eac24a69ac665eae33916b423 ab1531337553ad5eac24a69ac665eae33916b423 xine-lib-1_1_7-release e0a332b9d3e8bb3fad4d7feac1e519292b062056 xine-lib-1_1_8-release b6be674453e922114b55d4613cb197c77d19f094 xine-lib-1_1_9-release +9438947f88ad2bed1832385301c6b4e62709625a xine-lib-1_1_9_1-release diff -r 1dad98a822c64406810fff529669bfc6f2509a9e -r 4001140a3649e9bb2210121e4a03fd194b32fd52 ChangeLog --- a/ChangeLog Fri Jan 11 17:18:29 2008 +0000 +++ b/ChangeLog Thu Jan 10 18:29:48 2008 +0000 @@ -53,9 +53,13 @@ xine-lib (1.1.90) (Unreleased) * Check for supported extensions before opening the plugin and remove redundant core from plugins. -xine-lib (1.1.9.1) (unreleased) +xine-lib (1.1.9.1) + * Security fixes: + - Fix a buffer overflow in RTSP header-handling code. (CVE-2008-0225) + (Fix ported from mplayer changeset 22821) * Fix a read-past-end bug in xine-lib's internal strtok_r replacement. (Only affects systems without strtok_r.) [Bug #19] + * Fix a bug which causes video playback display errors on PPC/Darwin. xine-lib (1.1.9) * Fix dvd://.../title[.chapter] handling (somewhat broken in 1.1.8). @@ -1673,3 +1677,4 @@ xine (0.3.0+older) unstable; urgency=low -- Siggi Langauf <si...@us...> Sun, 7 Jan 2001 23:59:12 +0100 + diff -r 1dad98a822c64406810fff529669bfc6f2509a9e -r 4001140a3649e9bb2210121e4a03fd194b32fd52 src/input/libreal/rmff.c --- a/src/input/libreal/rmff.c Fri Jan 11 17:18:29 2008 +0000 +++ b/src/input/libreal/rmff.c Thu Jan 10 18:29:48 2008 +0000 @@ -35,9 +35,13 @@ * writes header data to a buffer */ -static void rmff_dump_fileheader(rmff_fileheader_t *fileheader, uint8_t *buffer) { - - if (!fileheader) return; +static int rmff_dump_fileheader(rmff_fileheader_t *fileheader, uint8_t *buffer, int bufsize) { + + if (!fileheader) return 0; + + 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); @@ -53,11 +57,17 @@ static void rmff_dump_fileheader(rmff_fi 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); -} - -static void rmff_dump_prop(rmff_prop_t *prop, uint8_t *buffer) { - - if (!prop) return; + + return RMFF_FILEHEADER_SIZE; +} + +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); @@ -93,13 +103,19 @@ static void rmff_dump_prop(rmff_prop_t * 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); -} - -static void rmff_dump_mdpr(rmff_mdpr_t *mdpr, uint8_t *buffer) { + + return RMFF_PROPHEADER_SIZE; +} + +static int rmff_dump_mdpr(rmff_mdpr_t *mdpr, uint8_t *buffer, int bufsize) { int s1, s2, s3; - if (!mdpr) return; + 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); @@ -141,13 +157,19 @@ static void rmff_dump_mdpr(rmff_mdpr_t * mdpr->duration=_X_BE_32(&mdpr->duration); mdpr->object_id=_X_BE_32(&mdpr->object_id); -} - -static void rmff_dump_cont(rmff_cont_t *cont, uint8_t *buffer) { + return RMFF_MDPRHEADER_SIZE + s1 + s2 + s3; +} + +static int rmff_dump_cont(rmff_cont_t *cont, uint8_t *buffer, int bufsize) { int p; - if (!cont) return; + 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); @@ -181,11 +203,18 @@ static void rmff_dump_cont(rmff_cont_t * 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); -} - -static void rmff_dump_dataheader(rmff_data_t *data, uint8_t *buffer) { - - if (!data) return; + + return RMFF_CONTHEADER_SIZE + cont->title_len + cont->author_len + + cont->copyright_len + cont->comment_len; +} + +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; + 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); @@ -201,32 +230,43 @@ static void rmff_dump_dataheader(rmff_da 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, 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; } diff -r 1dad98a822c64406810fff529669bfc6f2509a9e -r 4001140a3649e9bb2210121e4a03fd194b32fd52 src/input/libreal/rmff.h --- a/src/input/libreal/rmff.h Fri Jan 11 17:18:29 2008 +0000 +++ b/src/input/libreal/rmff.h Thu Jan 10 18:29:48 2008 +0000 @@ -38,6 +38,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) ) | \ diff -r 1dad98a822c64406810fff529669bfc6f2509a9e -r 4001140a3649e9bb2210121e4a03fd194b32fd52 src/input/librtsp/rtsp_session.c --- a/src/input/librtsp/rtsp_session.c Fri Jan 11 17:18:29 2008 +0000 +++ b/src/input/librtsp/rtsp_session.c Thu Jan 10 18:29:48 2008 +0000 @@ -148,6 +148,11 @@ connect: rtsp_session->header_left = rtsp_session->header_len = rmff_dump_header(h,rtsp_session->header,HEADER_SIZE); + if (rtsp_session->header_len < 0) { + xprintf (stream->xine, XINE_VERBOSITY_LOG, + _("rtsp_session: rtsp server returned overly-large headers, session can not be established.\n")); + goto session_abort; + } xine_buffer_copyin(rtsp_session->recv, 0, rtsp_session->header, rtsp_session->header_len); rtsp_session->recv_size = rtsp_session->header_len; @@ -157,6 +162,7 @@ connect: { xprintf(stream->xine, XINE_VERBOSITY_LOG, _("rtsp_session: rtsp server type '%s' not supported yet. sorry.\n"), server); + session_abort: rtsp_close(rtsp_session->s); free(server); xine_buffer_free(rtsp_session->recv); diff -r 1dad98a822c64406810fff529669bfc6f2509a9e -r 4001140a3649e9bb2210121e4a03fd194b32fd52 src/video_out/macosx/XineOpenGLView.m --- a/src/video_out/macosx/XineOpenGLView.m Fri Jan 11 17:18:29 2008 +0000 +++ b/src/video_out/macosx/XineOpenGLView.m Thu Jan 10 18:29:48 2008 +0000 @@ -336,7 +336,7 @@ NSColorToYUV(NSColor *color) // http://developer.apple.com/samplecode/Sample_Code/Graphics_3D/TextureRange/MainOpenGLView.m.htm glTexSubImage2D(GL_TEXTURE_RECTANGLE_EXT, 0, 0, 0, videoSize.width, videoSize.height, GL_YCBCR_422_APPLE, -#if WORDS_BIG_ENDIAN +#if WORDS_BIGENDIAN GL_UNSIGNED_SHORT_8_8_APPLE, #else GL_UNSIGNED_SHORT_8_8_REV_APPLE, |
From: <li...@yo...> - 2008-01-17 23:39:06
|
# HG changeset patch # User Darren Salt <li...@yo...> # Date 1200610415 0 # Node ID 203eb568dc332287c07d857f8853506e00b6a4a4 # Parent 289b95411dd3fbc77753b3f5bbe718921499b39d # Parent 2422e4f2bbac3b8726aed9a555152ccffe63e296 Merge from 1.1. diff -r 203eb568dc332287c07d857f8853506e00b6a4a4 -r 289b95411dd3fbc77753b3f5bbe718921499b39d ChangeLog --- a/ChangeLog Thu Jan 17 22:53:35 2008 +0000 +++ b/ChangeLog Thu Jan 17 22:38:14 2008 +0000 @@ -55,6 +55,10 @@ xine-lib (1.1.90) (Unreleased) * Remove SyncFB video output plugin, the kernel module needed is no more active and thus it's no more usable. If you were using SyncFB somehow, please use DirectFB or VIDIX instead. + +xine-lib (1.1.10) (unreleased) + * Update Ogg and Annodex mimetypes and extensions. + * Change the default v4l device paths to /dev/video0 and /dev/radio0. xine-lib (1.1.9.1) * Security fixes: diff -r 203eb568dc332287c07d857f8853506e00b6a4a4 -r 289b95411dd3fbc77753b3f5bbe718921499b39d debian/changelog --- a/debian/changelog Thu Jan 17 22:53:35 2008 +0000 +++ b/debian/changelog Thu Jan 17 22:38:14 2008 +0000 @@ -5,13 +5,16 @@ xine-lib-1.2 (1.2.0~hg-0) experimental; -- Darren Salt <li...@yo...> Tue, 17 Apr 2007 16:50:37 +0100 -xine-lib (1.1.9~hg-0) unstable; urgency=low +xine-lib (1.1.10~hg-0) unstable; urgency=low + + [ Darren Salt ] + * Hg snapshot. [ Reinhard Tartler ] * remove gs from build-dependencies * change the maintainer field to xin...@li.... - -- Reinhard Tartler <sir...@ta...> Sun, 25 Nov 2007 23:45:52 +0100 + -- Darren Salt <li...@yo...> Mon, 14 Jan 2008 22:57:42 +0000 xine-lib (1.1.5~cvs-0) unstable; urgency=low diff -r 203eb568dc332287c07d857f8853506e00b6a4a4 -r 289b95411dd3fbc77753b3f5bbe718921499b39d debian/control --- a/debian/control Thu Jan 17 22:53:35 2008 +0000 +++ b/debian/control Thu Jan 17 22:38:14 2008 +0000 @@ -11,7 +11,6 @@ Build-Depends: debhelper (>= 5.0.1), bin libxcb-xvmc0-dev | libxv-dev (<< 1:1.0.3), libxcb-shm0-dev | libxv-dev (<< 1:1.0.3), libxcb-shape0-dev | libxv-dev (<< 1:1.0.3), libxinerama-dev, libxv-dev, libxvmc-dev, libxt-dev, - libdirectfb-dev (>= 0.9.22), libasound2-dev [!kfreebsd-i386 !kfreebsd-amd64 !hurd-i386], libaa1-dev, libcaca-dev, libmodplug-dev, libmagick9-dev, libpng12-dev, libfreetype6-dev, @@ -19,7 +18,7 @@ Build-Depends: debhelper (>= 5.0.1), bin libesd0-dev, libgnomevfs2-dev, zlib1g-dev, libartsc0-dev, liblircclient-dev, libjack0.100.0-dev | libjack-dev, - libdirectfb-dev, libgtk2.0-dev, + libdirectfb-dev (>= 0.9.22), libgtk2.0-dev, libflac-dev, libpulse-dev, libsdl1.2-dev, libwavpack-dev, libsmbclient-dev, libspeex-dev, libmng-dev, libmad0-dev, libmpcdec-dev, libcdio-dev (>= 0.76-1), libvcdinfo-dev, diff -r 203eb568dc332287c07d857f8853506e00b6a4a4 -r 289b95411dd3fbc77753b3f5bbe718921499b39d doc/faq/faq.docbook --- a/doc/faq/faq.docbook Thu Jan 17 22:53:35 2008 +0000 +++ b/doc/faq/faq.docbook Thu Jan 17 22:38:14 2008 +0000 @@ -8,7 +8,7 @@ <title>The xine engine FAQ</title> <titleabbrev>xine FAQ</titleabbrev> <copyright> - <year>2001-2007</year> + <year>2001-2008</year> <holder>the xine project team</holder> </copyright> </bookinfo> @@ -948,7 +948,7 @@ Latest xine-lib modules (1-beta3 or newer) support external subtitles for any media file, not only AVI. In order to use it you can pass a special MRL construction like: - <screen> <command>xine test.mpg#subtitle:file.sub</command></screen> + <screen> <command>xine file://path/to/test.mpg#subtitle:/path/to/file.sub</command></screen> The external subtitles support can also be used by any xine frontend. Currently xine-ui and kaffeine implement this feature with a subtitle selection dialog. diff -r 203eb568dc332287c07d857f8853506e00b6a4a4 -r 289b95411dd3fbc77753b3f5bbe718921499b39d src/combined/xine_vorbis_decoder.c --- a/src/combined/xine_vorbis_decoder.c Thu Jan 17 22:53:35 2008 +0000 +++ b/src/combined/xine_vorbis_decoder.c Thu Jan 17 22:38:14 2008 +0000 @@ -41,6 +41,7 @@ #include <vorbis/codec.h> #define MAX_NUM_SAMPLES 4096 +#define INIT_BUFSIZE 8192 typedef struct { audio_decoder_class_t decoder_class; @@ -70,6 +71,11 @@ typedef struct vorbis_decoder_s { xine_stream_t *stream; + /* data accumulation stuff */ + unsigned char *buf; + int bufsize; + int size; + } vorbis_decoder_t; @@ -78,6 +84,7 @@ static void vorbis_reset (audio_decoder_ vorbis_decoder_t *this = (vorbis_decoder_t *) this_gen; if( this->header_count ) return; + this->size = 0; /* clear block first, as it might contain allocated data */ vorbis_block_clear(&this->vb); @@ -136,126 +143,147 @@ static void get_metadata (vorbis_decoder _x_meta_info_set_utf8(this->stream, XINE_META_INFO_AUDIOCODEC, "vorbis"); } +static void vorbis_check_bufsize (vorbis_decoder_t *this, int size) { + if (size > this->bufsize) { + this->bufsize = size + size / 2; + xprintf(this->stream->xine, XINE_VERBOSITY_LOG, + _("vorbis: increasing buffer to %d to avoid overflow.\n"), + this->bufsize); + this->buf = realloc(this->buf, this->bufsize); + } +} + static void vorbis_decode_data (audio_decoder_t *this_gen, buf_element_t *buf) { vorbis_decoder_t *this = (vorbis_decoder_t *) this_gen; memset( &this->op, 0, sizeof(this->op) ); - this->op.packet = buf->content; - this->op.bytes = buf->size; - - if ( (buf->decoder_flags & BUF_FLAG_HEADER) && - !(buf->decoder_flags & BUF_FLAG_STDHEADER) ) { - lprintf ("%d headers to go\n", this->header_count); - - if (this->header_count) { - int res = 0; - - if (this->header_count == 3) - this->op.b_o_s = 1; - - - if( (res = vorbis_synthesis_headerin(&this->vi,&this->vc,&this->op)) < 0 ){ - /* error case; not a vorbis header */ - xine_log(this->stream->xine, XINE_LOG_MSG, "libvorbis: this bitstream does not contain vorbis audio data. Following first 64 bytes (return: %d).\n", res); - xine_hexdump((char *)this->op.packet, this->op.bytes < 64 ? this->op.bytes : 64); - return; + + /* data accumulation */ + vorbis_check_bufsize(this, this->size + buf->size); + xine_fast_memcpy (&this->buf[this->size], buf->content, buf->size); + this->size += buf->size; + + if (buf->decoder_flags & BUF_FLAG_FRAME_END) { + this->op.packet = this->buf; + this->op.bytes = this->size; + + /* reset accumultaion buffer */ + this->size = 0; + + if ( (buf->decoder_flags & BUF_FLAG_HEADER) && + !(buf->decoder_flags & BUF_FLAG_STDHEADER) ) { + + lprintf ("%d headers to go\n", this->header_count); + + if (this->header_count) { + int res = 0; + + if (this->header_count == 3) + this->op.b_o_s = 1; + + if ( (res = vorbis_synthesis_headerin(&this->vi,&this->vc,&this->op)) < 0 ) { + /* error case; not a vorbis header */ + xine_log(this->stream->xine, XINE_LOG_MSG, "libvorbis: this bitstream does not contain vorbis audio data. Following first 64 bytes (return: %d).\n", res); + xine_hexdump((char *)this->op.packet, this->op.bytes < 64 ? this->op.bytes : 64); + return; + } + + this->header_count--; + + if (!this->header_count) { + + int mode = AO_CAP_MODE_MONO; + + get_metadata (this); + + mode = _x_ao_channels2mode(this->vi.channels); + + this->convsize=MAX_NUM_SAMPLES/this->vi.channels; + + if (!this->output_open) { + this->output_open = (this->stream->audio_out->open) (this->stream->audio_out, + this->stream, + 16, + this->vi.rate, + mode) ; + + _x_stream_info_set(this->stream, XINE_STREAM_INFO_AUDIO_BITRATE, + this->vi.bitrate_nominal); + + } + + /* OK, got and parsed all three headers. Initialize the Vorbis + * packet->PCM decoder. */ + lprintf("all three headers parsed. initializing decoder.\n"); + /* initialize central decode state */ [... 46 lines omitted ...] + + if(vorbis_synthesis(&this->vb,&this->op)==0) + vorbis_synthesis_blockin(&this->vd,&this->vb); + + if (buf->pts!=0) + this->pts=buf->pts; + + while ((samples=vorbis_synthesis_pcmout(&this->vd,&pcm))>0){ + + /* **pcm is a multichannel float vector. In stereo, for + * example, pcm[0][...] is left, and pcm[1][...] is right. + * samples is the size of each channel. Convert the float + * values (-1.<=range<=1.) to whatever PCM format and write + * it out + */ + + int i,j; + int bout=(samples<this->convsize?samples:this->convsize); + audio_buffer_t *audio_buffer; + + audio_buffer = this->stream->audio_out->get_buffer (this->stream->audio_out); + + /* convert floats to 16 bit signed ints (host order) and + interleave */ + for(i=0;i<this->vi.channels;i++){ + ogg_int16_t *ptr=audio_buffer->mem+i; + float *mono=pcm[i]; + for(j=0;j<bout;j++){ + int val=(mono[j] + 1.0f) * 32768.f; + val -= 32768; + /* might as well guard against clipping */ + if(val>32767){ + val=32767; + } else if(val<-32768){ + val=-32768; + } + *ptr=val; + ptr+=this->vi.channels; + } + } + + audio_buffer->vpts = this->pts; + this->pts=0; + audio_buffer->num_frames = bout; + + this->stream->audio_out->put_buffer (this->stream->audio_out, audio_buffer, this->stream); + + buf->pts=0; + + /* tell libvorbis how many samples we actually consumed */ + vorbis_synthesis_read(&this->vd,bout); } + } else { + lprintf("output not open\n"); } - - } else if (this->output_open) { - - float **pcm; - int samples; - - if(vorbis_synthesis(&this->vb,&this->op)==0) - vorbis_synthesis_blockin(&this->vd,&this->vb); - - if (buf->pts!=0) - this->pts=buf->pts; - - while ((samples=vorbis_synthesis_pcmout(&this->vd,&pcm))>0){ - - /* **pcm is a multichannel float vector. In stereo, for - * example, pcm[0][...] is left, and pcm[1][...] is right. - * samples is the size of each channel. Convert the float - * values (-1.<=range<=1.) to whatever PCM format and write - * it out - */ - - int i,j; - int bout=(samples<this->convsize?samples:this->convsize); - audio_buffer_t *audio_buffer; - - audio_buffer = this->stream->audio_out->get_buffer (this->stream->audio_out); - - /* convert floats to 16 bit signed ints (host order) and - interleave */ - for(i=0;i<this->vi.channels;i++){ - ogg_int16_t *ptr=audio_buffer->mem+i; - float *mono=pcm[i]; - for(j=0;j<bout;j++){ - int val=(mono[j] + 1.0f) * 32768.f; - val -= 32768; - /* might as well guard against clipping */ - if(val>32767){ - val=32767; - } else if(val<-32768){ - val=-32768; - } - *ptr=val; - ptr+=this->vi.channels; - } - } - - audio_buffer->vpts = this->pts; - this->pts=0; - audio_buffer->num_frames = bout; - - this->stream->audio_out->put_buffer (this->stream->audio_out, audio_buffer, this->stream); - - buf->pts=0; - - /* tell libvorbis how many samples we actually consumed */ - vorbis_synthesis_read(&this->vd,bout); - } - } else { - lprintf("output not open\n"); } } @@ -299,6 +327,10 @@ static audio_decoder_t *open_plugin (aud this->header_count = 3; this->convsize = 0; + this->bufsize = INIT_BUFSIZE; + this->buf = xine_xmalloc(INIT_BUFSIZE); + this->size = 0; + vorbis_info_init(&this->vi); vorbis_comment_init(&this->vc); diff -r 203eb568dc332287c07d857f8853506e00b6a4a4 -r 289b95411dd3fbc77753b3f5bbe718921499b39d src/demuxers/asfheader.c --- a/src/demuxers/asfheader.c Thu Jan 17 22:53:35 2008 +0000 +++ b/src/demuxers/asfheader.c Thu Jan 17 22:38:14 2008 +0000 @@ -140,9 +140,9 @@ static char *asf_reader_get_string(asf_r static char *asf_reader_get_string(asf_reader_t *reader, size_t size, iconv_t cd) { char *inbuf, *outbuf; size_t inbytesleft, outbytesleft; - char scratch[2048]; - - if ((reader->size - reader->pos) < size) + char scratch[2048]; + + if ((size == 0) ||((reader->size - reader->pos) < size)) return NULL; inbuf = (char *)reader->buffer + reader->pos; @@ -596,6 +596,12 @@ static int asf_header_parse_content_desc content->description = asf_reader_get_string(&reader, description_length, iconv_cd); content->rating = asf_reader_get_string(&reader, rating_length, iconv_cd); + lprintf("title: %d chars: \"%s\"\n", title_length, content->title); + lprintf("author: %d chars: \"%s\"\n", author_length, content->author); + lprintf("copyright: %d chars: \"%s\"\n", copyright_length, content->copyright); + lprintf("description: %d chars: \"%s\"\n", description_length, content->description); + lprintf("rating: %d chars: \"%s\"\n", rating_length, content->rating); + header->pub.content = content; iconv_close(iconv_cd); diff -r 203eb568dc332287c07d857f8853506e00b6a4a4 -r 289b95411dd3fbc77753b3f5bbe718921499b39d src/demuxers/demux_asf.c --- a/src/demuxers/demux_asf.c Thu Jan 17 22:53:35 2008 +0000 +++ b/src/demuxers/demux_asf.c Thu Jan 17 22:38:14 2008 +0000 @@ -722,6 +722,9 @@ static void asf_send_buffer_nodefrag (de buf->size = bufsize; timestamp = 0; + if (stream->frag_offset == 0) + buf->decoder_flags |= BUF_FLAG_FRAME_START; + stream->frag_offset += bufsize; frag_len -= bufsize; @@ -732,10 +735,6 @@ static void asf_send_buffer_nodefrag (de else check_newpts (this, buf->pts, PTS_AUDIO, package_done); - - if (frag_offset == 0) - buf->decoder_flags |= BUF_FLAG_FRAME_START; - /* test if whole packet read */ if (package_done) { buf->decoder_flags |= BUF_FLAG_FRAME_END; diff -r 203eb568dc332287c07d857f8853506e00b6a4a4 -r 289b95411dd3fbc77753b3f5bbe718921499b39d src/input/input_v4l.c --- a/src/input/input_v4l.c Thu Jan 17 22:53:35 2008 +0000 +++ b/src/input/input_v4l.c Thu Jan 17 22:38:14 2008 +0000 @@ -114,8 +114,8 @@ static const int tv_standard_values[] = static const int tv_standard_values[] = { VIDEO_MODE_PAL, VIDEO_MODE_NTSC, VIDEO_MODE_SECAM }; #define NUM_RESOLUTIONS (sizeof(resolutions)/sizeof(resolutions[0])) -#define RADIO_DEV "/dev/v4l/radio0" -#define VIDEO_DEV "/dev/v4l/video0" +#define RADIO_DEV "/dev/radio0" +#define VIDEO_DEV "/dev/video0" #if !defined(NDELAY) && defined(O_NDELAY) #define FNDELAY O_NDELAY |
From: <li...@yo...> - 2008-01-23 00:58:44
|
# HG changeset patch # User Darren Salt <li...@yo...> # Date 1201049530 0 # Node ID df0f97a4bf34d75284aacd902a323a1d81f28d49 # Parent 115f056ed57a7a06ccc4a62042dd3fbac9455034 # Parent e9be6befee2d8b6b9d0aeec8ec398c30bc25d95a Merge from 1.1. diff -r df0f97a4bf34d75284aacd902a323a1d81f28d49 -r 115f056ed57a7a06ccc4a62042dd3fbac9455034 ChangeLog --- a/ChangeLog Wed Jan 23 00:52:10 2008 +0000 +++ b/ChangeLog Tue Jan 22 18:47:15 2008 +0100 @@ -64,8 +64,10 @@ xine-lib (1.1.10) (unreleased) * Unescape the filename in "#save:". This allows filenames to contain ';' etc. without ambiguity, e.g. "#save:foo%3B1.ts" -> "foo;1.ts", but front end authors should be careful with xine-lib older than 1.1.10. - -xine-lib (1.1.9.1) + * Backported xine-config & libxine.pc from 1.2. + Consequently, xine-config now requires pkg-config. + +xine-lib (1.1.9.1) 2008-01-11 * Security fixes: - Buffer overflow which allows a remote attacker to execute arbitrary code via a crafted SDP Abstract attribute. (CVE-2008-0225) @@ -74,7 +76,7 @@ xine-lib (1.1.9.1) (Only affects systems without strtok_r.) [Bug #19] * Fix a bug which causes video playback display errors on PPC/Darwin. -xine-lib (1.1.9) +xine-lib (1.1.9) 2008-01-06 * Fix dvd://.../title[.chapter] handling (somewhat broken in 1.1.8). * Fix switching DVB subtitles channels. * DVB sub: switch to dyn mem alloc and allow multiple CLUTs per page. @@ -122,7 +124,7 @@ xine-lib (1.1.9) * Workaround for subtitle rendering when using variable-length character encodings other than UTF-8. (There is probably still some breakage here.) -xine-lib (1.1.8) +xine-lib (1.1.8) 2007-08-27 * Send a channel-changed event to the frontend when receiving the SYNC string from last.fm streaming server. * Disable mediaLib support by default (the licenses probably disallow the @@ -148,7 +150,7 @@ xine-lib (1.1.8) * Various small video frame-handling bug fixes. * Add options to control bob deinterlacing in the XxMC video output plugin. -xine-lib (1.1.7) +xine-lib (1.1.7) 2007-06-07 * Support libdca (new name for libdts) by shuffling around the dts.h file. * Add support for MDHD version 1 atom in demux_qt. [Bug SF 1679398] * Handle single-quoted attribute values in XML. @@ -179,7 +181,7 @@ xine-lib (1.1.7) in 1.2 series. * Fix a colour format conversion crash in the fb video output driver. -xine-lib (1.1.6) +xine-lib (1.1.6) 2007-04-17 * Split the DirectFB plugin into X11 and non-X versions. * Improve the Mac OS X video output plugin. Thanks to Matt Messier. * Fixed the XcbXv plugin - an empty plugin would be built if "old" Xv @@ -191,7 +193,7 @@ xine-lib (1.1.6) * Fixed a CDDA-related crash and a DVD-related hang, both caused by the same change in 1.1.5. -xine-lib (1.1.5) +xine-lib (1.1.5) 2007-04-10 * Security fixes: - Fix heap overflow in DMO loader. (CVE-2007-1246) [Bug SF 1676925] Thanks to Kees Cook for reporting. @@ -245,7 +247,7 @@ xine-lib (1.1.5) * Support multiple audio PID in MPEG TS. Patch by Julian Scheel. * Improvement in portability to OpenBSD, thanks to Pascal S. de Kloe. -xine-lib (1.1.4) +xine-lib (1.1.4) 2007-01-28 * Mark string-type configuration items according to whether they're plain strings or names of files, device nodes or directories. This information is available to front ends (via .num_value) so that they can present @@ -311,7 +313,7 @@ xine-lib (1.1.4) * Fix audio/video sync problem with NTSC DVDs (introduced in 1.1.2). [Bugs SF 1544349, SF 1589644] -xine-lib (1.1.3) +xine-lib (1.1.3) 2006-12-03 * Security fixes: - Heap overflow in libmms (related to CVE-2006-2200) - Buffer overrun in Real Media input plugin. [Bug SF 1603458] @@ -356,7 +358,7 @@ xine-lib (1.1.3) * Fix some crashes caused by MP3 files (and possibly others) being misdetected as AAC. -xine-lib (1.1.2) +xine-lib (1.1.2) 2006-07-09 * Security fixes: - CVE-2005-4048: possible buffer overflow in libavcodec (crafted PNGs). - CVE-2006-2802: possible buffer overflow in the HTTP plugin. @@ -392,7 +394,7 @@ xine-lib (1.1.2) * Fixed some win32 codec freezes when configured w32-path doesn't exist * Add support for RealPlayer 10 codecs (from SUSE) -xine-lib (1.1.1) +xine-lib (1.1.1) 2005-11-15 * Improve sound quality when using alsa 1.0.9 or above. When playing a 44.1khz stream on a 48khz only capable sound card. It bypasses alsa-lib resampler and uses xine's @@ -417,7 +419,7 @@ xine-lib (1.1.1) * cddb improvements/fixes (DTITLE/DYEAR parsing, timeout increase and multiline entries support) [Bug SF 1205274] -xine-lib (1.1.0) +xine-lib (1.1.0) 2005-07-26 * new quality deinterlacer from dscaler: GreedyH (Greedy High Motion) * new quality deinterlacer from dscaler: TomsMoComp (Tom's Motion Compensated) * added help for most deinterlace methods @@ -517,7 +519,7 @@ xine-lib (1.0.1) flexible plugin linking * support for Windows Media Audio Lossless -xine-lib (1.0) +xine-lib (1.0) 2004-12-25 * unbreak DXR3 plugin * fix crash in the AIFF demuxer on oversized chunks * fix crash in the sputext decoder when subtitles have too many lines @@ -532,7 +534,7 @@ xine-lib (1.0) * fixed crash related to relative HTTP redirect URLs (implemented canonicalisation) * linking libXv dynamically, fixes breakage of Xv plugin -xine-lib (1-rc8) +xine-lib (1-rc8) 2004-12-15 * Multiple security vulnerabilities fixed on PNM and Real RTSP clients * Rewrote OpenGL output plugin. * Fixed segfault when seeking with the "xvmc" and "xxmc" plugins playing @@ -566,7 +568,7 @@ xine-lib (1-rc8) * meta info (title, artist, etc) returned by the xine-lib is now UTF8 * new XINE_META_INFO_TRACK_NUMBER meta info [... 422 lines omitted ...] -xine (0.3.5) unstable; urgency=low +xine (0.3.5) 2001-01-10 * (hopefully) fixed autoconf for Athlon processors * fixed aspect ratio calculation (=> SVCD support) @@ -1597,7 +1599,7 @@ xine (0.3.5) unstable; urgency=low -- Siggi Langauf <si...@us...> Wed, 10 Jan 2001 11:10:57 +0100 -xine (0.3.4) unstable; urgency=low +xine (0.3.4) 2001-01-08 * re-debianized package using debhelper (much cleaner debian packages) @@ -1608,8 +1610,7 @@ xine (0.3.4) unstable; urgency=low -- Siggi Langauf <si...@us...> Mon, 8 Jan 2001 04:03:11 +0100 - -xine (0.3.3) unstable; urgency=low +xine (0.3.3) 2001-01-04 * playlist, autoplay function * seamless branching @@ -1620,8 +1621,7 @@ xine (0.3.3) unstable; urgency=low -- Siggi Langauf <si...@us...> Thu, 04 Jan 2001 01:37:42 +0100 - -xine (0.3.2) unstable; urgency=low +xine (0.3.2) 2000-12-13 * audio rate up/downsampling * new yuv2rgb routines @@ -1635,16 +1635,14 @@ xine (0.3.2) unstable; urgency=low -- Siggi Langauf <si...@us...> Wed, 13 Dec 2000 02:44:18 +0100 - -xine (0.3.1p1) unstable; urgency=high +xine (0.3.1p1) 2000-11-21 * Bugfix for Debian package: 0.3.1 always segfaulted. This release should work... -- Siggi Langauf <si...@us...> Tue, 21 Nov 2000 21:43:18 +0100 - -xine (0.3.1) unstable; urgency=low +xine (0.3.1) 2000-11-20 * Initial release of Debian package. @@ -1656,38 +1654,42 @@ xine (0.3.1) unstable; urgency=low -- Siggi Langauf <si...@us...> Sun, 19 Nov 2000 15:33:28 +0100 -xine (0.3.0+older) unstable; urgency=low - - 0.3.0 - - NULL audio driver (ability to run without sound card) - - ALSA audio driver - - pause function - - simple playlist function - - massive performance improvements for xshm - through subslice output - - gui/skin improvements - - improved build process - - improved internal architecture - - many minor updates/bugfixes - - 0.2.4 - this is a maintenance/bugfix - release, just wanted to release all the small little changes - before we go for the next big architecture update that will - be in the 0.3.x series - - - 0.2.3 - - included patches by Alan Cox: - net_plugin, bug fixes (i.e. VCD ...) - - xshm video output module fixed for bpp>16 - (but don't use that for speed reasons!) - - new iDCT_mmx code from walken - => picture quality massively improved :)) - - FAQ update - - speed improvements due to new compiler switches - - minor Makefile fixes for FreeBSD ports +xine (0.3.0) 2000-11-18 + + - NULL audio driver (ability to run without sound card) + - ALSA audio driver + - pause function + - simple playlist function + - massive performance improvements for xshm through subslice output + - gui/skin improvements + - improved build process + - improved internal architecture + - many minor updates/bugfixes + +xine (0.2.4) 2000-10-30 + + - this is a maintenance/bugfix release, just wanted to release all the + small little changes before we go for the next big architecture update + that will be in the 0.3.x series + +xine (0.2.3) 2000-10-15 + + - included patches by Alan Cox: + net_plugin, bug fixes (i.e. VCD ...) + - xshm video output module fixed for bpp>16 + (but don't use that for speed reasons!) + - new iDCT_mmx code from walken + => picture quality massively improved :)) + - FAQ update + - speed improvements due to new compiler switches + - minor Makefile fixes for FreeBSD ports -- Siggi Langauf <si...@us...> Sun, 7 Jan 2001 23:59:12 +0100 - +xine (0.2.2) 2000-10-10 + +xine (0.2.1) 2000-10-10 + +xine (0.2.0) 2000-09-28 + +xine (0.1.3) 2000-08-17 diff -r df0f97a4bf34d75284aacd902a323a1d81f28d49 -r 115f056ed57a7a06ccc4a62042dd3fbac9455034 debian/control --- a/debian/control Wed Jan 23 00:52:10 2008 +0000 +++ b/debian/control Tue Jan 22 18:47:15 2008 +0100 @@ -29,7 +29,7 @@ Package: libxine-dev Package: libxine-dev Architecture: any Section: libdevel -Depends: libxine2 (= ${Source-Version}), libc6-dev, zlib1g-dev | libz-dev, libslang2-dev | slang1-dev, libfreetype6-dev +Depends: libxine2 (= ${Source-Version}), libc6-dev, zlib1g-dev | libz-dev, libslang2-dev | slang1-dev, libfreetype6-dev, pkg-config Conflicts: xine-ui (<< 0.9.10), libxine-dev Description: the xine video player library, development packages This contains development files (headers, documentation and the like) diff -r df0f97a4bf34d75284aacd902a323a1d81f28d49 -r 115f056ed57a7a06ccc4a62042dd3fbac9455034 misc/libxine.pc.in --- a/misc/libxine.pc.in Wed Jan 23 00:52:10 2008 +0000 +++ b/misc/libxine.pc.in Tue Jan 22 18:47:15 2008 +0100 @@ -17,7 +17,7 @@ objcflags=@OBJCFLAGS@ Name: libxine Description: The xine engine library -Version: @XINE_MAJOR@.@XINE_MINOR@.@XINE_SUB@ +Version: @XINE_MAJOR@.@XINE_MINOR@.@XINE_SUB@@XINE_PATCH@ Requires: Libs: -L${libdir} -lxine Libs.private: @ZLIB_LIBS@ @NET_LIBS@ @PTHREAD_LIBS@ @LIBICONV@ @RT_LIBS@ diff -r df0f97a4bf34d75284aacd902a323a1d81f28d49 -r 115f056ed57a7a06ccc4a62042dd3fbac9455034 misc/xine-config --- a/misc/xine-config Wed Jan 23 00:52:10 2008 +0000 +++ b/misc/xine-config Tue Jan 22 18:47:15 2008 +0100 @@ -43,11 +43,11 @@ while test $# -gt 0; do if [ "$exec_prefix" = '' ]; then exec_prefix="$optarg" fi + args="$args${args+ }--variable=prefix" ;; --exec-prefix=*) exec_prefix="$optarg" - ;; - --prefix|--exec-prefix) + args="$args${args+ }--variable=exec_prefix" ;; --version) args="$args${args+ }--modversion" @@ -55,8 +55,11 @@ while test $# -gt 0; do --cflags|--libs) args="$args${args+ }$1" ;; - --acflags|--plugindir|--datadir|--scriptdir|--localedir|--objcflags) + --prefix|--acflags|--plugindir|--datadir|--scriptdir|--localedir|--objcflags) args="$args${args+ }--variable=${1#--}" + ;; + --exec-prefix) + args="$args${args+ }--variable=exec_prefix" ;; *) usage 1 1>&2 @@ -68,5 +71,5 @@ echo 'xine-config is DEPRECATED. Use pkg echo 'xine-config is DEPRECATED. Use pkg-config instead.' >&2 exec pkg-config "${prefix+--define-variable=prefix=}$prefix" \ - "${exec_prefix+--define-variable=exc_prefix=}$exec_prefix" \ + "${exec_prefix+--define-variable=exec_prefix=}$exec_prefix" \ $args libxine diff -r df0f97a4bf34d75284aacd902a323a1d81f28d49 -r 115f056ed57a7a06ccc4a62042dd3fbac9455034 src/audio_dec/xine_mad_decoder.c --- a/src/audio_dec/xine_mad_decoder.c Wed Jan 23 00:52:10 2008 +0000 +++ b/src/audio_dec/xine_mad_decoder.c Tue Jan 22 18:47:15 2008 +0100 @@ -149,6 +149,7 @@ static void mad_decode_data (audio_decod static void mad_decode_data (audio_decoder_t *this_gen, buf_element_t *buf) { mad_decoder_t *this = (mad_decoder_t *) this_gen; + int bytes_in_buffer_at_pts; lprintf ("decode data, size: %d, decoder_flags: %d\n", buf->size, buf->decoder_flags); @@ -169,6 +170,8 @@ static void mad_decode_data (audio_decod } else { this->preview_mode = 1; } + + bytes_in_buffer_at_pts = this->bytes_in_buffer; xine_fast_memcpy (&this->buffer[this->bytes_in_buffer], buf->content, buf->size); @@ -271,6 +274,8 @@ static void mad_decode_data (audio_decod struct mad_pcm *pcm = &this->synth.pcm; audio_buffer_t *audio_buffer; uint16_t *output; + int bitrate; + int pts_offset; audio_buffer = this->xstream->audio_out->get_buffer (this->xstream->audio_out); output = audio_buffer->mem; @@ -291,7 +296,22 @@ static void mad_decode_data (audio_decod } audio_buffer->num_frames = pcm->length; - audio_buffer->vpts = buf->pts; + + /* pts computing */ + if (this->frame.header.bitrate > 0) { + bitrate = this->frame.header.bitrate; + } else { + bitrate = _x_stream_info_get(this->xstream, XINE_STREAM_INFO_AUDIO_BITRATE); + lprintf("offset %d bps\n", bitrate); + } + audio_buffer->vpts = buf->pts; + if (audio_buffer->vpts && (bitrate > 0)) { + pts_offset = (bytes_in_buffer_at_pts * 8 * 90) / (bitrate / 1000); + lprintf("pts: %"PRId64", offset: %d pts, %d bytes\n", buf->pts, pts_offset, bytes_in_buffer_at_pts); + if (audio_buffer->vpts < pts_offset) + pts_offset = audio_buffer->vpts; + audio_buffer->vpts -= pts_offset; + } this->xstream->audio_out->put_buffer (this->xstream->audio_out, audio_buffer, this->xstream); |
From: <li...@yo...> - 2008-01-25 01:23:14
|
# HG changeset patch # User Darren Salt <li...@yo...> # Date 1201222898 0 # Node ID 600d17b06615dbed75961a2e476f1aa72ea8f846 # Parent aef122fc01ea396e1574c6d1fe128b8333b6a560 # Parent f4c8c5de7bda07b31b8cd1f1029f31f87a87cd28 Merge from 1.1. diff -r 600d17b06615dbed75961a2e476f1aa72ea8f846 -r aef122fc01ea396e1574c6d1fe128b8333b6a560 ChangeLog --- a/ChangeLog Fri Jan 25 01:01:38 2008 +0000 +++ b/ChangeLog Thu Jan 24 13:47:01 2008 +0000 @@ -66,11 +66,16 @@ xine-lib (1.1.10) (unreleased) end authors should be careful with xine-lib older than 1.1.10. * Backported xine-config & libxine.pc from 1.2. Consequently, xine-config now requires pkg-config. + * Sanity-check ASF header sizes. This fixes a crash in the ASF demuxer, + caused by the example exploit given for CVE-2006-1664. + * Don't discard audio samples forever. Fixed streaming playback. + * Fix a possible crash on channel change in the DVB plugin. xine-lib (1.1.9.1) 2008-01-11 * Security fixes: - Buffer overflow which allows a remote attacker to execute arbitrary - code via a crafted SDP Abstract attribute. (CVE-2008-0225) + code via a crafted SDP Abstract attribute. + (CVE-2008-0225, a.k.a. CVE-2008-0238) (Fix ported from mplayer changeset 22821) * Fix a read-past-end bug in xine-lib's internal strtok_r replacement. (Only affects systems without strtok_r.) [Bug #19] @@ -195,8 +200,9 @@ xine-lib (1.1.6) 2007-04-17 xine-lib (1.1.5) 2007-04-10 * Security fixes: - - Fix heap overflow in DMO loader. (CVE-2007-1246) [Bug SF 1676925] + - Fix heap overflow in DMO and DirectShow loaders. Thanks to Kees Cook for reporting. + (CVE-2007-1246 & CVE-2007-1387) [Bug SF 1676925] * Improved PulseAudio plugin, now only one connection per instance is opened and the mainloop is threaded to reduce latency during playback. * Added XCB-based output plugins (Xv and XShm), to use in software using @@ -316,8 +322,9 @@ xine-lib (1.1.3) 2006-12-03 xine-lib (1.1.3) 2006-12-03 * Security fixes: - Heap overflow in libmms (related to CVE-2006-2200) - - Buffer overrun in Real Media input plugin. [Bug SF 1603458] + - Buffer overrun in Real Media input plugin. Thanks to Roland Kay for reporting and JW for the patch. + (CVE-2006-6172) [Bug SF 1603458] * Update build system to support x86 Darwin setups, and merge patches to support Darwin OS better. * Replace custom ALSA check with pkg-config check, and make sure 0.9.0 is diff -r 600d17b06615dbed75961a2e476f1aa72ea8f846 -r aef122fc01ea396e1574c6d1fe128b8333b6a560 misc/xine-config --- a/misc/xine-config Fri Jan 25 01:01:38 2008 +0000 +++ b/misc/xine-config Thu Jan 24 13:47:01 2008 +0000 @@ -43,11 +43,9 @@ while test $# -gt 0; do if [ "$exec_prefix" = '' ]; then exec_prefix="$optarg" fi - args="$args${args+ }--variable=prefix" ;; --exec-prefix=*) exec_prefix="$optarg" - args="$args${args+ }--variable=exec_prefix" ;; --version) args="$args${args+ }--modversion" diff -r 600d17b06615dbed75961a2e476f1aa72ea8f846 -r aef122fc01ea396e1574c6d1fe128b8333b6a560 misc/xine-lib.spec.in --- a/misc/xine-lib.spec.in Fri Jan 25 01:01:38 2008 +0000 +++ b/misc/xine-lib.spec.in Thu Jan 24 13:47:01 2008 +0000 @@ -1,6 +1,6 @@ %define shortname libxine %define name libxine2 -%define version @PACKAGE_VERSION@ +%define version @SPEC_VERSION@ %define release 0 %define major 1 @@ -15,9 +15,6 @@ %if %{?BUILD_ALSA:0}%{!?BUILD_ALSA:1} %define BUILD_ALSA 0 %endif -%if %{?BUILD_ARTS:0}%{!?BUILD_ARTS:1} -%define BUILD_ARTS 0 -%endif %if %{?BUILD_DEVEL:0}%{!?BUILD_DEVEL:1} %define BUILD_DEVEL 1 %endif @@ -51,6 +48,9 @@ %if %{?BUILD_DIRECTFB:0}%{!?BUILD_DIRECTFB:1} %define BUILD_DIRECTFB 0 %endif +%if %{?BUILD_SYNCFB:0}%{!?BUILD_SYNCFB:1} +%define BUILD_SYNCFB 0 +%endif %if %{?BUILD_W32DLL:0}%{!?BUILD_W32DLL:1} %define BUILD_W32DLL 0 %endif @@ -62,6 +62,9 @@ %endif %if %{?BUILD_JACK:0}%{!?BUILD_JACK:1} %define BUILD_JACK 0 +%endif +%if %{?BUILD_PULSE:0}%{!?BUILD_PULSE:1} +%define BUILD_PULSE 0 %endif Name: %{name} @@ -74,7 +77,7 @@ License: GPL License: GPL Group: Development/Libraries URL: http://xinehq.de -Source: http://xinehq.de/files/@PACKAGE@-@VERSION@.tar.gz +Source: http://xinehq.de/files/@PACKAGE@-@VERSION@.tar.bz2 Packager: Manfred Tremmel <Man...@ii...> Obsoletes: xine Obsoletes: xine-lib @@ -142,20 +145,21 @@ http://www.gnu.org/licenses/gpl.html http://www.gnu.org/licenses/gpl.html %if %BUILD_DEVEL -%package devel +%package -n %{shortname}-devel Summary: Header files and documentation to develope programs with libxine. Summary(cs): Hlavičkové soubory a dokumentace pro vývoj programů používající libxine Summary(de): Headerdateien und Dokumentationen, um Programme mit libxine entwickeln zu können. Summary(fi): Header-tiedostot ja dokumentaatio, joita tarvitset kehittäessäsi ohjelmia libxine:n kanssa. -Group: Development/Libraries +Group: Development/Libraries Obsoletes: xine-lib-devel Obsoletes: xine-devel Obsoletes: libxine0-devel -Provides: %{shortname}-devel = %{version}-%{release} +Obsoletes: %{name}-devel +Provides: %{name}-devel = %{version}-%{release} Provides: xine-devel Requires: %{libname} = %{version}-%{release} -%description devel +%description -n %{shortname}-devel This package contains header files and documentation required to develope programs with libxine. @@ -170,7 +174,7 @@ complies to the GPL. More information ab complies to the GPL. More information about GPL-license can be found at http://www.gnu.org/licenses/gpl.html -%description devel -l cs +%description -n %{shortname}-devel -l cs Tento balíček obsahuje hlavičkové soubory a dokumentaci potřebnou pro vývoj programů, které používají libxine. @@ -185,7 +189,7 @@ projektech. Více informací o GPL licen projektech. Více informací o GPL licenci můžete nalézt na http://www.gnu.org/licenses/gpl.html. -%description devel -l de +%description -n %{shortname}-devel -l de Dieses Paket enthält die Headerdateien und Dokumentationen, um Programme mit libxine entwickeln zu können. @@ -202,7 +206,7 @@ hierzu jedoch die in der GPL Lizenz vere hierzu jedoch die in der GPL Lizenz vereinbarten Bestimmungen. Weitere Informationen zur GPL-Lizenz finden Sie unter http://www.gnu.org/licenses/gpl.html -%description devel -l fi +%description -n %{shortname}-devel -l fi libxine on xinen sydän (vapaa GPL-linsensoitu videosoitinohjelma Unix-tyylisille käyttöjärjestelmille), joka muun muassa tarjoaa mahdollisuudet pakatun videon ja äänen purkamiseen (sekä näyttämiseen) suurimmalla osalla nykyaikaista äänen- @@ -361,6 +365,30 @@ libxine Videoausgabeplugin per OpenGL (3 libxine Videoausgabeplugin per OpenGL (3D Grafikkarte) %endif +%if %BUILD_SYNCFB +%package syncfb +Summary: libxine video output plugin using synchroniced framebuffer (Matrox cards) +Summary(cs): Videovýstupní modul libxine používající framebuffer (karty Matrox) +Summary(de): libxine Videoausgabeplugin per synchronisiertem Framebuffer (Matrox Karten) +Summary(fi): libxine-Videolisdke Matrox-ndyttvkorttien synkronisoitua ndyttvmuistia varten. +Group: Development/Libraries +Obsoletes: libxine0-syncfb +Requires: %{libname} = %{version}-%{release} + +%description syncfb +libxine video output plugin using synchroniced framebuffer (Matrox cards) + +%description syncfb -l cs +Videovýstupní modul libxine, který používá synchronizovaný framebuffer (karty +Matrox). + +%description syncfb -l de +libxine Videoausgabeplugin per synchronisiertem Framebuffer (Matrox Karten) + +%description syncfb -l fi [... 391 lines omitted ...] %clean -[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT +[ "${RPM_BUILD_ROOT}" != "/" ] && %{__rm} -rf ${RPM_BUILD_ROOT} %post -p /sbin/ldconfig %postun -p /sbin/ldconfig -%files -f ../filelist_libxine2 +%files -f ../filelist_%{name} %if %BUILD_DEVEL -%files devel -f ../filelist_libxine2_devel +%files -n %{shortname}-devel -f ../filelist_%{name}_devel %endif %if %BUILD_ALSA -%files alsa -f ../filelist_libxine2_alsa +%files alsa -f ../filelist_%{name}_alsa %endif %if %BUILD_ARTS -%files arts -f ../filelist_libxine2_arts +%files arts -f ../filelist_%{name}_arts %endif %if %BUILD_ESD -%files esd -f ../filelist_libxine2_esd +%files esd -f ../filelist_%{name}_esd %endif %if %BUILD_DXR3 -%ifarch i386 i486 i586 i686 i786 i868 i986 k6 k7 athlon x86_64 amd64 ia32e -%files dxr3 -f ../filelist_libxine2_dxr3 -%endif +%files dxr3 -f ../filelist_%{name}_dxr3 %endif %if %BUILD_SDL -%files sdl -f ../filelist_libxine2_sdl +%files sdl -f ../filelist_%{name}_sdl %endif %if %BUILD_AA -%files aa -f ../filelist_libxine2_aa +%files aa -f ../filelist_%{name}_aa %endif %if %BUILD_OPENGL -%files opengl -f ../filelist_libxine2_opengl +%files opengl -f ../filelist_%{name}_opengl +%endif + +%if %BUILD_SYNCFB +%files syncfb -f ../filelist_%{name}_syncfb %endif %if %BUILD_DIRECTFB -%files directfb -f ../filelist_libxine2_directfb +%files directfb -f ../filelist_%{name}_directfb %endif %if %BUILD_STK -%files stk -f ../filelist_libxine2_stk +%files stk -f ../filelist_%{name}_stk %endif %if %BUILD_XVMC -%ifarch i386 i486 i586 i686 i786 i868 i986 k6 k7 athlon x86_64 amd64 ia32e -%files xvmc -f ../filelist_libxine2_xvmc -%endif +%files xvmc -f ../filelist_%{name}_xvmc %endif %if %BUILD_W32DLL %ifarch i386 i486 i586 i686 i786 i868 i986 k6 k7 athlon -%files w32dll -f ../filelist_libxine2_w32dll +%files w32dll -f ../filelist_%{name}_w32dll %endif %endif %if %BUILD_DVB -%files dvb -f ../filelist_libxine2_dvb +%files dvb -f ../filelist_%{name}_dvb %endif %if %BUILD_DVD -%files dvd -f ../filelist_libxine2_dvd +%files dvd -f ../filelist_%{name}_dvd %endif %if %BUILD_GNOME_VFS -%files gnome-vfs -f ../filelist_libxine2_gnome_vfs +%files gnome-vfs -f ../filelist_%{name}_gnome_vfs %endif %if %BUILD_FLAC -%files flac -f ../filelist_libxine2_flac +%files flac -f ../filelist_%{name}_flac %endif %if %BUILD_OGG -%files ogg -f ../filelist_libxine2_ogg +%files ogg -f ../filelist_%{name}_ogg %endif %if %BUILD_JACK -%files jack -f ../filelist_libxine2_jack +%files jack -f ../filelist_%{name}_jack +%endif + +%if %BUILD_PULSE +%files pulse -f ../filelist_%{name}_pulse %endif %changelog +* Sun Dec 09 2007 Manfred Tremmel <Man...@ii...> +- stk and arts plugins are no longer build by default, enable + them, when subpackages are selected +- added optional subpackage for pulseaudio +- switched to external vcdlibs +- using macros for shell commands, when rpm provides them +- some other cleanups +* Sun Oct 15 2006 Manfred Tremmel <Man...@ii...> +- some little changes to enable caca plugin * Sat Aug 26 2006 František Dvořák <va...@us...> - tiny translation update - fixed rpmbuild diff -r 600d17b06615dbed75961a2e476f1aa72ea8f846 -r aef122fc01ea396e1574c6d1fe128b8333b6a560 src/demuxers/demux_asf.c --- a/src/demuxers/demux_asf.c Fri Jan 25 01:01:38 2008 +0000 +++ b/src/demuxers/demux_asf.c Thu Jan 24 13:47:01 2008 +0000 @@ -379,10 +379,21 @@ static int asf_read_header (demux_asf_t uint8_t *asf_header_buffer = NULL; asf_header_len = get_le64(this); - asf_header_buffer = alloca(asf_header_len); + if (asf_header_len > 4 * 1024 * 1024) + { + xprintf(this->stream->xine, XINE_VERBOSITY_DEBUG, + "demux_asf: asf_read_header: overly-large header? (%"PRIu64" bytes)\n", + asf_header_len); + return 0; + } + + asf_header_buffer = malloc (asf_header_len); if (this->input->read (this->input, asf_header_buffer, asf_header_len) != asf_header_len) + { + free (asf_header_buffer); return 0; + } /* delete previous header */ if (this->asf_header) { @@ -395,7 +406,11 @@ static int asf_read_header (demux_asf_t */ this->asf_header = asf_header_new(asf_header_buffer, asf_header_len); if (!this->asf_header) + { + free (asf_header_buffer); return 0; + } + free (asf_header_buffer); lprintf("asf header parsing ok\n"); diff -r 600d17b06615dbed75961a2e476f1aa72ea8f846 -r aef122fc01ea396e1574c6d1fe128b8333b6a560 src/demuxers/demux_ts.c --- a/src/demuxers/demux_ts.c Fri Jan 25 01:01:38 2008 +0000 +++ b/src/demuxers/demux_ts.c Thu Jan 24 13:47:01 2008 +0000 @@ -1165,6 +1165,15 @@ printf("Program Number is %i, looking fo /* didn't get all TS packets for this section yet */ #ifdef TS_PMT_LOG printf ("ts_demux: didn't get all PMT TS packets yet...\n"); +#endif + return; + } + + if (!section_length) { + free (this->pmt[program_count]); + this->pmt[program_count] = NULL; +#ifdef TS_PMT_LOG + printf ("ts_demux: eek, zero-length section?\n"); #endif return; } diff -r 600d17b06615dbed75961a2e476f1aa72ea8f846 -r aef122fc01ea396e1574c6d1fe128b8333b6a560 src/xine-engine/audio_out.c --- a/src/xine-engine/audio_out.c Fri Jan 25 01:01:38 2008 +0000 +++ b/src/xine-engine/audio_out.c Thu Jan 24 13:47:01 2008 +0000 @@ -291,6 +291,7 @@ struct audio_fifo_s { int num_buffers; }; +static int ao_get_property (xine_audio_port_t *this_gen, int property); static int ao_set_property (xine_audio_port_t *this_gen, int property, int value); static audio_fifo_t *fifo_new (xine_t *xine) { @@ -1614,13 +1615,17 @@ static void ao_close(xine_audio_port_t * xprintf (this->xine, XINE_VERBOSITY_DEBUG, "audio_out: no streams left, closing driver\n"); if (this->audio_loop_running) { + /* make sure there are no more buffers on queue */ if (this->clock->speed == XINE_SPEED_PAUSE || (this->clock->speed != XINE_FINE_SPEED_NORMAL && !this->slow_fast_audio)) { - /* discard buffers, otherwise we'll wait forever */ + int discard = ao_get_property(this_gen, AO_PROP_DISCARD_BUFFERS); + /* discard buffers while waiting, otherwise we'll wait forever */ ao_set_property(this_gen, AO_PROP_DISCARD_BUFFERS, 1); + fifo_wait_empty(this->out_fifo); + ao_set_property(this_gen, AO_PROP_DISCARD_BUFFERS, discard); } - /* make sure there are no more buffers on queue */ - fifo_wait_empty(this->out_fifo); + else + fifo_wait_empty(this->out_fifo); } pthread_mutex_lock( &this->driver_lock ); |
From: <li...@yo...> - 2008-01-27 01:57:59
|
# HG changeset patch # User Darren Salt <li...@yo...> # Date 1201390260 0 # Node ID 4dbd3fc1ce2b9a6102247159cb56a7cb0e9d6be8 # Parent b8240d5926da75952d667dbd2dff4113580ece93 # Parent 641a6f8279305cb2bd62d55c9581006f4916ff3d Merge from 1.1. diff -r 4dbd3fc1ce2b9a6102247159cb56a7cb0e9d6be8 -r b8240d5926da75952d667dbd2dff4113580ece93 .hgsigs --- a/.hgsigs Sat Jan 26 23:31:00 2008 +0000 +++ b/.hgsigs Fri Jan 25 13:30:34 2008 +0000 @@ -2,3 +2,4 @@ 42358e16442fe54fa554006e0b0bafd51e065c32 42358e16442fe54fa554006e0b0bafd51e065c32 0 iD8DBQBG0xz0zbwfTn7RbcARAoD3AJ4012pabmpQvCKKDokZNyZzfPIbWgCfRk5FRly/Eei/xXnSaT54XHAT5KM= 1dbf784bebc791266fcca02e917ee63034ac2e0b 0 iD8DBQBHgQ2mzbwfTn7RbcARArl9AKCslqZDrrm0GiU3IbBvcQVbOdSXlwCgyEMuHY2y/+T6WEeB2CXvCTs5ulI= b591d00fcd386cdd3779378c34b2d42b7504afc4 0 iD8DBQBHh5UfsBKtjPGfWZ8RAgvMAJ9xwnDNifmaobFYe2nR7+rJlLTkEQCgguGMqwqRZY68HWQXhEx918hp4Yg= +ae1e23df14223cdacf83df75b28b223895d658c2 0 iD8DBQBHm6SjsBKtjPGfWZ8RAi8HAKDAHmmLu8rwN5XJJPhfEofE7BTpsgCfTyNzku+v/PhqXgl4kQnRiB6nUSE= diff -r 4dbd3fc1ce2b9a6102247159cb56a7cb0e9d6be8 -r b8240d5926da75952d667dbd2dff4113580ece93 .hgtags --- a/.hgtags Sat Jan 26 23:31:00 2008 +0000 +++ b/.hgtags Fri Jan 25 13:30:34 2008 +0000 @@ -64,3 +64,4 @@ e0a332b9d3e8bb3fad4d7feac1e519292b062056 e0a332b9d3e8bb3fad4d7feac1e519292b062056 xine-lib-1_1_8-release b6be674453e922114b55d4613cb197c77d19f094 xine-lib-1_1_9-release 9438947f88ad2bed1832385301c6b4e62709625a xine-lib-1_1_9_1-release +7f1232425c6d715c404e6df1292075b33ecb8305 xine-lib-1_1_10-release diff -r 4dbd3fc1ce2b9a6102247159cb56a7cb0e9d6be8 -r b8240d5926da75952d667dbd2dff4113580ece93 ChangeLog --- a/ChangeLog Sat Jan 26 23:31:00 2008 +0000 +++ b/ChangeLog Fri Jan 25 13:30:34 2008 +0000 @@ -56,7 +56,11 @@ xine-lib (1.1.90) (Unreleased) active and thus it's no more usable. If you were using SyncFB somehow, please use DirectFB or VIDIX instead. -xine-lib (1.1.10) (unreleased) +xine-lib (1.1.10) 2008-01-26 + * Security fixes: + - Buffer overflow which allows a remote attacker to execute arbitrary + code or crash the client program via a crafted ASF header. + (Related to CVE-2006-1664) * Update Ogg and Annodex mimetypes and extensions. * Change the default v4l device paths to /dev/video0 and /dev/radio0. * Fix support for subtitles with schemes (e.g. http://), partly broken @@ -66,10 +70,10 @@ xine-lib (1.1.10) (unreleased) end authors should be careful with xine-lib older than 1.1.10. * Backported xine-config & libxine.pc from 1.2. Consequently, xine-config now requires pkg-config. - * Sanity-check ASF header sizes. This fixes a crash in the ASF demuxer, - caused by the example exploit given for CVE-2006-1664. * Don't discard audio samples forever. Fixed streaming playback. * Fix a possible crash on channel change in the DVB plugin. + * Flash video demuxer improvements and bug fixes. + * Make the V4L ALSA audio input device configurable. (This needs more work.) xine-lib (1.1.9.1) 2008-01-11 * Security fixes: diff -r 4dbd3fc1ce2b9a6102247159cb56a7cb0e9d6be8 -r b8240d5926da75952d667dbd2dff4113580ece93 po/libxine2.pot --- a/po/libxine2.pot Sat Jan 26 23:31:00 2008 +0000 +++ b/po/libxine2.pot Fri Jan 25 13:30:34 2008 +0000 @@ -8,7 +8,7 @@ msgstr "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: xin...@li...\n" -"POT-Creation-Date: 2008-01-06 21:08+0000\n" +"POT-Creation-Date: 2008-01-26 23:28+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL...@li...>\n" @@ -2020,6 +2020,16 @@ msgid "" "Selects the TV standard of the input signals. Either: PAL, NTSC and SECAM. " msgstr "" +#: src/input/input_v4l.c:1941 +msgid "v4l ALSA audio input device" +msgstr "" + +#: src/input/input_v4l.c:1942 +msgid "" +"The name of the audio device which corresponds to your Video4Linux video " +"device." +msgstr "" + #: src/input/input_v4l.c:1946 msgid "v4l radio input plugin" msgstr "" @@ -2082,6 +2092,12 @@ msgstr "" #: src/input/librtsp/rtsp_session.c:141 msgid "rtsp_session: session can not be established.\n" +msgstr "" + +#: src/input/librtsp/rtsp_session.c:153 +msgid "" +"rtsp_session: rtsp server returned overly-large headers, session can not be " +"established.\n" msgstr "" #: src/input/librtsp/rtsp_session.c:159 diff -r 4dbd3fc1ce2b9a6102247159cb56a7cb0e9d6be8 -r b8240d5926da75952d667dbd2dff4113580ece93 src/combined/flac_demuxer.c --- a/src/combined/flac_demuxer.c Sat Jan 26 23:31:00 2008 +0000 +++ b/src/combined/flac_demuxer.c Fri Jan 25 13:30:34 2008 +0000 @@ -713,7 +713,8 @@ demux_flac_init_class (xine_t *xine, voi this->demux_class.open_plugin = open_plugin; this->demux_class.description = N_("FLAC demux plugin"); this->demux_class.identifier = "FLAC"; - this->demux_class.mimetypes = "application/x-flac: flac: FLAC Audio;"; + this->demux_class.mimetypes = "application/x-flac: flac: FLAC Audio;" + "application/flac: flac: FLAC Audio;"; this->demux_class.extensions = "flac"; this->demux_class.dispose = default_demux_class_dispose; diff -r 4dbd3fc1ce2b9a6102247159cb56a7cb0e9d6be8 -r b8240d5926da75952d667dbd2dff4113580ece93 src/combined/xine_ogg_demuxer.c --- a/src/combined/xine_ogg_demuxer.c Sat Jan 26 23:31:00 2008 +0000 +++ b/src/combined/xine_ogg_demuxer.c Fri Jan 25 13:30:34 2008 +0000 @@ -2081,8 +2081,11 @@ static void *anx_init_class (xine_t *xin this->demux_class.identifier = "Annodex"; this->demux_class.mimetypes = "application/annodex: anx: Annodex media;" + "application/x-annodex: anx: Annodex media;" "audio/annodex: axa: Annodex audio;" - "video/annodex: axv: Annodex video;"; + "audio/x-annodex: axa: Annodex audio;" + "video/annodex: axv: Annodex video;" + "video/x-annodex: axv: Annodex video;"; this->demux_class.extensions = "anx axa axv"; this->demux_class.dispose = default_demux_class_dispose; @@ -2102,8 +2105,11 @@ static void *ogg_init_class (xine_t *xin this->demux_class.identifier = "OGG"; this->demux_class.mimetypes = "application/ogg: ogx: Ogg Stream;" + "application/x-ogg: ogx: Ogg Stream;" "audio/ogg: oga: Ogg Audio;" + "audio/x-ogg: oga: Ogg Audio;" "video/ogg: ogv: Ogg Video;"; + "video/x-ogg: ogv: Ogg Video;"; this->demux_class.extensions = "ogx ogv oga ogg spx ogm"; this->demux_class.dispose = default_demux_class_dispose; diff -r 4dbd3fc1ce2b9a6102247159cb56a7cb0e9d6be8 -r b8240d5926da75952d667dbd2dff4113580ece93 src/demuxers/demux_flac.c --- a/src/demuxers/demux_flac.c Sat Jan 26 23:31:00 2008 +0000 +++ b/src/demuxers/demux_flac.c Fri Jan 25 13:30:34 2008 +0000 @@ -520,7 +520,9 @@ void *demux_flac_init_plugin (xine_t *xi this->demux_class.open_plugin = open_plugin; this->demux_class.description = N_("Free Lossless Audio Codec (flac) demux plugin"); this->demux_class.identifier = "FLAC"; - this->demux_class.mimetypes = NULL; + this->demux_class.mimetypes = + "audio/x-flac: flac: FLAC Audio;" + "audio/flac: flac: FLAC Audio;"; this->demux_class.extensions = "flac"; this->demux_class.dispose = default_demux_class_dispose; diff -r 4dbd3fc1ce2b9a6102247159cb56a7cb0e9d6be8 -r b8240d5926da75952d667dbd2dff4113580ece93 src/demuxers/demux_flv.c --- a/src/demuxers/demux_flv.c Sat Jan 26 23:31:00 2008 +0000 +++ b/src/demuxers/demux_flv.c Fri Jan 25 13:30:34 2008 +0000 @@ -908,4 +908,3 @@ const plugin_info_t xine_plugin_info[] E { PLUGIN_DEMUX, 27, "flashvideo", XINE_VERSION_CODE, &demux_info_flv, init_plugin }, { PLUGIN_NONE, 0, "", 0, NULL, NULL } }; - diff -r 4dbd3fc1ce2b9a6102247159cb56a7cb0e9d6be8 -r b8240d5926da75952d667dbd2dff4113580ece93 src/demuxers/demux_mpgaudio.c --- a/src/demuxers/demux_mpgaudio.c Sat Jan 26 23:31:00 2008 +0000 +++ b/src/demuxers/demux_mpgaudio.c Fri Jan 25 13:30:34 2008 +0000 @@ -591,14 +591,14 @@ static int parse_frame_payload(demux_mpg if (this->xing_header) { buf->free_buffer(buf); xprintf(this->stream->xine, XINE_VERBOSITY_LOG, - LOG_MODULE ": found Xing header at offset %PRId64\n", frame_pos); + LOG_MODULE ": found Xing header at offset %"PRId64"\n", frame_pos); return 1; } this->vbri_header = parse_vbri_header(&this->cur_frame, buf->content, this->cur_frame.size); if (this->vbri_header) { buf->free_buffer(buf); xprintf(this->stream->xine, XINE_VERBOSITY_LOG, - LOG_MODULE ": found Vbri header at offset %PRId64\n", frame_pos); + LOG_MODULE ": found Vbri header at offset %"PRId64"\n", frame_pos); return 1; } } diff -r 4dbd3fc1ce2b9a6102247159cb56a7cb0e9d6be8 -r b8240d5926da75952d667dbd2dff4113580ece93 src/input/input_v4l.c --- a/src/input/input_v4l.c Sat Jan 26 23:31:00 2008 +0000 +++ b/src/input/input_v4l.c Fri Jan 25 13:30:34 2008 +0000 @@ -116,6 +116,9 @@ static const int tv_standard_values[] = #define NUM_RESOLUTIONS (sizeof(resolutions)/sizeof(resolutions[0])) #define RADIO_DEV "/dev/radio0" #define VIDEO_DEV "/dev/video0" +#ifdef HAVE_ALSA +#define AUDIO_DEV "plughw:0,0" +#endif #if !defined(NDELAY) && defined(O_NDELAY) #define FNDELAY O_NDELAY @@ -1732,6 +1735,9 @@ static input_plugin_t *v4l_class_get_ins { /* v4l_input_class_t *cls = (v4l_input_class_t *) cls_gen; */ v4l_input_plugin_t *this; +#ifdef HAVE_ALSA + cfg_entry_t *entry; +#endif char *mrl = strdup(data); /* Example mrl: v4l:/Television/62500 */ @@ -1752,13 +1758,14 @@ static input_plugin_t *v4l_class_get_ins this->event_queue = NULL; this->scr = NULL; #ifdef HAVE_ALSA - this->pcm_name = NULL; this->pcm_data = NULL; this->pcm_hwparams = NULL; /* Audio */ this->pcm_stream = SND_PCM_STREAM_CAPTURE; - this->pcm_name = strdup("plughw:0,0"); + entry = this->stream->xine->config->lookup_entry(this->stream->xine->config, + "media.video4linux.audio_device"); + this->pcm_name = strdup (entry->str_value); this->audio_capture = 1; #endif this->rate = 44100; @@ -1928,6 +1935,14 @@ static void *init_video_class (xine_t *x _("Selects the TV standard of the input signals. " "Either: PAL, NTSC and SECAM. "), 20, NULL, NULL); +#ifdef HAVE_ALSA + config->register_filename (config, "media.video4linux.audio_device", + AUDIO_DEV, 0, + _("v4l ALSA audio input device"), + _("The name of the audio device which corresponds " + "to your Video4Linux video device."), + 10, NULL, NULL); +#endif return this; } |
From: Darren S. <li...@yo...> - 2008-02-04 17:14:44
|
# HG changeset patch # User Darren Salt <li...@yo...> # Date 1202144536 0 # Node ID 93250daf9d20963a68f77d9156f606b388adf547 # Parent b4c9cdd2d7ae136d07f5eeb256bcc3a902b9bdb8 # Parent a62d6f482a69895267a56fd4692a621e9b37bc29 Merge from 1.1. diff -r 93250daf9d20963a68f77d9156f606b388adf547 -r b4c9cdd2d7ae136d07f5eeb256bcc3a902b9bdb8 src/demuxers/demux_matroska.c --- a/src/demuxers/demux_matroska.c Mon Feb 04 17:02:16 2008 +0000 +++ b/src/demuxers/demux_matroska.c Mon Feb 04 16:55:46 2008 +0000 @@ -1833,7 +1833,7 @@ static int parse_block (demux_matroska_t uint64_t cluster_timecode, uint64_t block_duration, int normpos, int is_key) { matroska_track_t *track; - int64_t track_num; + uint64_t track_num; uint8_t *data; uint8_t flags; int gap, lacing, num_len; @@ -1852,7 +1852,7 @@ static int parse_block (demux_matroska_t flags = *data; data += 1; - lprintf("track_num: %" PRId64 ", timecode_diff: %d, flags: 0x%x\n", track_num, timecode_diff, flags); + lprintf("track_num: %" PRIu64 ", timecode_diff: %d, flags: 0x%x\n", track_num, timecode_diff, flags); gap = flags & 1; lacing = (flags >> 1) & 0x3; @@ -1860,7 +1860,7 @@ static int parse_block (demux_matroska_t if (!find_track_by_id(this, (int)track_num, &track)) { xprintf(this->stream->xine, XINE_VERBOSITY_LOG, - "demux_matroska: invalid track id: %" PRId64 "\n", track_num); + "demux_matroska: invalid track id: %" PRIu64 "\n", track_num); return 0; } @@ -1969,24 +1969,51 @@ static int parse_block (demux_matroska_t break; case MATROSKA_EBML_LACING: { - int64_t tmp; + uint64_t first_frame_size; lprintf("ebml lacing\n"); /* size of each frame */ - if (!(num_len = parse_ebml_uint(this, data, &tmp))) - return 0; + if (!(num_len = parse_ebml_uint(this, data, &first_frame_size))) + return 0; + if (num_len > block_size_left) { + xprintf(this->stream->xine, XINE_VERBOSITY_LOG, + "demux_matroska: block too small\n"); + return 0; + } + if (first_frame_size > INT_MAX) { + xprintf(this->stream->xine, XINE_VERBOSITY_LOG, + "demux_matroska: invalid first frame size (%" PRId64 ")\n", + first_frame_size); + return 0; + } data += num_len; block_size_left -= num_len; - frame[0] = (int) tmp; + frame[0] = (int) first_frame_size; lprintf("first frame len: %d\n", frame[0]); block_size_left -= frame[0]; for (i = 1; i < lace_num; i++) { - if (!(num_len = parse_ebml_sint(this, data, &tmp))) + int64_t frame_size_diff; + int64_t frame_size; + + if (!(num_len = parse_ebml_sint(this, data, &frame_size_diff))) return 0; + if (num_len > block_size_left) { + xprintf(this->stream->xine, XINE_VERBOSITY_LOG, + "demux_matroska: block too small\n"); + return 0; + } data += num_len; block_size_left -= num_len; - frame[i] = frame[i-1] + tmp; + + frame_size = frame[i-1] + frame_size_diff; + if (frame_size > INT_MAX || frame_size < 0) { + xprintf(this->stream->xine, XINE_VERBOSITY_LOG, + "demux_matroska: invalid frame size (%" PRId64 ")\n", + frame_size); + return 0; + } + frame[i] = frame_size; block_size_left -= frame[i]; } diff -r 93250daf9d20963a68f77d9156f606b388adf547 -r b4c9cdd2d7ae136d07f5eeb256bcc3a902b9bdb8 src/video_out/Makefile.am --- a/src/video_out/Makefile.am Mon Feb 04 17:02:16 2008 +0000 +++ b/src/video_out/Makefile.am Mon Feb 04 16:55:46 2008 +0000 @@ -132,8 +132,8 @@ xineplug_vo_out_xxmc_la_CFLAGS = $(AM_CF xineplug_vo_out_opengl_la_SOURCES = yuv2rgb.c yuv2rgb_mmx.c yuv2rgb_mlib.c \ video_out_opengl.c myglext.h $(X11OSD) -xineplug_vo_out_opengl_la_LIBADD = $(MLIB_LIBS) $(OPENGL_LIBS) $(GLUT_LIBS) \ - $(GLU_LIBS) $(X_LIBS) $(XINE_LIB) $(PTHREAD_LIBS) $(DYNAMIC_LD_LIBS) $(LTLIBINTL) +xineplug_vo_out_opengl_la_LIBADD = $(XINE_LIB) $(MLIB_LIBS) $(OPENGL_LIBS) \ + $(GLUT_LIBS) $(GLU_LIBS) $(X_LIBS) $(PTHREAD_LIBS) $(DYNAMIC_LD_LIBS) $(LTLIBINTL) xineplug_vo_out_opengl_la_CFLAGS = $(AM_CFLAGS) $(X_CFLAGS) $(MLIB_CFLAGS) -fno-strict-aliasing xineplug_vo_out_pgx64_la_SOURCES = video_out_pgx64.c |
From: Darren S. <li...@yo...> - 2008-02-08 01:01:24
|
# HG changeset patch # User Darren Salt <li...@yo...> # Date 1202432383 0 # Node ID 391778bf0bc79f7ba0eaa8906c8b8f5412ba4ec5 # Parent d201fa282056e3f4202f743a4ba1d72e504cd4b8 # Parent ccacb714a9b590388be9445eff9062c876ec1e2e Merge from 1.1. diff -r 391778bf0bc79f7ba0eaa8906c8b8f5412ba4ec5 -r d201fa282056e3f4202f743a4ba1d72e504cd4b8 .hgtags --- a/.hgtags Fri Feb 08 00:59:43 2008 +0000 +++ b/.hgtags Mon Feb 04 18:16:37 2008 +0000 @@ -65,3 +65,4 @@ b6be674453e922114b55d4613cb197c77d19f094 b6be674453e922114b55d4613cb197c77d19f094 xine-lib-1_1_9-release 9438947f88ad2bed1832385301c6b4e62709625a xine-lib-1_1_9_1-release 7f1232425c6d715c404e6df1292075b33ecb8305 xine-lib-1_1_10-release +0e9e4df266f639ac7ba9e0c204f205686b56d5f9 xine-lib-1_1_10_1-release diff -r 391778bf0bc79f7ba0eaa8906c8b8f5412ba4ec5 -r d201fa282056e3f4202f743a4ba1d72e504cd4b8 ChangeLog --- a/ChangeLog Fri Feb 08 00:59:43 2008 +0000 +++ b/ChangeLog Mon Feb 04 18:16:37 2008 +0000 @@ -59,7 +59,21 @@ xine-lib (1.1.90) (Unreleased) (XvMC does not, at present.) xine-lib (1.1.11) unreleased + * Reworked the plugin directory naming so that external plugins don't have + to be rebuilt for every release. We now use a naming scheme based on the + API/ABI versioning, checking older directories - with this release, the + plugin directory name is 1.19, and if this gets bumped to 1.20 in a + future release, 1.19 will still be available for external plugins. + (Any directories not 1.* won't be looked in.) + +xine-lib (1.1.10.1) 2008-02-07 + * Security fixes: + - Array index vulnerability which may allow remote attackers to execute + arbitrary code via a crafted FLAC tag, causing a stack buffer overflow. + (CVE-2008-0486) * Fix a RealPlayer codec detection bug. + * Improve detection of MP3 streams with ID3v2 tags. Don't trust the tag + size. xine-lib (1.1.10) 2008-01-26 * Security fixes: diff -r 391778bf0bc79f7ba0eaa8906c8b8f5412ba4ec5 -r d201fa282056e3f4202f743a4ba1d72e504cd4b8 configure.ac --- a/configure.ac Fri Feb 08 00:59:43 2008 +0000 +++ b/configure.ac Mon Feb 04 18:16:37 2008 +0000 @@ -69,10 +69,12 @@ AC_DEFINE_UNQUOTED([XINE_PATCH], [$XINE_ XINE_LT_CURRENT=__XINE_LT_CURRENT AC_SUBST(XINE_LT_CURRENT) +AC_DEFINE_UNQUOTED(XINE_LT_CURRENT, $XINE_LT_CURRENT, [xine interface version number]) XINE_LT_REVISION=__XINE_LT_REVISION AC_SUBST(XINE_LT_REVISION) XINE_LT_AGE=__XINE_LT_AGE AC_SUBST(XINE_LT_AGE) +AC_DEFINE_UNQUOTED(XINE_LT_AGE, $XINE_LT_AGE, [xine interface version age]) LIBNAME="libxine$(($XINE_LT_CURRENT-$XINE_LT_AGE))" AC_SUBST(LIBNAME) @@ -993,38 +995,45 @@ AC_SUBST(xinedatadir) AC_SUBST(xinedatadir) AC_SUBST(pkgconfigdir) -XINE_PLUGINDIR="\${xinelibdir}/plugins/$XINE_MAJOR.$XINE_MINOR.$XINE_SUB$XINE_PATCH" +XINE_PLUGINROOT="\${xinelibdir}/plugins/$(($XINE_LT_CURRENT-$XINE_LT_AGE))" +XINE_PLUGINDIR="$XINE_PLUGINROOT.$XINE_LT_AGE" XINE_FONTDIR="\${xinedatadir}/libxine$XINE_MAJOR/fonts" XINE_LOCALEDIR='${datadir}/locale' -XINE_REL_PLUGINDIR="`makeexpand "$XINE_PLUGINDIR"`" -XINE_REL_PLUGINDIR="`makeexpand "$XINE_REL_PLUGINDIR" | sed -e "s,^${prefix}/,,"`" +XINE_REL_PLUGINROOT="`makeexpand "$XINE_PLUGINROOT"`" +XINE_REL_PLUGINROOT="`makeexpand "$XINE_REL_PLUGINROOT" | sed -e "s,^${prefix}/,,"`" +XINE_REL_PLUGINDIR="$XINE_REL_PLUGINROOT.$XINE_LT_AGE" XINE_REL_FONTDIR="`makeexpand "$XINE_FONTDIR" | sed -e "s,^${prefix}/,,"`" XINE_REL_LOCALEDIR="`makeexpand "$XINE_LOCALEDIR" | sed -e "s,^${prefix}/,,"`" XINE_PKGCONFIG_DIR="`makeexpand "$pkgconfigdir"`" if test "x$WIN32_SYS" = "xmingw32" -o "x$WIN32_SYS" = "xcygwin"; then dnl polish paths (MinGW runtime accepts both \ and / anyway) - XINE_REL_PLUGINDIR="`echo "$XINE_REL_PLUGINDIR" | sed -e 's/\\//\\\\\\\\/g'`" + XINE_REL_PLUGINROOT="`echo "$XINE_REL_PLUGINROOT" | sed -e 's/\\//\\\\\\\\/g'`" + XINE_REL_PLUGINDIR="$XINE_REL_PLUGINROOT.$XINE_LT_AGE" XINE_REL_FONTDIR="`echo "$XINE_REL_FONTDIR" | sed -e 's/\\//\\\\\\\\/g'`" XINE_REL_LOCALEDIR="`echo "$XINE_REL_LOCALEDIR" | sed -e 's/\\//\\\\\\\\/g'`" dnl prefix in xine-config XINE_CONFIG_PREFIX="\$(cd \$(dirname \$0)/..; pwd)" dnl installation directories (in xine-config) - XINE_PLUGINPATH="$XINE_CONFIG_PREFIX/$XINE_REL_PLUGINDIR" + XINE_PLUGINROOTPATH="$XINE_CONFIG_PREFIX/$XINE_REL_PLUGINROOT" + XINE_PLUGINPATH="$XINE_PLUGINROOTPATH.$XINE_LT_AGE" XINE_FONTPATH="$XINE_CONFIG_PREFIX/$XINE_REL_FONTDIR" XINE_LOCALEPATH="$XINE_CONFIG_PREFIX/$XINE_REL_LOCALEDIR" dnl runtime directories - AC_DEFINE([XINE_PLUGINDIR], [xine_get_plugindir()], [Define this to plugins directory location]) + AC_DEFINE([XINE_PLUGINROOT],[xine_get_pluginroot()],[Define this to general plugins directory location]) + AC_DEFINE([XINE_PLUGINDIR], [xine_get_plugindir()], [Define this to specific plugins directory location]) AC_DEFINE([XINE_FONTDIR], [xine_get_fontdir()], [Define this to osd fonts dir location]) AC_DEFINE([XINE_LOCALEDIR], [xine_get_localedir()], [Path where catalog files will be.]) else dnl prefix in xine-config XINE_CONFIG_PREFIX="`makeexpand "${prefix}"`" dnl directories from xine-config and runtime directories - XINE_PLUGINPATH="`makeexpand "$XINE_PLUGINDIR"`" + XINE_PLUGINROOTPATH="`makeexpand "$XINE_PLUGINROOT"`" + XINE_PLUGINPATH="$XINE_PLUGINROOTPATH.$XINE_LT_AGE" XINE_FONTPATH="`makeexpand "$XINE_FONTDIR"`" XINE_LOCALEPATH="`makeexpand "$XINE_LOCALEDIR"`" dnl defining runtime directories - AC_DEFINE_UNQUOTED([XINE_PLUGINDIR], ["$XINE_PLUGINPATH"], [Define this to plugins directory location]) + AC_DEFINE_UNQUOTED([XINE_PLUGINROOT],["$XINE_PLUGINROOTPATH"], [Define this to general plugins directory location]) + AC_DEFINE_UNQUOTED([XINE_PLUGINDIR], ["$XINE_PLUGINPATH"], [Define this to soecific plugins directory location]) AC_DEFINE_UNQUOTED([XINE_FONTDIR], ["$XINE_FONTPATH"], [Define this to osd fonts dir location]) AC_DEFINE_UNQUOTED([XINE_LOCALEDIR], ["$XINE_LOCALEPATH"], [Path where catalog files will be.]) fi diff -r 391778bf0bc79f7ba0eaa8906c8b8f5412ba4ec5 -r d201fa282056e3f4202f743a4ba1d72e504cd4b8 debian/changelog --- a/debian/changelog Fri Feb 08 00:59:43 2008 +0000 +++ b/debian/changelog Mon Feb 04 18:16:37 2008 +0000 @@ -5,7 +5,7 @@ xine-lib-1.2 (1.2.0~hg-0) experimental; -- Darren Salt <li...@yo...> Tue, 17 Apr 2007 16:50:37 +0100 -xine-lib (1.1.10+hg-0) unstable; urgency=low +xine-lib (1.1.10.1+hg-0) unstable; urgency=low [ Darren Salt ] * Hg snapshot. @@ -14,7 +14,7 @@ xine-lib (1.1.10+hg-0) unstable; urgency * remove gs from build-dependencies * change the maintainer field to xin...@li.... - -- Darren Salt <li...@yo...> Sun, 27 Jan 2008 01:41:45 +0000 + -- Darren Salt <li...@yo...> Thu, 07 Feb 2008 17:52:34 +0000 xine-lib (1.1.5~cvs-0) unstable; urgency=low diff -r 391778bf0bc79f7ba0eaa8906c8b8f5412ba4ec5 -r d201fa282056e3f4202f743a4ba1d72e504cd4b8 src/demuxers/demux_flac.c --- a/src/demuxers/demux_flac.c Fri Feb 08 00:59:43 2008 +0000 +++ b/src/demuxers/demux_flac.c Mon Feb 04 18:16:37 2008 +0000 @@ -189,7 +189,7 @@ static int open_flac_file(demux_flac_t * case 4: lprintf ("VORBIS_COMMENT metadata\n"); { - char comments[block_length]; + char comments[block_length + 1]; /* last byte for NUL termination */ char *ptr = comments; uint32_t length, user_comment_list_length, cn; char *comment; @@ -201,18 +201,25 @@ static int open_flac_file(demux_flac_t * length = _X_LE_32(ptr); ptr += 4 + length; + if (length >= block_length - 8) + return 0; /* bad length or too little left in the buffer */ user_comment_list_length = _X_LE_32(ptr); ptr += 4; cn = 0; for (; cn < user_comment_list_length; cn++) { + if (ptr > comments + block_length - 4) + return 0; /* too little left in the buffer */ + length = _X_LE_32(ptr); ptr += 4; + if (length >= block_length || ptr + length > comments + block_length) + return 0; /* bad length */ comment = (char*) ptr; c = comment[length]; - comment[length] = 0; + comment[length] = 0; /* NUL termination */ lprintf ("comment[%02d] = %s\n", cn, comment); @@ -247,8 +254,8 @@ static int open_flac_file(demux_flac_t * } if ((tracknumber > 0) && (tracktotal > 0)) { - char tn[16]; - snprintf (tn, 16, "%02d/%02d", tracknumber, tracktotal); + char tn[24]; + snprintf (tn, 24, "%02d/%02d", tracknumber, tracktotal); _x_meta_info_set(flac->stream, XINE_META_INFO_TRACK_NUMBER, tn); } else if (tracknumber > 0) { diff -r 391778bf0bc79f7ba0eaa8906c8b8f5412ba4ec5 -r d201fa282056e3f4202f743a4ba1d72e504cd4b8 src/demuxers/demux_mpgaudio.c --- a/src/demuxers/demux_mpgaudio.c Fri Feb 08 00:59:43 2008 +0000 +++ b/src/demuxers/demux_mpgaudio.c Mon Feb 04 18:16:37 2008 +0000 @@ -807,7 +807,6 @@ static int demux_mpgaudio_read_head(inpu * return 1 if detected, 0 otherwise */ static int detect_mpgaudio_file(input_plugin_t *input) { - mpg_audio_frame_t frame; uint8_t buf[MAX_PREVIEW_SIZE]; int preview_len; uint32_t head; @@ -835,8 +834,8 @@ static int detect_mpgaudio_file(input_pl lprintf("cannot read mp3 frame header\n"); return 0; } - if (!parse_frame_header(&frame, &buf[10 + tag_size])) { - lprintf ("invalid mp3 frame header\n"); + if (!sniff_buffer_looks_like_mp3(&buf[10 + tag_size], preview_len - 10 - tag_size)) { + lprintf ("sniff_buffer_looks_like_mp3 failed\n"); return 0; } else { lprintf ("a valid mp3 frame follows the id3v2 tag\n"); diff -r 391778bf0bc79f7ba0eaa8906c8b8f5412ba4ec5 -r d201fa282056e3f4202f743a4ba1d72e504cd4b8 src/xine-engine/load_plugins.c --- a/src/xine-engine/load_plugins.c Fri Feb 08 00:59:43 2008 +0000 +++ b/src/xine-engine/load_plugins.c Mon Feb 04 18:16:37 2008 +0000 @@ -539,7 +539,6 @@ static void _register_plugins_internal(x node_cache = _get_cached_node (this, file->filename, file->filesize, file->filemtime, node_cache); info = (node_cache) ? node_cache->info : NULL; } else { - info++; } } @@ -1234,14 +1233,24 @@ static void load_cached_catalog (xine_t } +/* helper function for _x_scan_plugins */ +static void push_if_dir (xine_list_t *plugindirs, void *path) +{ + struct stat st; + if (!stat (path, &st) && S_ISDIR (st.st_mode)) + xine_list_push_back (plugindirs, path); + else + free (path); +} + /* * initialize catalog, load all plugins into new catalog */ void _x_scan_plugins (xine_t *this) { - - char *homedir, *plugindir, *pluginpath; - int i,j; - int lenpluginpath; + + char *homedir, *pluginpath; + xine_list_t *plugindirs = xine_list_new (); + xine_list_iterator_t iter; lprintf("_x_scan_plugins()\n"); @@ -1255,41 +1264,37 @@ void _x_scan_plugins (xine_t *this) { this->plugin_catalog = _new_catalog(); XINE_PROFILE(load_cached_catalog (this)); - if ((pluginpath = getenv("XINE_PLUGIN_PATH")) != NULL) { - pluginpath = strdup(pluginpath); + if ((pluginpath = getenv("XINE_PLUGIN_PATH")) != NULL && *pluginpath) { + char *p = pluginpath - 1; + while (p[1]) + { + char *dir, *q = p; + p = strchr (p + 1, XINE_PATH_SEPARATOR_CHAR); + if (q[0] == '~' && q[1] == '/') + asprintf (&dir, "%s%.*s", homedir, (int)(p - q - 1), q + 1); + else + dir = strndup (q, p - q); + push_if_dir (plugindirs, dir); /* store or free it */ + } } else { - const char *str1, *str2; - int len; - - str1 = "~/.xine/plugins"; - str2 = XINE_PLUGINDIR; - len = strlen(str1) + strlen(str2) + 2; - pluginpath = xine_xmalloc(len); - snprintf(pluginpath, len, "%s" XINE_PATH_SEPARATOR_STRING "%s", str1, str2); - } - plugindir = xine_xmalloc(strlen(pluginpath)+strlen(homedir)+2); - j=0; - lenpluginpath = strlen(pluginpath); - for (i=0; i <= lenpluginpath; ++i){ - switch (pluginpath[i]){ - case XINE_PATH_SEPARATOR_CHAR: - case '\0': - plugindir[j] = '\0'; - XINE_PROFILE(collect_plugins(this, plugindir)); - j = 0; - break; - case '~': - if (j == 0){ - strcpy(plugindir, homedir); - j = strlen(plugindir); - break; - } - default: - plugindir[j++] = pluginpath[i]; - } - } - free(plugindir); - free(pluginpath); + char *dir; + int i; + asprintf (&dir, "%s/.xine/plugins", homedir); + push_if_dir (plugindirs, dir); + for (i = 0; i <= XINE_LT_AGE; ++i) + { + asprintf (&dir, "%s.%d", XINE_PLUGINROOT, XINE_LT_AGE - i); + push_if_dir (plugindirs, dir); + } + } + for (iter = xine_list_front (plugindirs); iter; + iter = xine_list_next (plugindirs, iter)) + { + char *dir = xine_list_get_value (plugindirs, iter); + collect_plugins(this, dir); + free (dir); + } + xine_list_delete (plugindirs); free(homedir); load_required_plugins (this); |
From: Darren S. <li...@yo...> - 2008-02-11 18:05:36
|
# HG changeset patch # User Darren Salt <li...@yo...> # Date 1202753093 0 # Node ID db71e67bee037142234750a216597c7811cc7df5 # Parent fb395ef4996b879d50c4b811a86df4f65a948164 # Parent 0678d4d0df599010a6aaa7654bb9c2bf072c70dd Merge from 1.1. diff -r db71e67bee037142234750a216597c7811cc7df5 -r fb395ef4996b879d50c4b811a86df4f65a948164 ChangeLog --- a/ChangeLog Mon Feb 11 18:04:53 2008 +0000 +++ b/ChangeLog Sun Feb 10 15:40:08 2008 +0100 @@ -65,6 +65,9 @@ xine-lib (1.1.11) unreleased plugin directory name is 1.19, and if this gets bumped to 1.20 in a future release, 1.19 will still be available for external plugins. (Any directories not 1.* won't be looked in.) + * Made the version parsing much more reliable; it wasn't properly coping + with four-part version numbers. This affects any program whose build + scripts use xine-lib's automake macros. xine-lib (1.1.10.1) 2008-02-07 * Security fixes: diff -r db71e67bee037142234750a216597c7811cc7df5 -r fb395ef4996b879d50c4b811a86df4f65a948164 configure.ac --- a/configure.ac Mon Feb 11 18:04:53 2008 +0000 +++ b/configure.ac Sun Feb 10 15:40:08 2008 +0100 @@ -627,7 +627,7 @@ case "$host_or_hostalias" in ;; x86_64-*) - arch_x86=yes + arch_x86=64 AC_DEFINE([ARCH_X86_64], [], [Define this if you're running x86 architecture 64 bits]) ;; @@ -635,10 +635,10 @@ case "$host_or_hostalias" in case "$host_or_hostalias" in universal-*) arch_ppc=yes - arch_x86=yes + arch_x86=32 ;; i386-* | x86_64-*) - arch_x86=yes + arch_x86=32 AC_DEFINE([ARCH_X86_32], [], [Define this if you're running x86 architecture 32 bits]) ;; ppc* | powerpc*) @@ -682,7 +682,7 @@ case "$host_or_hostalias" in ;; i?86-* | k?-* | athlon-* | pentium*) - arch_x86=yes + arch_x86=32 enable_impure_text=yes case "$host_or_hostalias" in @@ -800,13 +800,15 @@ test x"$DEFAULT_OCFLAGS" = x"" && DEFAUL test x"$DEFAULT_OCFLAGS" = x"" && DEFAULT_OCFLAGS='$(O3_CFLAGS)' AC_SUBST(DEFAULT_OCFLAGS) -if test x"$arch_x86" = x"yes" && test x"$enable_macosx_universal" = x"no"; then +if test x"$arch_x86" != x"no" && test x"$enable_macosx_universal" = x"no"; then AC_DEFINE([ARCH_X86], [], [Define this if you're running x86 architecture]) AC_DEFINE([HAVE_MMX], [], [Define this if you can compile MMX asm instructions]) fi AM_CONDITIONAL([ARCH_PPC], test x"$arch_ppc" = x"yes") -AM_CONDITIONAL([ARCH_X86], test x"$arch_x86" = x"yes") -AM_CONDITIONAL([HAVE_MMX], test x"$arch_x86" = x"yes") +AM_CONDITIONAL([ARCH_X86], test x"$arch_x86" != x"no") +AM_CONDITIONAL([ARCH_X86_32], test x"$arch_x86" = x"32") +AM_CONDITIONAL([ARCH_X86_64], test x"$arch_x86" = x"64") +AM_CONDITIONAL([HAVE_MMX], test x"$arch_x86" != x"no") AM_CONDITIONAL([HOST_OS_DARWIN], test x"$HOST_OS_DARWIN" = x"1") if test x"$enable_impure_text" = x"yes"; then diff -r db71e67bee037142234750a216597c7811cc7df5 -r fb395ef4996b879d50c4b811a86df4f65a948164 lib/timegm.c --- a/lib/timegm.c Mon Feb 11 18:04:53 2008 +0000 +++ b/lib/timegm.c Sun Feb 10 15:40:08 2008 +0100 @@ -5,15 +5,19 @@ time_t xine_private_timegm(struct tm *tm) { time_t ret; +#if defined(HAVE_TZSET) char *tz; tz = getenv("TZ"); setenv("TZ", "", 1); tzset(); +#endif ret = mktime(tm); +#if defined(HAVE_TZSET) if (tz) setenv("TZ", tz, 1); else unsetenv("TZ"); tzset(); +#endif return ret; } diff -r db71e67bee037142234750a216597c7811cc7df5 -r fb395ef4996b879d50c4b811a86df4f65a948164 src/xine-utils/utils.c --- a/src/xine-utils/utils.c Mon Feb 11 18:04:53 2008 +0000 +++ b/src/xine-utils/utils.c Sun Feb 10 15:40:08 2008 +0100 @@ -358,21 +358,17 @@ const char *xine_get_homedir(void) { char *s; int len; - if (!homedir[0]) { - len = xine_strcpy_command(GetCommandLine(), homedir, sizeof(homedir)); - s = strdup(homedir); - GetFullPathName(s, sizeof(homedir), homedir, NULL); - free(s); - if ((s = strrchr(homedir, '\\'))) *s = '\0'; - } + len = xine_strcpy_command(GetCommandLine(), homedir, sizeof(homedir)); + s = strdup(homedir); + GetFullPathName(s, sizeof(homedir), homedir, NULL); + free(s); + if ((s = strrchr(homedir, '\\'))) + *s = '\0'; return homedir; #else struct passwd pwd, *pw = NULL; static char homedir[BUFSIZ] = {0,}; - - if(homedir[0]) - return homedir; #ifdef HAVE_GETPWUID_R if(getpwuid_r(getuid(), &pwd, homedir, sizeof(homedir), &pw) != 0 || pw == NULL) { |
From: Darren S. <li...@yo...> - 2008-02-29 15:18:08
|
# HG changeset patch # User Darren Salt <li...@yo...> # Date 1204297165 0 # Node ID 9fc6fdc5c7959b3a2df03c0740377b4424e28c44 # Parent 23c7b905daf0344dd6c8bbced36637159d831880 # Parent abc0bc21389f61035e26b8ca961a90b07fb8f68d Merge from 1.1. diff -r 9fc6fdc5c7959b3a2df03c0740377b4424e28c44 -r 23c7b905daf0344dd6c8bbced36637159d831880 ChangeLog --- a/ChangeLog Fri Feb 29 14:59:25 2008 +0000 +++ b/ChangeLog Thu Feb 28 13:47:59 2008 +0000 @@ -70,6 +70,8 @@ xine-lib (1.1.11) unreleased * Made the version parsing much more reliable; it wasn't properly coping with four-part version numbers. This affects any program whose build scripts use xine-lib's automake macros. + * Fixed an off-by-one in the FLAC security fix patch. This breakage was + causing failure to play some files. xine-lib (1.1.10.1) 2008-02-07 * Security fixes: diff -r 9fc6fdc5c7959b3a2df03c0740377b4424e28c44 -r 23c7b905daf0344dd6c8bbced36637159d831880 Makefile.am --- a/Makefile.am Fri Feb 29 14:59:25 2008 +0000 +++ b/Makefile.am Thu Feb 28 13:47:59 2008 +0000 @@ -13,23 +13,19 @@ DEBFILES = debian/README.Debian debian/c debian/shlibdeps.sh debian/libxine-dev.install debian/libxine1.install EXTRA_DIST = config.rpath autogen.sh \ - ChangeLog \ configure \ config.guess \ config.sub \ - COPYING \ INSTALL \ install-sh \ libtool \ ltmain.sh \ missing \ - NEWS \ - README \ - TODO \ - depcomp \ - CREDITS + depcomp CONFIG_CLEAN_FILES = libtool + +dist_doc_DATA = COPYING NEWS README TODO CREDITS ChangeLog docs: @cd doc && $(MAKE) $@ diff -r 9fc6fdc5c7959b3a2df03c0740377b4424e28c44 -r 23c7b905daf0344dd6c8bbced36637159d831880 doc/Makefile.am --- a/doc/Makefile.am Fri Feb 29 14:59:25 2008 +0000 +++ b/doc/Makefile.am Thu Feb 28 13:47:59 2008 +0000 @@ -2,13 +2,11 @@ include $(top_srcdir)/misc/Makefile.comm SUBDIRS = man hackersguide faq -doc_DATA = README README.dvb README.dxr3 \ +dist_doc_DATA = README README.dvb README.dxr3 \ README.freebsd README.irix README.network_dvd README.opengl \ README.solaris README_xxmc.html README.MINGWCROSS \ README.WIN32 README.macosx -EXTRA_DIST = $(doc_DATA) - docs clean-docs: @cd faq && $(MAKE) $@ @cd hackersguide && $(MAKE) $@ diff -r 9fc6fdc5c7959b3a2df03c0740377b4424e28c44 -r 23c7b905daf0344dd6c8bbced36637159d831880 doc/man/en/xine.5 --- a/doc/man/en/xine.5 Fri Feb 29 14:59:25 2008 +0000 +++ b/doc/man/en/xine.5 Thu Feb 28 13:47:59 2008 +0000 @@ -264,7 +264,12 @@ Text subtitle files may be appended to t .TP .BI <mrl>#subtitle:<subtitlefile> This is the normal way to define the subtitle file to use. The frontend will -not take any notice of the subtitle file. +not take any notice of the subtitle file. For example: +.br +.I file://home/user/wibble.mpg#subtitles:/home/user/wibble.sub +.br +(Note that some front ends can detect subtitles files where the name differs +as shown in the example.) .br .SH STREAM OPTIONS .br diff -r 9fc6fdc5c7959b3a2df03c0740377b4424e28c44 -r 23c7b905daf0344dd6c8bbced36637159d831880 src/audio_out/audio_pulse_out.c --- a/src/audio_out/audio_pulse_out.c Fri Feb 29 14:59:25 2008 +0000 +++ b/src/audio_out/audio_pulse_out.c Thu Feb 28 13:47:59 2008 +0000 @@ -246,7 +246,7 @@ static int ao_pulse_open(ao_driver_t *th pa_threaded_mainloop_lock(this->pa_class->mainloop); ret = pa_context_connect(this->pa_class->context, this->host, 1, NULL); if ( ret < 0 ) - goto fail; + goto fail_unlock; pa_context_set_state_callback(this->pa_class->context, __xine_pa_context_status_callback, this); @@ -289,8 +289,9 @@ static int ao_pulse_open(ao_driver_t *th return this->sample_rate; -fail: + fail_unlock: pa_threaded_mainloop_unlock(this->pa_class->mainloop); + fail: this_gen->close(this_gen); return 0; } diff -r 9fc6fdc5c7959b3a2df03c0740377b4424e28c44 -r 23c7b905daf0344dd6c8bbced36637159d831880 src/combined/wavpack_demuxer.c --- a/src/combined/wavpack_demuxer.c Fri Feb 29 14:59:25 2008 +0000 +++ b/src/combined/wavpack_demuxer.c Thu Feb 28 13:47:59 2008 +0000 @@ -368,7 +368,7 @@ void *demux_wv_init_plugin (xine_t *cons this->demux_class.open_plugin = open_plugin; this->demux_class.description = N_("Wavpack demux plugin"); this->demux_class.identifier = "Wavpack"; - this->demux_class.mimetypes = NULL; + this->demux_class.mimetypes = "audio/x-wavpack"; this->demux_class.extensions = "wv"; this->demux_class.dispose = default_demux_class_dispose; diff -r 9fc6fdc5c7959b3a2df03c0740377b4424e28c44 -r 23c7b905daf0344dd6c8bbced36637159d831880 src/demuxers/demux_flac.c --- a/src/demuxers/demux_flac.c Fri Feb 29 14:59:25 2008 +0000 +++ b/src/demuxers/demux_flac.c Thu Feb 28 13:47:59 2008 +0000 @@ -201,7 +201,7 @@ static int open_flac_file(demux_flac_t * length = _X_LE_32(ptr); ptr += 4 + length; - if (length >= block_length - 8) + if (length > block_length - 8) return 0; /* bad length or too little left in the buffer */ user_comment_list_length = _X_LE_32(ptr); diff -r 9fc6fdc5c7959b3a2df03c0740377b4424e28c44 -r 23c7b905daf0344dd6c8bbced36637159d831880 src/demuxers/demux_matroska.c --- a/src/demuxers/demux_matroska.c Fri Feb 29 14:59:25 2008 +0000 +++ b/src/demuxers/demux_matroska.c Thu Feb 28 13:47:59 2008 +0000 @@ -1833,6 +1833,15 @@ static int read_block_data (demux_matros return 1; } +static int parse_int16(uint8_t *data) { + int value = (int)_X_BE_16(data); + if (value & 1<<15) + { + value -= 1<<16; + } + return value; +} + static int parse_block (demux_matroska_t *this, uint64_t block_size, uint64_t cluster_timecode, uint64_t block_duration, int normpos, int is_key) { @@ -1849,8 +1858,9 @@ static int parse_block (demux_matroska_t if (!(num_len = parse_ebml_uint(this, data, &track_num))) return 0; data += num_len; - - timecode_diff = (int)_X_BE_16(data); + + /* timecode_diff is signed */ + timecode_diff = parse_int16(data); data += 2; flags = *data; diff -r 9fc6fdc5c7959b3a2df03c0740377b4424e28c44 -r 23c7b905daf0344dd6c8bbced36637159d831880 src/demuxers/id3.c --- a/src/demuxers/id3.c Fri Feb 29 14:59:25 2008 +0000 +++ b/src/demuxers/id3.c Thu Feb 28 13:47:59 2008 +0000 @@ -543,6 +543,7 @@ int id3v23_parse_tag(input_plugin_t *inp if (!id3v23_parse_frame_ext_header(input, &tag_frame_ext_header)) { return 0; } + pos += tag_frame_ext_header.size; } /* frame parsing */ while ((pos + ID3V23_FRAME_HEADER_SIZE) <= tag_header.size) { @@ -563,7 +564,8 @@ int id3v23_parse_tag(input_plugin_t *inp pos += tag_frame_header.size; } else { /* end of frames, the rest is padding */ - input->seek (input, tag_header.size - pos, SEEK_CUR); + lprintf("skipping padding %d bytes\n", tag_header.size - pos); + input->seek (input, tag_header.size - pos, SEEK_CUR); return 1; } } else { @@ -785,6 +787,7 @@ int id3v24_parse_tag(input_plugin_t *inp if (!id3v24_parse_ext_header(input, &tag_frame_ext_header)) { return 0; } + pos += tag_frame_ext_header.size; } /* frame parsing */ while ((pos + ID3V24_FRAME_HEADER_SIZE) <= tag_header.size) { diff -r 9fc6fdc5c7959b3a2df03c0740377b4424e28c44 -r 23c7b905daf0344dd6c8bbced36637159d831880 src/video_out/video_out_xcbxv.c --- a/src/video_out/video_out_xcbxv.c Fri Feb 29 14:59:25 2008 +0000 +++ b/src/video_out/video_out_xcbxv.c Thu Feb 28 13:47:59 2008 +0000 @@ -1085,6 +1085,27 @@ static void xv_update_XV_DOUBLE_BUFFER(v xprintf(this->xine, XINE_VERBOSITY_DEBUG, LOG_MODULE ": double buffering mode = %d\n", xv_double_buffer); } + +static void xv_update_XV_SYNC_TO_VBLANK(void *this_gen, xine_cfg_entry_t *entry) { + xv_driver_t *this = (xv_driver_t *) this_gen; + int xv_sync_to_vblank; + + xcb_intern_atom_cookie_t atom_cookie; + xcb_intern_atom_reply_t *atom_reply; + + xv_sync_to_vblank = entry->num_value; + + pthread_mutex_lock(&this->main_mutex); + atom_cookie = xcb_intern_atom(this->connection, 0, sizeof("XV_SYNC_TO_VBLANK"), "XV_SYNC_TO_VBLANK"); + atom_reply = xcb_intern_atom_reply(this->connection, atom_cookie, NULL); + xcb_xv_set_port_attribute(this->connection, this->xv_port, atom_reply->atom, xv_sync_to_vblank); + free(atom_reply); + pthread_mutex_unlock(&this->main_mutex); + + xprintf(this->xine, XINE_VERBOSITY_DEBUG, + "video_out_xcbxv: sync to vblank = %d\n", xv_sync_to_vblank); +} + static void xv_update_xv_pitch_alignment(void *this_gen, xine_cfg_entry_t *entry) { xv_driver_t *this = (xv_driver_t *) this_gen; @@ -1342,6 +1363,18 @@ static vo_driver_t *open_plugin(video_dr VIDEO_DEVICE_XV_DOUBLE_BUFFER_HELP, 20, xv_update_XV_DOUBLE_BUFFER, this); config->update_num(config,"video.device.xv_double_buffer",xv_double_buffer); + } else if(!strcmp(xcb_xv_attribute_info_name(attribute_it.data), "XV_SYNC_TO_VBLANK")) { + int xv_sync_to_vblank; + xv_sync_to_vblank = + config->register_bool (config, "video.device.xv_sync_to_vblank", 1, + _("enable vblank sync"), + _("This option will synchronize the update of the video image to the " + "repainting of the entire screen (\"vertical retrace\"). This eliminates " + "flickering and tearing artifacts. On nvidia cards one may also " + "need to run \"nvidia-settings\" and choose which display device to " + "sync to under the XVideo Settings tab"), + 20, xv_update_XV_SYNC_TO_VBLANK, this); + config->update_num(config,"video.device.xv_sync_to_vblank",xv_sync_to_vblank); } } } diff -r 9fc6fdc5c7959b3a2df03c0740377b4424e28c44 -r 23c7b905daf0344dd6c8bbced36637159d831880 src/video_out/video_out_xv.c --- a/src/video_out/video_out_xv.c Fri Feb 29 14:59:25 2008 +0000 +++ b/src/video_out/video_out_xv.c Thu Feb 28 13:47:59 2008 +0000 @@ -1128,6 +1128,22 @@ static void xv_update_XV_DOUBLE_BUFFER(v xprintf(this->xine, XINE_VERBOSITY_DEBUG, LOG_MODULE ": double buffering mode = %d\n", xv_double_buffer); +} + +static void xv_update_XV_SYNC_TO_VBLANK(void *this_gen, xine_cfg_entry_t *entry) { + xv_driver_t *this = (xv_driver_t *) this_gen; + Atom atom; + int xv_sync_to_vblank; + + xv_sync_to_vblank = entry->num_value; + + LOCK_DISPLAY(this); + atom = XInternAtom (this->display, "XV_SYNC_TO_VBLANK", False); + XvSetPortAttribute (this->display, this->xv_port, atom, xv_sync_to_vblank); + UNLOCK_DISPLAY(this); + + xprintf(this->xine, XINE_VERBOSITY_DEBUG, + "video_out_xv: sync to vblank = %d\n", xv_sync_to_vblank); } static void xv_update_xv_pitch_alignment(void *this_gen, xine_cfg_entry_t *entry) { @@ -1390,6 +1406,18 @@ static vo_driver_t *open_plugin_2 (video VIDEO_DEVICE_XV_DOUBLE_BUFFER_HELP, 20, xv_update_XV_DOUBLE_BUFFER, this); config->update_num(config,"video.device.xv_double_buffer",xv_double_buffer); + } else if(!strcmp(attr[k].name, "XV_SYNC_TO_VBLANK")) { + int xv_sync_to_vblank; + xv_sync_to_vblank = + config->register_bool (config, "video.device.xv_sync_to_vblank", 1, + _("enable vblank sync"), + _("This option will synchronize the update of the video image to the " + "repainting of the entire screen (\"vertical retrace\"). This eliminates " + "flickering and tearing artifacts. On nvidia cards one may also " + "need to run \"nvidia-settings\" and choose which display device to " + "sync to under the XVideo Settings tab"), + 20, xv_update_XV_SYNC_TO_VBLANK, this); + config->update_num(config,"video.device.xv_sync_to_vblank",xv_sync_to_vblank); } } } |
From: Diego 'F. P. <fla...@gm...> - 2008-03-01 02:10:04
|
# HG changeset patch # User Diego 'Flameeyes' Pettenò <fla...@gm...> # Date 1204336361 -3600 # Node ID 19e9294ad0d2b41c6de8ec46ade018eb8a311733 # Parent 9fc6fdc5c7959b3a2df03c0740377b4424e28c44 # Parent cd7237d28944e95a77c69dc407584084b68ecd04 Merge from 1.1. diff -r 19e9294ad0d2b41c6de8ec46ade018eb8a311733 -r 9fc6fdc5c7959b3a2df03c0740377b4424e28c44 src/combined/ffmpeg/ff_dvaudio_decoder.c --- a/src/combined/ffmpeg/ff_dvaudio_decoder.c Sat Mar 01 02:52:41 2008 +0100 +++ b/src/combined/ffmpeg/ff_dvaudio_decoder.c Fri Feb 29 14:59:25 2008 +0000 @@ -52,7 +52,12 @@ # undef uint64_t #endif -#include <avcodec.h> +#ifdef HAVE_FFMPEG_AVCODEC_H +# include <avcodec.h> +#else +# include <libavcodec/avcodec.h> +#endif + #include <dvdata.h> /* This is not installed by FFmpeg, its usage has to be cleared up */ #ifdef _MSC_VER diff -r 19e9294ad0d2b41c6de8ec46ade018eb8a311733 -r 9fc6fdc5c7959b3a2df03c0740377b4424e28c44 src/combined/ffmpeg/ff_video_decoder.c --- a/src/combined/ffmpeg/ff_video_decoder.c Sat Mar 01 02:52:41 2008 +0100 +++ b/src/combined/ffmpeg/ff_video_decoder.c Fri Feb 29 14:59:25 2008 +0000 @@ -47,7 +47,11 @@ #include "ffmpeg_decoder.h" #include "ff_mpeg_parser.h" -#include <postprocess.h> +#ifdef HAVE_FFMPEG_AVCODEC_H +# include <postprocess.h> +#else +# include <libpostproc/postprocess.h> +#endif #define VIDEOBUFSIZE (128*1024) #define SLICE_BUFFER_SIZE (1194*1024) diff -r 19e9294ad0d2b41c6de8ec46ade018eb8a311733 -r 9fc6fdc5c7959b3a2df03c0740377b4424e28c44 src/combined/ffmpeg/ffmpeg_decoder.h --- a/src/combined/ffmpeg/ffmpeg_decoder.h Sat Mar 01 02:52:41 2008 +0100 +++ b/src/combined/ffmpeg/ffmpeg_decoder.h Fri Feb 29 14:59:25 2008 +0000 @@ -25,7 +25,11 @@ #include "config.h" #endif -#include <avcodec.h> +#ifdef HAVE_FFMPEG_AVCODEC_H +# include <avcodec.h> +#else +# include <libavcodec/avcodec.h> +#endif typedef struct ff_codec_s { uint32_t type; |
From: Darren S. <li...@yo...> - 2008-03-04 16:21:25
|
# HG changeset patch # User Darren Salt <li...@yo...> # Date 1204646423 0 # Node ID bc3a850f451a1d04de48603fdbbd5b9f489d946d # Parent 5cdf1499df42df5de4f8cb34104a2086e0e74dbf # Parent 7c5f9ac37fae8faa6e2ebfdfe35ff2bc3b2a5c39 Merge from 1.1. diff -r bc3a850f451a1d04de48603fdbbd5b9f489d946d -r 5cdf1499df42df5de4f8cb34104a2086e0e74dbf m4/decoders.m4 --- a/m4/decoders.m4 Tue Mar 04 16:00:23 2008 +0000 +++ b/m4/decoders.m4 Tue Mar 04 15:59:22 2008 +0000 @@ -109,7 +109,7 @@ AC_DEFUN([XINE_DECODER_PLUGINS], [ dnl Check presence of ffmpeg/avutil.h to see if it's old or new dnl style for headers. The new style would be preferred actually... - AC_CHECK_HEADER([ffmpeg/avutil.h]) + AC_CHECK_HEADERS([ffmpeg/avutil.h]) AC_MSG_NOTICE([ ********************************************************************* diff -r bc3a850f451a1d04de48603fdbbd5b9f489d946d -r 5cdf1499df42df5de4f8cb34104a2086e0e74dbf src/combined/ffmpeg/ff_dvaudio_decoder.c --- a/src/combined/ffmpeg/ff_dvaudio_decoder.c Tue Mar 04 16:00:23 2008 +0000 +++ b/src/combined/ffmpeg/ff_dvaudio_decoder.c Tue Mar 04 15:59:22 2008 +0000 @@ -52,7 +52,7 @@ # undef uint64_t #endif -#ifdef HAVE_FFMPEG_AVCODEC_H +#ifdef HAVE_FFMPEG_AVUTIL_H # include <avcodec.h> # include <rational.h> # define FFMPEG_AVCODEC_H diff -r bc3a850f451a1d04de48603fdbbd5b9f489d946d -r 5cdf1499df42df5de4f8cb34104a2086e0e74dbf src/combined/ffmpeg/ff_video_decoder.c --- a/src/combined/ffmpeg/ff_video_decoder.c Tue Mar 04 16:00:23 2008 +0000 +++ b/src/combined/ffmpeg/ff_video_decoder.c Tue Mar 04 15:59:22 2008 +0000 @@ -47,7 +47,7 @@ #include "ffmpeg_decoder.h" #include "ff_mpeg_parser.h" -#ifdef HAVE_FFMPEG_AVCODEC_H +#ifdef HAVE_FFMPEG_AVUTIL_H # include <postprocess.h> #else # include <libpostproc/postprocess.h> diff -r bc3a850f451a1d04de48603fdbbd5b9f489d946d -r 5cdf1499df42df5de4f8cb34104a2086e0e74dbf src/combined/ffmpeg/ffmpeg_decoder.h --- a/src/combined/ffmpeg/ffmpeg_decoder.h Tue Mar 04 16:00:23 2008 +0000 +++ b/src/combined/ffmpeg/ffmpeg_decoder.h Tue Mar 04 15:59:22 2008 +0000 @@ -25,7 +25,7 @@ #include "config.h" #endif -#ifdef HAVE_FFMPEG_AVCODEC_H +#ifdef HAVE_FFMPEG_AVUTIL_H # include <avcodec.h> #else # include <libavcodec/avcodec.h> diff -r bc3a850f451a1d04de48603fdbbd5b9f489d946d -r 5cdf1499df42df5de4f8cb34104a2086e0e74dbf src/libw32dll/wine/Makefile.am --- a/src/libw32dll/wine/Makefile.am Tue Mar 04 16:00:23 2008 +0000 +++ b/src/libw32dll/wine/Makefile.am Tue Mar 04 15:59:22 2008 +0000 @@ -5,7 +5,8 @@ AM_CFLAGS = $(DEFAULT_OCFLAGS) $(X_CFL AM_CFLAGS = $(DEFAULT_OCFLAGS) $(X_CFLAGS) @W32_NO_OPTIMIZE@ \ -fno-omit-frame-pointer -fno-inline-functions -fno-rename-registers AM_CPPFLAGS = -DWIN32_PATH=\"$(w32_path)\" -I$(srcdir)/.. -D__WINE__ \ - -Ddbg_printf=__vprintf -DTRACE=__vprintf + -Ddbg_printf=__vprintf -DTRACE=__vprintf \ + -I$(top_srcdir)/src/xine-utils EXTRA_DIST = stubs.s wrapper.S diff -r bc3a850f451a1d04de48603fdbbd5b9f489d946d -r 5cdf1499df42df5de4f8cb34104a2086e0e74dbf src/libw32dll/wine/win32.c --- a/src/libw32dll/wine/win32.c Tue Mar 04 16:00:23 2008 +0000 +++ b/src/libw32dll/wine/win32.c Tue Mar 04 15:59:22 2008 +0000 @@ -5058,11 +5058,9 @@ struct libs libraries[]={ LL(ddraw) #endif }; -#if defined(__CYGWIN__) || defined(__OS2__) || defined (__OpenBSD__) -#define MANGLE(a) "_" #a -#else -#define MANGLE(a) #a -#endif + +#include "mangle.h" + static void ext_stubs(void) { // expects: diff -r bc3a850f451a1d04de48603fdbbd5b9f489d946d -r 5cdf1499df42df5de4f8cb34104a2086e0e74dbf src/post/deinterlace/plugins/Makefile.am --- a/src/post/deinterlace/plugins/Makefile.am Tue Mar 04 16:00:23 2008 +0000 +++ b/src/post/deinterlace/plugins/Makefile.am Tue Mar 04 15:59:22 2008 +0000 @@ -20,7 +20,7 @@ include $(top_srcdir)/misc/Makefile.comm # libpostproc is here so we can use their nice mangle.h AM_CFLAGS = $(VISIBILITY_FLAG) AM_CPPFLAGS = -I$(top_srcdir)/src/post/deinterlace \ - -I$(top_srcdir)/contrib/ffmpeg/libpostproc + -I$(top_srcdir)/src/xine-utils EXTRA_DIST = greedy2frame_template.c greedyh.asm \ tomsmocomp/SearchLoop0A.inc tomsmocomp/SearchLoopBottom.inc \ diff -r bc3a850f451a1d04de48603fdbbd5b9f489d946d -r 5cdf1499df42df5de4f8cb34104a2086e0e74dbf src/post/deinterlace/plugins/tomsmocomp/tomsmocompmacros.h --- a/src/post/deinterlace/plugins/tomsmocomp/tomsmocompmacros.h Tue Mar 04 16:00:23 2008 +0000 +++ b/src/post/deinterlace/plugins/tomsmocomp/tomsmocompmacros.h Tue Mar 04 15:59:22 2008 +0000 @@ -2,7 +2,7 @@ #include <math.h> #include <stdlib.h> -#include <mangle.h> +#include "mangle.h" #define USE_FOR_DSCALER diff -r bc3a850f451a1d04de48603fdbbd5b9f489d946d -r 5cdf1499df42df5de4f8cb34104a2086e0e74dbf src/post/planar/pp.c --- a/src/post/planar/pp.c Tue Mar 04 16:00:23 2008 +0000 +++ b/src/post/planar/pp.c Tue Mar 04 15:59:22 2008 +0000 @@ -25,8 +25,13 @@ #include <xine/xine_internal.h> #include <xine/post.h> #include <xine/xineutils.h> -#include "postprocess.h" #include <pthread.h> + +#ifdef HAVE_FFMPEG_AVUTIL_H +# include <postprocess.h> +#else +# include <libpostproc/postprocess.h> +#endif #define PP_STRING_SIZE 256 /* size of pp mode string (including all options) */ diff -r bc3a850f451a1d04de48603fdbbd5b9f489d946d -r 5cdf1499df42df5de4f8cb34104a2086e0e74dbf src/xine-utils/Makefile.am --- a/src/xine-utils/Makefile.am Tue Mar 04 16:00:23 2008 +0000 +++ b/src/xine-utils/Makefile.am Tue Mar 04 15:59:22 2008 +0000 @@ -5,7 +5,7 @@ AM_CPPFLAGS = -DXINE_LIBRARY_COMPILE EXTRA_DIST = ppcasm_string.S ppc_asm.tmpl -noinst_HEADERS = ppcasm_string.h xine_check.h +noinst_HEADERS = ppcasm_string.h xine_check.h mangle.h noinst_LTLIBRARIES = libxineutils.la |
From: Darren S. <li...@yo...> - 2008-03-04 16:41:58
|
# HG changeset patch # User Darren Salt <li...@yo...> # Date 1204648026 0 # Node ID 90d0c6eba0c3418ba2c61e3a953c162d5e8b198d # Parent bc3a850f451a1d04de48603fdbbd5b9f489d946d # Parent a0c0f9b124e3bd50e28e0e4fe536967cf2e68f4e Merge from 1.1. diff -r 90d0c6eba0c3418ba2c61e3a953c162d5e8b198d -r bc3a850f451a1d04de48603fdbbd5b9f489d946d ChangeLog --- a/ChangeLog Tue Mar 04 16:27:06 2008 +0000 +++ b/ChangeLog Tue Mar 04 16:00:23 2008 +0000 @@ -72,6 +72,8 @@ xine-lib (1.1.11) unreleased scripts use xine-lib's automake macros. * Fixed an off-by-one in the FLAC security fix patch. This breakage was causing failure to play some files. + * Support 16-bit big-endian DTS audio. + * Improved frame snapshot API. (ABI extension.) xine-lib (1.1.10.1) 2008-02-07 * Security fixes: diff -r 90d0c6eba0c3418ba2c61e3a953c162d5e8b198d -r bc3a850f451a1d04de48603fdbbd5b9f489d946d include/xine.h --- a/include/xine.h Tue Mar 04 16:27:06 2008 +0000 +++ b/include/xine.h Tue Mar 04 16:00:23 2008 +0000 @@ -401,13 +401,37 @@ int xine_get_param (xine_stream_t *stre * image format can be YUV 4:2:0 or 4:2:2 * will copy the image data into memory that <img> points to * (interleaved for yuv 4:2:2 or planary for 4:2:0) - * - * returns 1 on success, 0 failure. + * + * xine_get_current_frame() requires that <img> must be able + * to hold the image data. Use a NULL pointer to retrieve the + * necessary parameters for calculating the buffer size. Be + * aware that the image can change between two successive calls + * so you better pause the stream. + * + * xine_get_current_frame_s() requires to specify the buffer + * size and it returns the needed / used size. It won't copy + * image data into a too small buffer. + * + * xine_get_current_frame_alloc() takes care of allocating + * a buffer on it's own, so image data can be retrieved by + * a single call without the need to pause the stream. + * + * all functions return 1 on success, 0 failure. */ int xine_get_current_frame (xine_stream_t *stream, int *width, int *height, int *ratio_code, int *format, uint8_t *img) XINE_PROTECTED; + +int xine_get_current_frame_s (xine_stream_t *stream, + int *width, int *height, + int *ratio_code, int *format, + uint8_t *img, int *size) XINE_PROTECTED; + +int xine_get_current_frame_alloc (xine_stream_t *stream, + int *width, int *height, + int *ratio_code, int *format, + uint8_t **img, int *size) XINE_PROTECTED; /* xine image formats */ #define XINE_IMGFMT_YV12 (('2'<<24)|('1'<<16)|('V'<<8)|'Y') diff -r 90d0c6eba0c3418ba2c61e3a953c162d5e8b198d -r bc3a850f451a1d04de48603fdbbd5b9f489d946d src/audio_dec/xine_dts_decoder.c --- a/src/audio_dec/xine_dts_decoder.c Tue Mar 04 16:27:06 2008 +0000 +++ b/src/audio_dec/xine_dts_decoder.c Tue Mar 04 16:00:23 2008 +0000 @@ -199,19 +199,27 @@ static void dts_decode_frame (dts_decode audio_buffer->num_frames = this->ac5_pcm_length; - data_out[0] = 0x72; data_out[1] = 0xf8; /* spdif syncword */ - data_out[2] = 0x1f; data_out[3] = 0x4e; /* .............. */ - data_out[4] = ac5_spdif_type; /* DTS data */ - data_out[5] = 0; /* Unknown */ - data_out[6] = (this->ac5_length << 3) & 0xff; /* ac5_length * 8 */ - data_out[7] = ((this->ac5_length ) >> 5) & 0xff; - - if( this->ac5_pcm_length ) { - if( this->ac5_pcm_length % 2) { - swab(data_in, &data_out[8], this->ac5_length ); - } else { - swab(data_in, &data_out[8], this->ac5_length + 1); + // Checking if AC5 data plus IEC958 header will fit into frames samples data + if ( this->ac5_length + 8 <= this->ac5_pcm_length * 2 * 2 ) { + data_out[0] = 0x72; data_out[1] = 0xf8; /* spdif syncword */ + data_out[2] = 0x1f; data_out[3] = 0x4e; /* .............. */ + data_out[4] = ac5_spdif_type; /* DTS data */ + data_out[5] = 0; /* Unknown */ + data_out[6] = (this->ac5_length << 3) & 0xff; /* ac5_length * 8 */ + data_out[7] = ((this->ac5_length ) >> 5) & 0xff; + + if( this->ac5_pcm_length ) { + if( this->ac5_pcm_length % 2) { + swab(data_in, &data_out[8], this->ac5_length ); + } else { + swab(data_in, &data_out[8], this->ac5_length + 1); + } } + // Transmit it without header otherwise, receivers will autodetect DTS + } else { + lprintf("AC5 data is too large (%i > %i), sending without IEC958 header\n", + this->ac5_length + 8, this->ac5_pcm_length * 2 * 2); + memcpy(data_out, data_in, this->ac5_length); } } else { /* Software decode */ diff -r 90d0c6eba0c3418ba2c61e3a953c162d5e8b198d -r bc3a850f451a1d04de48603fdbbd5b9f489d946d src/demuxers/demux_dts.c --- a/src/demuxers/demux_dts.c Tue Mar 04 16:27:06 2008 +0000 +++ b/src/demuxers/demux_dts.c Tue Mar 04 16:00:23 2008 +0000 @@ -140,29 +140,63 @@ static int open_dts_file(demux_dts_t *th } } + /* DTS bitstream encoding version + * -1 - not detected + * 0 - 16 bits and big endian + * 1 - 16 bits and low endian (detection not implemented) + * 2 - 14 bits and big endian (detection not implemented) + * 3 - 14 bits and low endian + */ + int dts_version = -1; + /* Look for a valid DTS syncword */ for (i=offset; i<peak_size-1; i++) { + /* 16 bits and big endian bitstream */ + if (syncword == 0x7ffe8001) { + dts_version = 0; + break; + } /* 14 bits and little endian bitstream */ - if ((syncword == 0xff1f00e8) && - ((peak[i] & 0xf0) == 0xf0) && (peak[i+1] == 0x07)) { - this->data_start = i-4; - lprintf("found DTS syncword at offset %d\n", i-4); - break; + else if ((syncword == 0xff1f00e8) && + ((peak[i] & 0xf0) == 0xf0) && (peak[i+1] == 0x07)) { + dts_version = 3; + break; } syncword = (syncword << 8) | peak[i]; } + + if (dts_version == -1) { + xprintf (this->stream->xine, XINE_VERBOSITY_LOG, + LOG_MODULE ": unsupported DTS stream type, or not a DTS stream\n"); + return 0; + } + + this->data_start = i-4; + lprintf("found DTS syncword at offset %d\n", i-4); if (i < peak_size-9) { unsigned int nblks, fsize, sfreq; - - /* 14 bits and little endian bitstream */ - nblks = ((peak[this->data_start+4] & 0x07) << 4) | - ((peak[this->data_start+7] & 0x3c) >> 2); - fsize = (((peak[this->data_start+7] & 0x03) << 12) | - (peak[this->data_start+6] << 4) | - ((peak[this->data_start+9] & 0x3c) >> 2)) + 1; - sfreq = peak[this->data_start+8] & 0x0f; + switch (dts_version) + { + case 0: /* BE16 */ + nblks = ((peak[this->data_start+4] & 0x01) << 6) | + ((peak[this->data_start+5] & 0xfc) >> 2); + fsize = (((peak[this->data_start+5] & 0x03) << 12) |(peak[this->data_start+6] << 4) | + ((peak[this->data_start+7] & 0xf0) >> 4)) + 1; + sfreq = (peak[this->data_start+8] & 0x3c) >> 2; + break; + + case 3: /* LE14 */ + nblks = ((peak[this->data_start+4] & 0x07) << 4) | + ((peak[this->data_start+7] & 0x3c) >> 2); + fsize = (((peak[this->data_start+7] & 0x03) << 12) | + (peak[this->data_start+6] << 4) | + ((peak[this->data_start+9] & 0x3c) >> 2)) + 1; + sfreq = peak[this->data_start+8] & 0x0f; + break; + + } if ((sfreq > sizeof(dts_sample_rates)/sizeof(int)) || (dts_sample_rates[sfreq] == 0)) @@ -170,7 +204,19 @@ static int open_dts_file(demux_dts_t *th /* Big assumption - this is CBR data */ this->samples_per_frame = (nblks + 1) * 32; - this->frame_size = fsize * 8 / 14 * 2; + + switch (dts_version) + { + case 0: /* BE16 */ + case 1: /* LE16 */ + this->frame_size = fsize * 8 / 16 * 2; + break; + case 2: /* BE14 */ + case 3: /* LE14 */ + this->frame_size = fsize * 8 / 14 * 2; + break; + } + this->sample_rate = dts_sample_rates[sfreq]; lprintf("samples per frame: %d\n", this->samples_per_frame); diff -r 90d0c6eba0c3418ba2c61e3a953c162d5e8b198d -r bc3a850f451a1d04de48603fdbbd5b9f489d946d src/video_dec/libmpeg2/decode.c --- a/src/video_dec/libmpeg2/decode.c Tue Mar 04 16:27:06 2008 +0000 +++ b/src/video_dec/libmpeg2/decode.c Tue Mar 04 16:00:23 2008 +0000 @@ -461,9 +461,10 @@ static inline int parse_chunk (mpeg2dec_ break; case 0xb7: /* sequence end code */ -#ifdef LOG_PAN_SCAN - printf ("libmpeg2: sequence end code not handled\n"); -#endif + mpeg2_flush(mpeg2dec); + mpeg2dec->is_sequence_needed = 1; + break; + case 0xb8: /* group of pictures start code */ if (mpeg2_header_group_of_pictures (picture, buffer)) { printf ("libmpeg2: bad group of pictures\n"); diff -r 90d0c6eba0c3418ba2c61e3a953c162d5e8b198d -r bc3a850f451a1d04de48603fdbbd5b9f489d946d src/xine-engine/xine.c --- a/src/xine-engine/xine.c Tue Mar 04 16:27:06 2008 +0000 +++ b/src/xine-engine/xine.c Tue Mar 04 16:00:23 2008 +0000 @@ -1963,11 +1963,12 @@ int xine_get_pos_length (xine_stream_t * return 1; } -int xine_get_current_frame (xine_stream_t *stream, int *width, int *height, - int *ratio_code, int *format, - uint8_t *img) { +static int _x_get_current_frame_impl (xine_stream_t *stream, int *width, int *height, + int *ratio_code, int *format, + uint8_t **img, int *size, int alloc_img) { vo_frame_t *frame; + int required_size; stream->xine->port_ticket->acquire(stream->xine->port_ticket, 0); frame = stream->video_out->get_last_frame (stream->video_out); @@ -1993,20 +1994,58 @@ int xine_get_current_frame (xine_stream_ *format = frame->format; - if (img){ + switch (*format) { + + case XINE_IMGFMT_YV12: + required_size = *width * *height + + ((*width + 1) / 2) * ((*height + 1) / 2) + + ((*width + 1) / 2) * ((*height + 1) / 2); + break; + + case XINE_IMGFMT_YUY2: + required_size = *width * *height + + ((*width + 1) / 2) * *height + + ((*width + 1) / 2) * *height; + break; + + default: + xprintf (stream->xine, XINE_VERBOSITY_DEBUG, + "xine: error, snapshot function not implemented for format 0x%x\n", frame->format); + _x_abort (); + } + + if (alloc_img) { + /* return size if requested */ + if (size) + *size = required_size; + /* allocate img or fail */ + if (!(*img = xine_xmalloc (required_size))) + return 0; + } else { + /* fail if supplied buffer is to small */ + if (*img && size && *size < required_size) { + *size = required_size; + return 0; + } + /* return size if requested */ + if (size) + *size = required_size; + } + + if (*img) { switch (frame->format) { case XINE_IMGFMT_YV12: yv12_to_yv12( /* Y */ frame->base[0], frame->pitches[0], - img, frame->width, + *img, frame->width, /* U */ frame->base[1], frame->pitches[1], - img+frame->width*frame->height, frame->width/2, + *img+frame->width*frame->height, frame->width/2, /* V */ frame->base[2], frame->pitches[2], - img+frame->width*frame->height+frame->width*frame->height/4, frame->width/2, + *img+frame->width*frame->height+frame->width*frame->height/4, frame->width/2, /* width x height */ frame->width, frame->height); break; @@ -2016,7 +2055,7 @@ int xine_get_current_frame (xine_stream_ /* src */ frame->base[0], frame->pitches[0], /* dst */ - img, frame->width*2, + *img, frame->width*2, /* width x height */ frame->width, frame->height); break; @@ -2028,6 +2067,25 @@ int xine_get_current_frame (xine_stream_ } } return 1; +} + +int xine_get_current_frame_alloc (xine_stream_t *stream, int *width, int *height, + int *ratio_code, int *format, + uint8_t **img, int *size) { + uint8_t *no_img = NULL; + return _x_get_current_frame_impl(stream, width, height, ratio_code, format, img ? img : &no_img, size, img != NULL); +} + +int xine_get_current_frame_s (xine_stream_t *stream, int *width, int *height, + int *ratio_code, int *format, + uint8_t *img, int *size) { + return (!img || size) && _x_get_current_frame_impl(stream, width, height, ratio_code, format, &img, size, 0); +} + +int xine_get_current_frame (xine_stream_t *stream, int *width, int *height, + int *ratio_code, int *format, + uint8_t *img) { + return _x_get_current_frame_impl(stream, width, height, ratio_code, format, &img, NULL, 0); } int xine_get_video_frame (xine_stream_t *stream, |