From: <mme...@gr...> - 2007-08-18 22:49:44
|
# HG changeset patch # User Matt Messier <mme...@gr...> # Date 1187473578 14400 # Node ID 6da3735ae176cc2b30af1dfe4fbd5c96a93a2260 # Parent 7fd3df5d67d667238737563dafa4b72b641263df # Parent f5469d66e8d5b3c7505601dd255947cd8b635389 Merge from xine-lib-1.2 diff -r 6da3735ae176cc2b30af1dfe4fbd5c96a93a2260 -r 7fd3df5d67d667238737563dafa4b72b641263df .hgignore --- a/.hgignore Sat Aug 18 17:46:18 2007 -0400 +++ b/.hgignore Sat Aug 18 17:30:57 2007 -0400 @@ -43,6 +43,7 @@ debian/libxine-dev debian/libxine-dev debian/libxine2 debian/libxine2-dbg +debian/libxine2-doc debian/tmp debian/*.debhelper debian/*.substvars @@ -80,3 +81,8 @@ po/remove-potcdate.sed po/remove-potcdate.sed src/libffmpeg/ffmpeg_config.h +src/video_out/libdha/pci_dev_ids.c +src/video_out/libdha/pci_ids.h +src/video_out/libdha/pci_names.[ch] +src/video_out/libdha/pci_vendors.h + diff -r 6da3735ae176cc2b30af1dfe4fbd5c96a93a2260 -r 7fd3df5d67d667238737563dafa4b72b641263df ChangeLog --- a/ChangeLog Sat Aug 18 17:46:18 2007 -0400 +++ b/ChangeLog Sat Aug 18 17:30:57 2007 -0400 @@ -46,6 +46,17 @@ xine-lib (1.1.8) (Unreleased) capable boxes it's probably worse than our own code). * Rename endianness-reading macros so that they don't collide with Solaris system macros. BE_/LE_ are now _X_BE_ and _X_LE_. + * Add an extra function to allow front ends to rename their old, + badly-named configuration items. + * Various build fixes and cleanups for Solaris, plugin dependencies etc. + * Fix some memory leaks in the Vorbis decoder and video overlays. + * Fix a problem with the goom plugin which could cause it to stop working. + * Clean up "%" unescaping in MRLs; correctly handle "%" in DVD MRLs. + * Fix a crash with "dvb:/". + * DVB subtitle fixes: deadlock prevention, thread leakage, spec compliance. + * Allow the DVB input plugin to timeout if it is receiving no signal. + * Fix an audio resampling problem which was causing regular clicking. + * Fix build with recent glibc and a debugging #define. [Bug 1773769] xine-lib (1.1.7) * Support libdca (new name for libdts) by shuffling around the dts.h file. diff -r 6da3735ae176cc2b30af1dfe4fbd5c96a93a2260 -r 7fd3df5d67d667238737563dafa4b72b641263df TODO --- a/TODO Sat Aug 18 17:46:18 2007 -0400 +++ b/TODO Sat Aug 18 17:30:57 2007 -0400 @@ -28,6 +28,7 @@ known bugs - frame allocation problem with h264 streams using > 15 reference frames - dvdnav time search function does not use the time table, but interpolates only cell times +- apparently, dvb:// (but not dvb://CHANNEL) is broken for ATSC requested/planned features diff -r 6da3735ae176cc2b30af1dfe4fbd5c96a93a2260 -r 7fd3df5d67d667238737563dafa4b72b641263df debian/rules --- a/debian/rules Sat Aug 18 17:46:18 2007 -0400 +++ b/debian/rules Sat Aug 18 17:30:57 2007 -0400 @@ -68,6 +68,7 @@ CONFIGURE_FLAGS := --prefix=/usr \ --with-external-libmad \ --with-external-a52dec \ --with-external-libdts \ + --with-freetype \ --with-wavpack \ $(DEB_BUILD_CONFIG_OPTIONS) \ CFLAGS="$(CFLAGS)" diff -r 6da3735ae176cc2b30af1dfe4fbd5c96a93a2260 -r 7fd3df5d67d667238737563dafa4b72b641263df doc/README.dvb --- a/doc/README.dvb Sat Aug 18 17:46:18 2007 -0400 +++ b/doc/README.dvb Sat Aug 18 17:30:57 2007 -0400 @@ -4,52 +4,54 @@ xine Digital TV (DVB) xine can be used to watch digital television. -xine supports Digital TV (Digital Video Broadcasting - DVB) cards -using the Linux DVB driver from Convergence (http://www.linuxtv.org). -DVB-S (direct satellite reception), DVB-C (Cable) and DVB-T (Teresstrical) -cards should be supported (e.g. the Hauppauge WinTV Nova DVB-S card). +xine supports Digital TV (Digital Video Broadcasting - DVB) cards using the +Linux DVB drivers in your kernel or from http://www.linuxtv.org/. -driver download and installation +Many DVB-S (direct satellite reception), DVB-C (Cable) and DVB-T and ATSC +(Terrestrial) devices are supported via these drivers. + + +Driver download and installation -------------------------------- -Download and install the drivers from http://www.linuxtv.org, the 1.0.0 or later release -should work fine. +You may need to download and install drivers for recent hardware. See the +"Getting Started" section at http://www.linuxtv.org/wiki/index.php/ . -You will need kernel sources configured for your configuration for -a successfull build, preferably in /usr/src/linux plus a link to them in -/lib/modules/<kernel-version>/build. Once you have that you should be ready -to compile the driver +You will probably need to add yourself to group "video". With a DVB device +installed and recognised: -# cd linuxtv-dvb-1.0.0/driver -# make + $ ls -l /deb/dvb/adapter0 + total 0 + crw-rw---- 1 root video 212, 4 2007-08-07 15:33 demux0 + crw-rw---- 1 root video 212, 5 2007-08-07 15:33 dvr0 + crw-rw---- 1 root video 212, 3 2007-08-07 15:33 frontend0 + crw-rw---- 1 root video 212, 7 2007-08-07 15:33 net0 -if that doesn't fail, do a +This shows that you need to be either root or in group "video" to be able to +use the DVB device. -# make insmod +You can find out if you're already in this group by using the "groups" +command in a terminal. If you aren't, then trying to use the DVB plugin will +cause a "no input plugin" error: this is somewhat misleading because the DVB +plugin was actually found but it failed because it couldn't open the device +nodes. -UPDATE: the latest 2.6 kernels include the necessary drivers for most - cards, check on the linuxtv.org website for information about supported - cards, or read the documentation available in the linux kernel - sources (linux/Documentation/dvb/*). +Adding yourself to group "video" is the best way; one of -to load the generated modules into your running kernel. If everything went -fine, you should have something like + # adduser fred video + $ sudo adduser fred video -DVB: registering new adapter (TT-Budget/WinTV-NOVA-S PCI). -PCI: Found IRQ 10 for device 00:0d.0 -PCI: Sharing IRQ 10 with 00:0c.0 -DVB: registering frontend 0:0 (stv0299 based (e.g. Alps BSRU6 or LG TDQB-S00x))... +will do the job for a user named "fred". Note that the change won't take +effect until after fred has logged out if he's currently logged in. -in your dmesg. - -install a channel list +Install a channel list ---------------------- -xine's dvb input plugin needs a channel/transponder list that fits your -dvb equipment. xine now uses the channels.conf format of szap, czap and -tzap as appropriate for DVB-S, DVB-C and DVB-T. it will search the channel -list file in ~/.config/xine/channels.conf +xine-lib's dvb input plugin needs a channel/transponder list that fits your +dvb equipment. xine-lib uses the channels.conf format of szap, czap and tzap +as appropriate for DVB-S, DVB-C and DVB-T. It will search the channel list +file in ~/.config/xine/channels.conf. channel list format for DVB-S: (satellite) ------------------------------------------- @@ -64,79 +66,71 @@ station name:frequency:config options go station name:frequency:config options go on seemingly forever ... :vpid:apid:serviceid ------------------------------------------- -you automatically scan for all available channels using the scan utility -which comes with the dvb package. compile it using something like +You scan for all available channels using the scan utility which comes with +the dvb-apps package (also known as dvb-utils). See +http://www.linuxtv.org/wiki/index.php/Scan for more information. -# cd linuxtv-dvb-1.0.0/apps/scan -# make + $ scan /usr/share/doc/dvb-utils/examples/scan/dvb-t/uk-PontopPike >~/.config/xine/channels.conf + $ scan Hotbird-13.0 >~/.config/xine/channels.conf -then start scanning +This can take a while. In a DiSEqC environment, use the -s N switch to +select different satellites to scan and paste the results in one big +channels.conf file. As always, please be sure to read the man page for the +version of the tool you are using. -# scan >~/.config/xine/channels.conf +HINT: you might want to manually sort the channels.conf file to have your +favourite channels at the top and maybe remove any scrambled channels to +which you don't have access. -newer versions of scan (after July 2004) are called dvbscan, but you can use it much the same way: -# dvbscan Hotbird-13.0 >~/.config/xine/channels.conf - -this can take a while. in a DiSEqC environment, use the -s N switch to select -different sattelites to scan and paste the results in one big channels.conf file. As always, -please be sure to read the man page for the version of the tool you are using. - -HINT 1: you might want to manually sort the channels.conf file to have your favourite - channels at the top and maybe remove scrambled channels which you don't have access to. - - - ************************ If the dvb plugin doesn't seem to work for you ****************** -* if xine doesn't seem to work for you, double check to make sure that the channels.conf * -* file is _NOT_ in vdr format, which looks something like this: * -* WINSA:557500:I999B7C23D0M64T8G8Y0:T:27500:33:36:47:0:1:0:0:0 * - ****************************************************************************************** - -using xine to watch digital television +Using xine to watch digital television -------------------------------------- -make sure you have a recent libxine and frontend installed (latest CVS as of -this writing). then simply start something like +Make sure you have a recent libxine and front end installed, then simply +start something like -$ gxine dvb:// + $ gxine dvb:// -or click on the DVB button in xine-ui. you should be able to zap around using -the NumPad-9 / NumPad-3 keys, the xine playlist, or using the next/previous chapter -buttons in your gui. +or, perhaps, click on the DVB button in xine-ui. You should be able to zap +around using the NumPad-9 / NumPad-3 keys, the xine playlist, or using the +next/previous chapter buttons in your gui. -An OSD menu is available too. Press NumPad-8 / NumPad-2 to scroll -through the channels, then press NumPad-Enter to switch to the channel -you have selected. As of 06-12-2004, the channel list can be brought up and scrolled -through via the wheel on many mouses. Use the left mouse button to switch to -the channel you've selected. The side buttons (6 & 7) can be used to rapidly switch -to previous/next channels, if they are available on your mouse. +An OSD menu is available too. Press NumPad-8 / NumPad-2 to scroll through +the channels, then press NumPad-Enter to switch to the channel you have +selected. The channel list can be brought up and scrolled through via the +mouse wheel. Use the left mouse button to switch to the channel you've +selected. The side buttons (6 & 7) can be used to rapidly switch to +previous/next channels, if they are available on your mouse. -You can use MENU3 (F2 in xine-ui, F3 in gxine) to zoom into the centre of a videostream. -This will allow you to view 4:3 content that has been embedded into a -16:9 stream in fullscreen (no more black borders). Press the key again -to return to normal viewing. There is also an option in the xine +You can use MENU3 (F2 in xine-ui, F3 in gxine) to zoom into the centre of a +videostream. This will allow you to view 4:3 content that has been embedded +into a 16:9 stream in fullscreen (no more black borders). Press the key +again to return to normal viewing. There is also an option in the xine preferences to zoom automatically when using xine to view DVB. -MENU7 (F6 in xine-ui or F7 in gxine) will toggle viewing of the current channels' -Electronic Program Guide (information on the current/next program) on the OSD, if available. +MENU7 (F6 in xine-ui or F7 in gxine) will toggle viewing of the current +channel's Electronic Program Guide (information on the current/next program) +on the OSD, if available. -HINT: if audio or video is stuttering, pause (space key) shortly -to give xine a chance to fill up it's buffers. If watching a large HDTV stream, you -may need to increase the xine video & audio buffer size - increasing audio buffers to -300 and video buffers to 700 has been known to work with streams up to 1920x1088 in size. +HINT: if audio or video is stuttering, pause (space key) shortly to give +xine-lib a chance to fill its buffers. If watching a large HDTV stream, you +may need to increase the xine video & audio buffer size - increasing audio +buffers to 300 and video buffers to 700 has been known to work with streams +up to 1920x1088 in size. -recording digital television +Recording digital television ---------------------------- -there is a very simple vcr-like feature built into the xine engine. just press -MENU2 (that is F2 in gxine, or F1 in xine-ui for example) to start/stop recording -the currently displayed program to your local disc. a small osd in the upper -left corner of your screen will tell you the file name the recorded stream is -written to. You can select the directory to save to in the xine configuration under -the MISC tab, otherwise the plugin will record to your home directory. You can -pause the recording at any time by pressing MENU4 (F3 in xine-ui, F4 in gxine). -An OSD in the top left hand corner will notify you of the status of the recording. +There is a very simple VCR-like feature built into the xine engine. just +press MENU2 (that is F2 in gxine, or F1 in xine-ui for example) to +start/stop recording the currently displayed program to your local disc. A +small OSD message in the upper left corner of your screen will tell you the +file name the recorded stream is being written to. You can select the +directory to save to in the xine configuration under the MISC tab, otherwise +the plugin will record to your home directory. You can pause the recording +at any time by pressing MENU4 (F3 in xine-ui, F4 in gxine). An OSD in the +top left hand corner will notify you of the status of the recording. Pressing MENU4 again will resume recording. Have fun. diff -r 6da3735ae176cc2b30af1dfe4fbd5c96a93a2260 -r 7fd3df5d67d667238737563dafa4b72b641263df include/xine.h.in --- a/include/xine.h.in Sat Aug 18 17:46:18 2007 -0400 +++ b/include/xine.h.in Sat Aug 18 17:30:57 2007 -0400 @@ -1564,6 +1564,16 @@ int xine_config_lookup_entry (xine_t *s */ void xine_config_update_entry (xine_t *self, const xine_cfg_entry_t *entry) XINE_PROTECTED; + +/* + * translation of old configuration entry names + */ +typedef struct { + const char *old; + const char *new; +} xine_config_entry_translation_t; + +void xine_config_set_translation_user (const xine_config_entry_translation_t *) XINE_PROTECTED; /* * load/save config data from/to afile (e.g. $HOME/.xine/config) diff -r 6da3735ae176cc2b30af1dfe4fbd5c96a93a2260 -r 7fd3df5d67d667238737563dafa4b72b641263df src/combined/flac_decoder.c --- a/src/combined/flac_decoder.c Sat Aug 18 17:46:18 2007 -0400 +++ b/src/combined/flac_decoder.c Sat Aug 18 17:30:57 2007 -0400 @@ -248,7 +248,7 @@ flac_decode_data (audio_decoder_t *this_ if (!this->output_open) { - this->output_open = this->stream->audio_out->open ( + this->output_open = (this->stream->audio_out->open) ( this->stream->audio_out, this->stream, bits_per_sample, diff -r 6da3735ae176cc2b30af1dfe4fbd5c96a93a2260 -r 7fd3df5d67d667238737563dafa4b72b641263df src/combined/nsf_decoder.c --- a/src/combined/nsf_decoder.c Sat Aug 18 17:46:18 2007 -0400 +++ b/src/combined/nsf_decoder.c Sat Aug 18 17:30:57 2007 -0400 @@ -129,7 +129,7 @@ static void nsf_decode_data (audio_decod /* if the audio output is not open yet, open the audio output */ if (!this->output_open) { - this->output_open = this->stream->audio_out->open( + this->output_open = (this->stream->audio_out->open) ( this->stream->audio_out, this->stream, this->bits_per_sample, diff -r 6da3735ae176cc2b30af1dfe4fbd5c96a93a2260 -r 7fd3df5d67d667238737563dafa4b72b641263df src/combined/wavpack_decoder.c --- a/src/combined/wavpack_decoder.c Sat Aug 18 17:46:18 2007 -0400 +++ b/src/combined/wavpack_decoder.c Sat Aug 18 17:30:57 2007 -0400 @@ -173,7 +173,7 @@ static void wavpack_decode_data (audio_d if (!this->output_open) { - this->output_open = this->stream->audio_out->open ( + this->output_open = (this->stream->audio_out->open) ( this->stream->audio_out, this->stream, this->bits_per_sample, diff -r 6da3735ae176cc2b30af1dfe4fbd5c96a93a2260 -r 7fd3df5d67d667238737563dafa4b72b641263df src/combined/xine_speex_decoder.c --- a/src/combined/xine_speex_decoder.c Sat Aug 18 17:46:18 2007 -0400 +++ b/src/combined/xine_speex_decoder.c Sat Aug 18 17:30:57 2007 -0400 @@ -272,7 +272,7 @@ static void speex_decode_data (audio_dec if (!this->output_open) { this->output_open = - this->stream->audio_out->open(this->stream->audio_out, + (this->stream->audio_out->open) (this->stream->audio_out, this->stream, 16, this->rate, diff -r 6da3735ae176cc2b30af1dfe4fbd5c96a93a2260 -r 7fd3df5d67d667238737563dafa4b72b641263df src/combined/xine_theora_decoder.c --- a/src/combined/xine_theora_decoder.c Sat Aug 18 17:46:18 2007 -0400 +++ b/src/combined/xine_theora_decoder.c Sat Aug 18 17:30:57 2007 -0400 @@ -338,7 +338,7 @@ static video_decoder_t *theora_open_plug theora_comment_init (&this->t_comment); theora_info_init (&this->t_info); - stream->video_out->open (stream->video_out, stream); + (stream->video_out->open) (stream->video_out, stream); return &this->theora_decoder; diff -r 6da3735ae176cc2b30af1dfe4fbd5c96a93a2260 -r 7fd3df5d67d667238737563dafa4b72b641263df src/combined/xine_vorbis_decoder.c --- a/src/combined/xine_vorbis_decoder.c Sat Aug 18 17:46:18 2007 -0400 +++ b/src/combined/xine_vorbis_decoder.c Sat Aug 18 17:30:57 2007 -0400 @@ -177,7 +177,7 @@ static void vorbis_decode_data (audio_de 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->output_open = (this->stream->audio_out->open) (this->stream->audio_out, this->stream, 16, this->vi.rate, diff -r 6da3735ae176cc2b30af1dfe4fbd5c96a93a2260 -r 7fd3df5d67d667238737563dafa4b72b641263df src/dxr3/dxr3_decode_video.c --- a/src/dxr3/dxr3_decode_video.c Sat Aug 18 17:46:18 2007 -0400 +++ b/src/dxr3/dxr3_decode_video.c Sat Aug 18 17:30:57 2007 -0400 @@ -294,7 +294,7 @@ static video_decoder_t *dxr3_open_plugin /* the dxr3 needs a longer prebuffering to have time for its internal decoding */ this->stream->metronom->set_option(this->stream->metronom, METRONOM_PREBUFFER, 90000); - stream->video_out->open(stream->video_out, stream); + (stream->video_out->open) (stream->video_out, stream); class->instance = 1; diff -r 6da3735ae176cc2b30af1dfe4fbd5c96a93a2260 -r 7fd3df5d67d667238737563dafa4b72b641263df src/input/input_dvd.c --- a/src/input/input_dvd.c Sat Aug 18 17:46:18 2007 -0400 +++ b/src/input/input_dvd.c Sat Aug 18 17:30:57 2007 -0400 @@ -1471,14 +1471,14 @@ static int dvd_plugin_open (input_plugin dvd_input_plugin_t *this = (dvd_input_plugin_t*)this_gen; dvd_input_class_t *class = (dvd_input_class_t*)this_gen->input_class; - char *locator; + char *locator, *locator_orig; char *title_part; xine_cfg_entry_t region_entry, lang_entry, cfg_entry; trace_print("Called\n"); /* we already checked the "dvd:/" MRL before */ - locator = strdup (this->mrl + (sizeof("dvd:") - 1)); + locator_orig = locator = strdup (this->mrl + (sizeof("dvd:") - 1)); /* FIXME: call a generic xine-lib MRL parser here to pre-parse * the MRL for ?title=<title>&part=<part> stuff and to expand @@ -1494,11 +1494,11 @@ static int dvd_plugin_open (input_plugin _x_message(this->stream, XINE_MSG_READ_ERROR, /* FIXME: see FIXME in dvd_parse_try_open() */ (strlen(locator) && !(locator[0] == '/' && locator[1] == '\0')) ? locator : class->dvd_device, NULL); - free (locator); + free (locator_orig); return 0; } - free (locator); + free (locator_orig); dvdnav_get_title_string(this->dvdnav, &this->dvd_name); if(this->dvd_name) diff -r 6da3735ae176cc2b30af1dfe4fbd5c96a93a2260 -r 7fd3df5d67d667238737563dafa4b72b641263df src/libffmpeg/ff_audio_decoder.c --- a/src/libffmpeg/ff_audio_decoder.c Sat Aug 18 17:46:18 2007 -0400 +++ b/src/libffmpeg/ff_audio_decoder.c Sat Aug 18 17:30:57 2007 -0400 @@ -273,7 +273,7 @@ static void ff_audio_decode_data (audio_ } if (!this->output_open) { - this->output_open = this->stream->audio_out->open(this->stream->audio_out, + this->output_open = (this->stream->audio_out->open) (this->stream->audio_out, this->stream, this->audio_bits, this->audio_sample_rate, _x_ao_channels2mode(this->audio_channels)); } diff -r 6da3735ae176cc2b30af1dfe4fbd5c96a93a2260 -r 7fd3df5d67d667238737563dafa4b72b641263df src/libffmpeg/ff_dvaudio_decoder.c --- a/src/libffmpeg/ff_dvaudio_decoder.c Sat Aug 18 17:46:18 2007 -0400 +++ b/src/libffmpeg/ff_dvaudio_decoder.c Sat Aug 18 17:30:57 2007 -0400 @@ -265,7 +265,7 @@ static void dvaudio_decode_data (audio_d if (this->decoder_ok && !(buf->decoder_flags & (BUF_FLAG_HEADER|BUF_FLAG_SPECIAL))) { if (!this->output_open) { - this->output_open = this->stream->audio_out->open(this->stream->audio_out, + this->output_open = (this->stream->audio_out->open) (this->stream->audio_out, this->stream, this->audio_bits, this->audio_sample_rate, _x_ao_channels2mode(this->audio_channels)); } diff -r 6da3735ae176cc2b30af1dfe4fbd5c96a93a2260 -r 7fd3df5d67d667238737563dafa4b72b641263df src/libffmpeg/ff_video_decoder.c --- a/src/libffmpeg/ff_video_decoder.c Sat Aug 18 17:46:18 2007 -0400 +++ b/src/libffmpeg/ff_video_decoder.c Sat Aug 18 17:30:57 2007 -0400 @@ -384,7 +384,7 @@ static void init_video_codec (ff_video_d set_stream_info(this); } - this->stream->video_out->open (this->stream->video_out, this->stream); + (this->stream->video_out->open) (this->stream->video_out, this->stream); this->skipframes = 0; diff -r 6da3735ae176cc2b30af1dfe4fbd5c96a93a2260 -r 7fd3df5d67d667238737563dafa4b72b641263df src/libmpeg2/xine_mpeg2_decoder.c --- a/src/libmpeg2/xine_mpeg2_decoder.c Sat Aug 18 17:46:18 2007 -0400 +++ b/src/libmpeg2/xine_mpeg2_decoder.c Sat Aug 18 17:30:57 2007 -0400 @@ -131,7 +131,7 @@ static video_decoder_t *open_plugin (vid this->mpeg2.stream = stream; mpeg2_init (&this->mpeg2, stream->video_out); - stream->video_out->open(stream->video_out, stream); + (stream->video_out->open) (stream->video_out, stream); this->mpeg2.force_aspect = this->mpeg2.force_pan_scan = 0; return &this->video_decoder; diff -r 6da3735ae176cc2b30af1dfe4fbd5c96a93a2260 -r 7fd3df5d67d667238737563dafa4b72b641263df src/libmpeg2new/xine_mpeg2new_decoder.c --- a/src/libmpeg2new/xine_mpeg2new_decoder.c Sat Aug 18 17:46:18 2007 -0400 +++ b/src/libmpeg2new/xine_mpeg2new_decoder.c Sat Aug 18 17:30:57 2007 -0400 @@ -465,7 +465,7 @@ static video_decoder_t *open_plugin (vid this->mpeg2dec = mpeg2_init (); mpeg2_custom_fbuf (this->mpeg2dec, 1); /* <- Force libmpeg2 to use xine frame buffers. */ - stream->video_out->open(stream->video_out, stream); + (stream->video_out->open) (stream->video_out, stream); this->force_aspect = this->force_pan_scan = 0; for(n=0;n<30;n++) this->img_state[n].id=0; diff -r 6da3735ae176cc2b30af1dfe4fbd5c96a93a2260 -r 7fd3df5d67d667238737563dafa4b72b641263df src/libreal/xine_real_audio_decoder.c --- a/src/libreal/xine_real_audio_decoder.c Sat Aug 18 17:46:18 2007 -0400 +++ b/src/libreal/xine_real_audio_decoder.c Sat Aug 18 17:30:57 2007 -0400 @@ -378,7 +378,7 @@ static int init_codec (realdec_decoder_t return 0; } - this->stream->audio_out->open(this->stream->audio_out, + (this->stream->audio_out->open) (this->stream->audio_out, this->stream, bits_per_sample, samples_per_sec, diff -r 6da3735ae176cc2b30af1dfe4fbd5c96a93a2260 -r 7fd3df5d67d667238737563dafa4b72b641263df src/libreal/xine_real_video_decoder.c --- a/src/libreal/xine_real_video_decoder.c Sat Aug 18 17:46:18 2007 -0400 +++ b/src/libreal/xine_real_video_decoder.c Sat Aug 18 17:30:57 2007 -0400 @@ -302,7 +302,7 @@ static int init_codec (realdec_decoder_t this->rvyuv_custom_message (&cmsg_data, this->context); } - this->stream->video_out->open(this->stream->video_out, this->stream); + (this->stream->video_out->open) (this->stream->video_out, this->stream); this->frame_size = this->width * this->height; this->frame_buffer = xine_xmalloc (this->width * this->height * 3 / 2); diff -r 6da3735ae176cc2b30af1dfe4fbd5c96a93a2260 -r 7fd3df5d67d667238737563dafa4b72b641263df src/libw32dll/qt_decoder.c --- a/src/libw32dll/qt_decoder.c Sat Aug 18 17:46:18 2007 -0400 +++ b/src/libw32dll/qt_decoder.c Sat Aug 18 17:30:57 2007 -0400 @@ -405,7 +405,7 @@ static void qta_init_driver (qta_decoder this->frame_size = this->wave.nChannels * this->wave.wBitsPerSample / 8; - this->output_open = this->stream->audio_out->open(this->stream->audio_out, + this->output_open = (this->stream->audio_out->open) (this->stream->audio_out, this->stream, this->wave.wBitsPerSample, this->wave.nSamplesPerSec, @@ -936,7 +936,7 @@ static void qtv_init_driver (qtv_decoder this->codec_initialized = 1; - this->stream->video_out->open (this->stream->video_out, this->stream); + (this->stream->video_out->open) (this->stream->video_out, this->stream); pthread_mutex_unlock(&win32_codec_mutex); diff -r 6da3735ae176cc2b30af1dfe4fbd5c96a93a2260 -r 7fd3df5d67d667238737563dafa4b72b641263df src/libw32dll/w32codec.c --- a/src/libw32dll/w32codec.c Sat Aug 18 17:46:18 2007 -0400 +++ b/src/libw32dll/w32codec.c Sat Aug 18 17:30:57 2007 -0400 @@ -657,7 +657,7 @@ static void w32v_init_codec (w32v_decode this->bufsize = VIDEOBUFSIZE; this->buf = malloc(this->bufsize); - this->stream->video_out->open (this->stream->video_out, this->stream); + (this->stream->video_out->open) (this->stream->video_out, this->stream); this->outfmt = outfmt; this->decoder_ok = 1; @@ -752,7 +752,7 @@ static void w32v_init_ds_dmo_codec (w32v this->bufsize = VIDEOBUFSIZE; this->buf = malloc(this->bufsize); - this->stream->video_out->open (this->stream->video_out, this->stream); + (this->stream->video_out->open) (this->stream->video_out, this->stream); this->outfmt = outfmt; this->decoder_ok = 1; @@ -1181,7 +1181,7 @@ static int w32a_init_audio (w32a_decoder if (this->output_open) this->stream->audio_out->close (this->stream->audio_out, this->stream); - this->output_open = this->stream->audio_out->open( this->stream->audio_out, this->stream, + this->output_open = (this->stream->audio_out->open) ( this->stream->audio_out, this->stream, 16, in_fmt->nSamplesPerSec, _x_ao_channels2mode(in_fmt->nChannels)); if (!this->output_open) { diff -r 6da3735ae176cc2b30af1dfe4fbd5c96a93a2260 -r 7fd3df5d67d667238737563dafa4b72b641263df src/libxineadec/fooaudio.c --- a/src/libxineadec/fooaudio.c Sat Aug 18 17:46:18 2007 -0400 +++ b/src/libxineadec/fooaudio.c Sat Aug 18 17:30:57 2007 -0400 @@ -110,7 +110,7 @@ static void fooaudio_decode_data (audio_ /* if the audio output is not open yet, open the audio output */ #warning: Audio output is hardcoded to mono 16-bit PCM if (!this->output_open) { - this->output_open = this->stream->audio_out->open( + this->output_open = (this->stream->audio_out->open) ( this->stream->audio_out, this->stream, /* this->bits_per_sample, */ diff -r 6da3735ae176cc2b30af1dfe4fbd5c96a93a2260 -r 7fd3df5d67d667238737563dafa4b72b641263df src/libxineadec/gsm610.c --- a/src/libxineadec/gsm610.c Sat Aug 18 17:46:18 2007 -0400 +++ b/src/libxineadec/gsm610.c Sat Aug 18 17:30:57 2007 -0400 @@ -118,7 +118,7 @@ static void gsm610_decode_data (audio_de this->gsm_state = gsm_create(); this->buf_type = buf->type; - this->output_open = this->stream->audio_out->open(this->stream->audio_out, + this->output_open = (this->stream->audio_out->open) (this->stream->audio_out, this->stream, GSM610_SAMPLE_SIZE, this->sample_rate, AO_CAP_MODE_MONO); } diff -r 6da3735ae176cc2b30af1dfe4fbd5c96a93a2260 -r 7fd3df5d67d667238737563dafa4b72b641263df src/libxineadec/xine_a52_decoder.c --- a/src/libxineadec/xine_a52_decoder.c Sat Aug 18 17:46:18 2007 -0400 +++ b/src/libxineadec/xine_a52_decoder.c Sat Aug 18 17:30:57 2007 -0400 @@ -275,7 +275,7 @@ static void a52dec_decode_frame (a52dec_ this->stream->audio_out->close (this->stream->audio_out, this->stream); - this->output_open = this->stream->audio_out->open (this->stream->audio_out, + this->output_open = (this->stream->audio_out->open) (this->stream->audio_out, this->stream, 16, this->a52_sample_rate, output_mode) ; @@ -373,7 +373,7 @@ static void a52dec_decode_frame (a52dec_ a52_syncinfo (this->frame_buffer, &flags, &sample_rate, &bit_rate); - this->output_open = this->stream->audio_out->open (this->stream->audio_out, + this->output_open = (this->stream->audio_out->open) (this->stream->audio_out, this->stream, 16, sample_rate, AO_CAP_MODE_A52) ; diff -r 6da3735ae176cc2b30af1dfe4fbd5c96a93a2260 -r 7fd3df5d67d667238737563dafa4b72b641263df src/libxineadec/xine_dts_decoder.c --- a/src/libxineadec/xine_dts_decoder.c Sat Aug 18 17:46:18 2007 -0400 +++ b/src/libxineadec/xine_dts_decoder.c Sat Aug 18 17:30:57 2007 -0400 @@ -147,7 +147,7 @@ static void dts_decode_frame (dts_decode if(this->bypass_mode) { /* SPDIF digital output */ if (!this->output_open) { - this->output_open = (this->stream->audio_out->open (this->stream->audio_out, this->stream, + this->output_open = ((this->stream->audio_out->open) (this->stream->audio_out, this->stream, 16, this->dts_sample_rate, AO_CAP_MODE_AC5)); } @@ -243,7 +243,7 @@ static void dts_decode_frame (dts_decode output_mode = this->ao_flags_map[dts_output_flags & DTS_CHANNEL_MASK]; if (!this->output_open) { - this->output_open = this->stream->audio_out->open (this->stream->audio_out, this->stream, + this->output_open = (this->stream->audio_out->open) (this->stream->audio_out, this->stream, 16, this->dts_sample_rate, output_mode); } diff -r 6da3735ae176cc2b30af1dfe4fbd5c96a93a2260 -r 7fd3df5d67d667238737563dafa4b72b641263df src/libxineadec/xine_faad_decoder.c --- a/src/libxineadec/xine_faad_decoder.c Sat Aug 18 17:46:18 2007 -0400 +++ b/src/libxineadec/xine_faad_decoder.c Sat Aug 18 17:30:57 2007 -0400 @@ -200,7 +200,7 @@ static int faad_open_output( faad_decode break; } - this->output_open = this->stream->audio_out->open (this->stream->audio_out, + this->output_open = (this->stream->audio_out->open) (this->stream->audio_out, this->stream, this->bits_per_sample, this->rate, diff -r 6da3735ae176cc2b30af1dfe4fbd5c96a93a2260 -r 7fd3df5d67d667238737563dafa4b72b641263df src/libxineadec/xine_lpcm_decoder.c --- a/src/libxineadec/xine_lpcm_decoder.c Sat Aug 18 17:46:18 2007 -0400 +++ b/src/libxineadec/xine_lpcm_decoder.c Sat Aug 18 17:30:57 2007 -0400 @@ -136,12 +136,12 @@ static void lpcm_decode_data (audio_deco /* force 24-bit samples into 16 bits for now */ if (this->bits_per_sample == 24) - this->output_open = this->stream->audio_out->open (this->stream->audio_out, this->stream, + this->output_open = (this->stream->audio_out->open) (this->stream->audio_out, this->stream, 16, this->rate, this->ao_cap_mode) ; else - this->output_open = this->stream->audio_out->open (this->stream->audio_out, this->stream, + this->output_open = (this->stream->audio_out->open) (this->stream->audio_out, this->stream, this->bits_per_sample, this->rate, this->ao_cap_mode) ; diff -r 6da3735ae176cc2b30af1dfe4fbd5c96a93a2260 -r 7fd3df5d67d667238737563dafa4b72b641263df src/libxineadec/xine_mad_decoder.c --- a/src/libxineadec/xine_mad_decoder.c Sat Aug 18 17:46:18 2007 -0400 +++ b/src/libxineadec/xine_mad_decoder.c Sat Aug 18 17:30:57 2007 -0400 @@ -234,7 +234,7 @@ static void mad_decode_data (audio_decod this->output_open = 0; } if (!this->output_open) { - this->output_open = this->xstream->audio_out->open(this->xstream->audio_out, + this->output_open = (this->xstream->audio_out->open) (this->xstream->audio_out, this->xstream, 16, this->frame.header.samplerate, mode) ; diff -r 6da3735ae176cc2b30af1dfe4fbd5c96a93a2260 -r 7fd3df5d67d667238737563dafa4b72b641263df src/libxineadec/xine_musepack_decoder.c --- a/src/libxineadec/xine_musepack_decoder.c Sat Aug 18 17:46:18 2007 -0400 +++ b/src/libxineadec/xine_musepack_decoder.c Sat Aug 18 17:30:57 2007 -0400 @@ -281,7 +281,7 @@ static void mpc_decode_data (audio_decod /* if the audio output is not open yet, open the audio output */ if (!this->output_open) { - this->output_open = this->stream->audio_out->open( + this->output_open = (this->stream->audio_out->open) ( this->stream->audio_out, this->stream, this->bits_per_sample, diff -r 6da3735ae176cc2b30af1dfe4fbd5c96a93a2260 -r 7fd3df5d67d667238737563dafa4b72b641263df src/libxinevdec/bitplane.c --- a/src/libxinevdec/bitplane.c Sat Aug 18 17:46:18 2007 -0400 +++ b/src/libxinevdec/bitplane.c Sat Aug 18 17:30:57 2007 -0400 @@ -1146,7 +1146,7 @@ static void bitplane_decode_data (video_ } if (buf->decoder_flags & BUF_FLAG_STDHEADER) { /* need to initialize */ - this->stream->video_out->open (this->stream->video_out, this->stream); + (this->stream->video_out->open) (this->stream->video_out, this->stream); bih = (xine_bmiheader *) buf->content; this->width = (bih->biWidth + 15) & ~0x0f; @@ -1198,7 +1198,7 @@ static void bitplane_decode_data (video_ init_yuv_planes(&this->yuv_planes, this->width, this->height); init_yuv_planes(&this->yuv_planes_hist, this->width, this->height); - this->stream->video_out->open (this->stream->video_out, this->stream); + (this->stream->video_out->open) (this->stream->video_out, this->stream); this->decoder_ok = 1; /* load the stream/meta info */ diff -r 6da3735ae176cc2b30af1dfe4fbd5c96a93a2260 -r 7fd3df5d67d667238737563dafa4b72b641263df src/libxinevdec/foovideo.c --- a/src/libxinevdec/foovideo.c Sat Aug 18 17:46:18 2007 -0400 +++ b/src/libxinevdec/foovideo.c Sat Aug 18 17:30:57 2007 -0400 @@ -98,7 +98,7 @@ static void foovideo_decode_data (video_ } if (buf->decoder_flags & BUF_FLAG_STDHEADER) { /* need to initialize */ - this->stream->video_out->open (this->stream->video_out, this->stream); + (this->stream->video_out->open) (this->stream->video_out, this->stream); if(this->buf) free(this->buf); diff -r 6da3735ae176cc2b30af1dfe4fbd5c96a93a2260 -r 7fd3df5d67d667238737563dafa4b72b641263df src/libxinevdec/gdkpixbuf.c --- a/src/libxinevdec/gdkpixbuf.c Sat Aug 18 17:46:18 2007 -0400 +++ b/src/libxinevdec/gdkpixbuf.c Sat Aug 18 17:30:57 2007 -0400 @@ -74,7 +74,7 @@ static void image_decode_data (video_dec if (!this->video_open) { lprintf("opening video\n"); - this->stream->video_out->open(this->stream->video_out, this->stream); + (this->stream->video_out->open) (this->stream->video_out, this->stream); this->video_open = 1; } diff -r 6da3735ae176cc2b30af1dfe4fbd5c96a93a2260 -r 7fd3df5d67d667238737563dafa4b72b641263df src/libxinevdec/image.c --- a/src/libxinevdec/image.c Sat Aug 18 17:46:18 2007 -0400 +++ b/src/libxinevdec/image.c Sat Aug 18 17:30:57 2007 -0400 @@ -81,7 +81,7 @@ static void image_decode_data (video_dec if (!this->video_open) { lprintf("opening video\n"); - this->stream->video_out->open(this->stream->video_out, this->stream); + (this->stream->video_out->open) (this->stream->video_out, this->stream); this->video_open = 1; } diff -r 6da3735ae176cc2b30af1dfe4fbd5c96a93a2260 -r 7fd3df5d67d667238737563dafa4b72b641263df src/libxinevdec/rgb.c --- a/src/libxinevdec/rgb.c Sat Aug 18 17:46:18 2007 -0400 +++ b/src/libxinevdec/rgb.c Sat Aug 18 17:30:57 2007 -0400 @@ -121,7 +121,7 @@ static void rgb_decode_data (video_decod } if (buf->decoder_flags & BUF_FLAG_STDHEADER) { /* need to initialize */ - this->stream->video_out->open (this->stream->video_out, this->stream); + (this->stream->video_out->open) (this->stream->video_out, this->stream); bih = (xine_bmiheader *) buf->content; this->width = (bih->biWidth + 3) & ~0x03; @@ -152,7 +152,7 @@ static void rgb_decode_data (video_decod init_yuv_planes(&this->yuv_planes, this->width, this->height); - this->stream->video_out->open (this->stream->video_out, this->stream); + (this->stream->video_out->open) (this->stream->video_out, this->stream); this->decoder_ok = 1; /* load the stream/meta info */ diff -r 6da3735ae176cc2b30af1dfe4fbd5c96a93a2260 -r 7fd3df5d67d667238737563dafa4b72b641263df src/libxinevdec/yuv.c --- a/src/libxinevdec/yuv.c Sat Aug 18 17:46:18 2007 -0400 +++ b/src/libxinevdec/yuv.c Sat Aug 18 17:30:57 2007 -0400 @@ -92,7 +92,7 @@ static void yuv_decode_data (video_decod } if (buf->decoder_flags & BUF_FLAG_STDHEADER) { /* need to initialize */ - this->stream->video_out->open (this->stream->video_out, this->stream); + (this->stream->video_out->open) (this->stream->video_out, this->stream); bih = (xine_bmiheader *) buf->content; this->width = (bih->biWidth + 3) & ~0x03; diff -r 6da3735ae176cc2b30af1dfe4fbd5c96a93a2260 -r 7fd3df5d67d667238737563dafa4b72b641263df src/post/audio/stretch.c --- a/src/post/audio/stretch.c Sat Aug 18 17:46:18 2007 -0400 +++ b/src/post/audio/stretch.c Sat Aug 18 17:30:57 2007 -0400 @@ -225,6 +225,8 @@ struct post_plugin_stretch_s { int frames_per_frag; int frames_per_outfrag; int num_frames; /* current # of frames on audiofrag */ + + int16_t last_sample[RESAMPLE_MAX_CHANNELS]; int64_t pts; /* pts for audiofrag */ @@ -305,7 +307,7 @@ static int stretch_port_open(xine_audio_ /* force updating on stretch_port_put_buffer */ this->params_changed = 1; - return port->original_port->open(port->original_port, stream, bits, rate, mode); + return (port->original_port->open) (port->original_port, stream, bits, rate, mode); } static void stretch_port_close(xine_audio_port_t *port_gen, xine_stream_t *stream ) { @@ -353,12 +355,16 @@ static void stretch_process_fragment( po if( !this->params.preserve_pitch ) { if( this->channels == 2 ) - _x_audio_out_resample_stereo(this->audiofrag, num_frames_in, + _x_audio_out_resample_stereo(this->last_sample, this->audiofrag, num_frames_in, this->outfrag, num_frames_out); else if( this->channels == 1 ) - _x_audio_out_resample_mono(this->audiofrag, num_frames_in, + _x_audio_out_resample_mono(this->last_sample, this->audiofrag, num_frames_in, this->outfrag, num_frames_out); } else { + if (this->channels == 2) + memcpy (this->last_sample, &this->audiofrag[(num_frames_in - 1) * 2], 2 * sizeof (this->last_sample[0])); + else if (this->channels == 1) + memcpy (this->last_sample, &this->audiofrag[num_frames_in - 1], sizeof (this->last_sample[0])); if( num_frames_in > num_frames_out ) { /* diff -r 6da3735ae176cc2b30af1dfe4fbd5c96a93a2260 -r 7fd3df5d67d667238737563dafa4b72b641263df src/post/audio/upmix.c --- a/src/post/audio/upmix.c Sat Aug 18 17:46:18 2007 -0400 +++ b/src/post/audio/upmix.c Sat Aug 18 17:30:57 2007 -0400 @@ -203,7 +203,7 @@ static int upmix_port_open(xine_audio_po pthread_mutex_unlock (&this->lock); - return port->original_port->open(port->original_port, stream, bits, rate, mode ); + return (port->original_port->open) (port->original_port, stream, bits, rate, mode ); } #if 0 diff -r 6da3735ae176cc2b30af1dfe4fbd5c96a93a2260 -r 7fd3df5d67d667238737563dafa4b72b641263df src/post/audio/upmix_mono.c --- a/src/post/audio/upmix_mono.c Sat Aug 18 17:46:18 2007 -0400 +++ b/src/post/audio/upmix_mono.c Sat Aug 18 17:30:57 2007 -0400 @@ -159,7 +159,7 @@ static int upmix_mono_port_open(xine_aud } } - return port->original_port->open(port->original_port, stream, bits, rate, mode); + return (port->original_port->open) (port->original_port, stream, bits, rate, mode); } static void upmix_mono_port_put_buffer(xine_audio_port_t *port_gen, diff -r 6da3735ae176cc2b30af1dfe4fbd5c96a93a2260 -r 7fd3df5d67d667238737563dafa4b72b641263df src/post/audio/volnorm.c --- a/src/post/audio/volnorm.c Sat Aug 18 17:46:18 2007 -0400 +++ b/src/post/audio/volnorm.c Sat Aug 18 17:30:57 2007 -0400 @@ -184,7 +184,7 @@ static int volnorm_port_open(xine_audio_ port->rate = rate; port->mode = mode; - return port->original_port->open(port->original_port, stream, bits, rate, mode ); + return (port->original_port->open) (port->original_port, stream, bits, rate, mode ); } static void volnorm_port_close(xine_audio_port_t *port_gen, xine_stream_t *stream ) { diff -r 6da3735ae176cc2b30af1dfe4fbd5c96a93a2260 -r 7fd3df5d67d667238737563dafa4b72b641263df src/post/deinterlace/xine_plugin.c --- a/src/post/deinterlace/xine_plugin.c Sat Aug 18 17:46:18 2007 -0400 +++ b/src/post/deinterlace/xine_plugin.c Sat Aug 18 17:30:57 2007 -0400 @@ -493,7 +493,7 @@ static void deinterlace_open(xine_video_ _x_post_rewire(&this->post); _x_post_inc_usage(port); port->stream = stream; - port->original_port->open(port->original_port, stream); + (port->original_port->open) (port->original_port, stream); this->vo_deinterlace_enabled = !this->cur_method; port->original_port->set_property(port->original_port, XINE_PARAM_VO_DEINTERLACE, diff -r 6da3735ae176cc2b30af1dfe4fbd5c96a93a2260 -r 7fd3df5d67d667238737563dafa4b72b641263df src/post/goom/xine_goom.c --- a/src/post/goom/xine_goom.c Sat Aug 18 17:46:18 2007 -0400 +++ b/src/post/goom/xine_goom.c Sat Aug 18 17:30:57 2007 -0400 @@ -82,19 +82,23 @@ struct post_plugin_goom_s { /* goom context */ PluginInfo *goom; - int data_idx; + int data_idx; gint16 data [2][NUMSAMPLES]; audio_buffer_t buf; /* dummy buffer just to hold a copy of audio data */ int channels; int sample_rate; - int sample_counter; int samples_per_frame; int width, height; int width_back, height_back; double ratio; int fps; int csc_method; + + + int do_samples_skip; /* true = skipping samples, false reading samples*/ + int left_to_read; /* data to read before switching modes*/ + yuv_planes_t yuv; @@ -282,7 +286,6 @@ static post_plugin_t *goom_open_plugin(p this->ratio = (double)this->width_back/(double)this->height_back; - this->sample_counter = 0; this->buf.mem = NULL; this->buf.mem_size = 0; @@ -362,7 +365,7 @@ static int goom_rewire_video(xine_post_o return 0; /* register our stream at the new output port */ old_port->close(old_port, XINE_ANON_STREAM); - new_port->open(new_port, XINE_ANON_STREAM); + (new_port->open) (new_port, XINE_ANON_STREAM); /* reconnect ourselves */ this->vo_port = new_port; return 1; @@ -386,14 +389,16 @@ static int goom_port_open(xine_audio_por this->sample_rate = rate; this->samples_per_frame = rate / this->fps; this->data_idx = 0; - this->sample_counter = 0; init_yuv_planes(&this->yuv, this->width, this->height); this->skip_frame = 0; - - this->vo_port->open(this->vo_port, XINE_ANON_STREAM); + + this->do_samples_skip = 0; + this->left_to_read = NUMSAMPLES; + + (this->vo_port->open) (this->vo_port, XINE_ANON_STREAM); this->metronom->set_master(this->metronom, stream->metronom); - return port->original_port->open(port->original_port, stream, bits, rate, mode ); + return (port->original_port->open) (port->original_port, stream, bits, rate, mode ); } static void goom_port_close(xine_audio_port_t *port_gen, xine_stream_t *stream ) { @@ -422,11 +427,12 @@ static void goom_port_put_buffer (xine_a uint8_t *goom_frame, *goom_frame_end; int16_t *data; int8_t *data8; - int samples_used = 0; int64_t pts = buf->vpts; int i, j; uint8_t *dest_ptr; int width, height; + + int current_sample = 0; /* make a copy of buf data for private use */ if( this->buf.mem_size < buf->mem_size ) { @@ -444,59 +450,73 @@ static void goom_port_put_buffer (xine_a * to the fifo of free audio buffers. just use our private copy instead. */ buf = &this->buf; - - this->sample_counter += buf->num_frames; j = (this->channels >= 2) ? 1 : 0; - do { - + + while (current_sample < buf->num_frames) { + + if (this->do_samples_skip) { + if (current_sample + this->left_to_read > buf->num_frames) { + this->left_to_read -= (buf->num_frames-current_sample); + break; + } else { + current_sample+=this->left_to_read; + this->left_to_read = NUMSAMPLES; + this->do_samples_skip = 0; + + } + } else { + if( port->bits == 8 ) { data8 = (int8_t *)buf->mem; - data8 += samples_used * this->channels; + data8 += current_sample * this->channels; /* scale 8 bit data to 16 bits and convert to signed as well */ - for( i = samples_used; i < buf->num_frames && this->data_idx < NUMSAMPLES; - i++, this->data_idx++, data8 += this->channels ) { + for ( i=current_sample ; this->data_idx < NUMSAMPLES && i < buf->num_frames; + i++, this->data_idx++,data8 += this->channels) { + this->data[0][this->data_idx] = ((int16_t)data8[0] << 8) - 0x8000; this->data[1][this->data_idx] = ((int16_t)data8[j] << 8) - 0x8000; } } else { data = buf->mem; - data += samples_used * this->channels; - - for( i = samples_used; i < buf->num_frames && this->data_idx < NUMSAMPLES; - i++, this->data_idx++, data += this->channels ) { + data += current_sample * this->channels; + + for ( i=current_sample ; this->data_idx < NUMSAMPLES && i < buf->num_frames; + i++, this->data_idx++,data += this->channels) { + this->data[0][this->data_idx] = data[0]; this->data[1][this->data_idx] = data[j]; } } - - if( this->sample_counter >= this->samples_per_frame ) { - - samples_used += this->samples_per_frame; + + if (this->data_idx < NUMSAMPLES) { + this->left_to_read = NUMSAMPLES - this->data_idx; + break; + } else { + _x_assert(this->data_idx == NUMSAMPLES); + this->data_idx = 0; + + if (this->samples_per_frame > NUMSAMPLES) { + current_sample += NUMSAMPLES; + this->do_samples_skip = 1; + this->left_to_read = this->samples_per_frame - NUMSAMPLES; + } else { + current_sample += this->samples_per_frame; + this->left_to_read = NUMSAMPLES; + } frame = this->vo_port->get_frame (this->vo_port, this->width_back, this->height_back, - this->ratio, XINE_IMGFMT_YUY2, - VO_BOTH_FIELDS); + this->ratio, XINE_IMGFMT_YUY2, + VO_BOTH_FIELDS); frame->extra_info->invalid = 1; - /* frame is marked as bad if we don't have enough samples for - * updating the viz plugin (calculations may be skipped). - * we must keep the framerate though. */ - if( this->data_idx == NUMSAMPLES ) { - frame->bad_frame = 0; - this->data_idx = 0; - } else { - frame->bad_frame = 1; - } frame->duration = 90000 * this->samples_per_frame / this->sample_rate; frame->pts = pts; this->metronom->got_video_frame(this->metronom, frame); - this->sample_counter -= this->samples_per_frame; - - if (!this->skip_frame && !frame->bad_frame) { + if (!this->skip_frame) { /* Try to be fast */ goom_frame = (uint8_t *)goom_update (this->goom, this->data, 0, 0, NULL, NULL); @@ -561,21 +581,25 @@ static void goom_port_put_buffer (xine_a } else { frame->bad_frame = 1; frame->draw(frame, XINE_ANON_STREAM); - this->skip_frame--; + + _x_assert(this->skip_frame>0); + this->skip_frame--; } + frame->free(frame); width = this->width; height = this->height; if ((width != this->width_back) || (height != this->height_back)) { - goom_close(this->goom); - this->goom = goom_init (this->width, this->height); - this->width_back = width; - this->height_back = height; - this->ratio = (double)width/(double)height; - free_yuv_planes(&this->yuv); - init_yuv_planes(&this->yuv, this->width, this->height); - } + goom_close(this->goom); + this->goom = goom_init (this->width, this->height); + this->width_back = width; + this->height_back = height; + this->ratio = (double)width/(double)height; + free_yuv_planes(&this->yuv); + init_yuv_planes(&this->yuv, this->width, this->height); + } } - } while( this->sample_counter >= this->samples_per_frame ); -} + } + } +} diff -r 6da3735ae176cc2b30af1dfe4fbd5c96a93a2260 -r 7fd3df5d67d667238737563dafa4b72b641263df src/post/visualizations/fftgraph.c --- a/src/post/visualizations/fftgraph.c Sat Aug 18 17:46:18 2007 -0400 +++ b/src/post/visualizations/fftgraph.c Sat Aug 18 17:30:57 2007 -0400 @@ -197,7 +197,7 @@ static int fftgraph_rewire_video(xine_po return 0; /* register our stream at the new output port */ old_port->close(old_port, XINE_ANON_STREAM); - new_port->open(new_port, XINE_ANON_STREAM); + (new_port->open) (new_port, XINE_ANON_STREAM); /* reconnect ourselves */ this->vo_port = new_port; return 1; @@ -232,7 +232,7 @@ static int fftgraph_port_open(xine_audio this->data_idx = 0; this->sample_counter = 0; - this->vo_port->open(this->vo_port, XINE_ANON_STREAM); + (this->vo_port->open) (this->vo_port, XINE_ANON_STREAM); this->metronom->set_master(this->metronom, stream->metronom); this->fft = fft_new(FFT_BITS); @@ -284,7 +284,7 @@ static int fftgraph_port_open(xine_audio } } - return port->original_port->open(port->original_port, stream, bits, rate, mode ); + return (port->original_port->open) (port->original_port, stream, bits, rate, mode ); } static void fftgraph_port_close(xine_audio_port_t *port_gen, xine_stream_t *stream ) { diff -r 6da3735ae176cc2b30af1dfe4fbd5c96a93a2260 -r 7fd3df5d67d667238737563dafa4b72b641263df src/post/visualizations/fftscope.c --- a/src/post/visualizations/fftscope.c Sat Aug 18 17:46:18 2007 -0400 +++ b/src/post/visualizations/fftscope.c Sat Aug 18 17:30:57 2007 -0400 @@ -261,7 +261,7 @@ static int fftscope_rewire_video(xine_po return 0; /* register our stream at the new output port */ old_port->close(old_port, XINE_ANON_STREAM); - new_port->open(new_port, XINE_ANON_STREAM); + (new_port->open) (new_port, XINE_ANON_STREAM); /* reconnect ourselves */ this->vo_port = new_port; return 1; @@ -292,7 +292,7 @@ static int fftscope_port_open(xine_audio this->sample_counter = 0; this->fft = fft_new(FFT_BITS); - this->vo_port->open(this->vo_port, XINE_ANON_STREAM); + (this->vo_port->open) (this->vo_port, XINE_ANON_STREAM); this->metronom->set_master(this->metronom, stream->metronom); for (c = 0; c < this->channels; c++) { @@ -305,7 +305,7 @@ static int fftscope_port_open(xine_audio } } - return port->original_port->open(port->original_port, stream, bits, rate, mode ); + return (port->original_port->open) (port->original_port, stream, bits, rate, mode ); } static void fftscope_port_close(xine_audio_port_t *port_gen, xine_stream_t *stream ) { diff -r 6da3735ae176cc2b30af1dfe4fbd5c96a93a2260 -r 7fd3df5d67d667238737563dafa4b72b641263df src/post/visualizations/fooviz.c --- a/src/post/visualizations/fooviz.c Sat Aug 18 17:46:18 2007 -0400 +++ b/src/post/visualizations/fooviz.c Sat Aug 18 17:30:57 2007 -0400 @@ -94,7 +94,7 @@ static int fooviz_rewire_video(xine_post return 0; /* register our stream at the new output port */ old_port->close(old_port, XINE_ANON_STREAM); - new_port->open(new_port, XINE_ANON_STREAM); + (new_port->open) (new_port, XINE_ANON_STREAM); /* reconnect ourselves */ this->vo_port = new_port; return 1; @@ -120,10 +120,10 @@ static int fooviz_port_open(xine_audio_p this->data_idx = 0; this->sample_counter = 0; - this->vo_port->open(this->vo_port, XINE_ANON_STREAM); + (this->vo_port->open) (this->vo_port, XINE_ANON_STREAM); this->metronom->set_master(this->metronom, stream->metronom); - return port->original_port->open(port->original_port, stream, bits, rate, mode ); + return (port->original_port->open) (port->original_port, stream, bits, rate, mode ); } static void fooviz_port_close(xine_audio_port_t *port_gen, xine_stream_t *stream ) { diff -r 6da3735ae176cc2b30af1dfe4fbd5c96a93a2260 -r 7fd3df5d67d667238737563dafa4b72b641263df src/post/visualizations/oscope.c --- a/src/post/visualizations/oscope.c Sat Aug 18 17:46:18 2007 -0400 +++ b/src/post/visualizations/oscope.c Sat Aug 18 17:30:57 2007 -0400 @@ -164,7 +164,7 @@ static int oscope_rewire_video(xine_post if (!data) return 0; old_port->close(old_port, XINE_ANON_STREAM); - new_port->open(new_port, XINE_ANON_STREAM); + (new_port->open) (new_port, XINE_ANON_STREAM); /* reconnect ourselves */ this->vo_port = new_port; return 1; @@ -194,10 +194,10 @@ static int oscope_port_open(xine_audio_p this->sample_counter = 0; init_yuv_planes(&this->yuv, OSCOPE_WIDTH, OSCOPE_HEIGHT); - this->vo_port->open(this->vo_port, XINE_ANON_STREAM); + (this->vo_port->open) (this->vo_port, XINE_ANON_STREAM); this->metronom->set_master(this->metronom, stream->metronom); - return port->original_port->open(port->original_port, stream, bits, rate, mode ); + return (port->original_port->open) (port->original_port, stream, bits, rate, mode ); } static void oscope_port_close(xine_audio_port_t *port_gen, xine_stream_t *stream ) { diff -r 6da3735ae176cc2b30af1dfe4fbd5c96a93a2260 -r 7fd3df5d67d667238737563dafa4b72b641263df src/vdr/post_vdr_audio.c --- a/src/vdr/post_vdr_audio.c Sat Aug 18 17:46:18 2007 -0400 +++ b/src/vdr/post_vdr_audio.c Sat Aug 18 17:30:57 2007 -0400 @@ -172,7 +172,7 @@ fprintf(stderr, "~~~~~~~~~~ vdr port ope this->num_channels = _x_ao_mode2channels(mode); - return port->original_port->open(port->original_port, stream, bits, rate, mode ); + return (port->original_port->open) (port->original_port, stream, bits, rate, mode ); } diff -r 6da3735ae176cc2b30af1dfe4fbd5c96a93a2260 -r 7fd3df5d67d667238737563dafa4b72b641263df src/video_out/video_out_xcbxv.c --- a/src/video_out/video_out_xcbxv.c Sat Aug 18 17:46:18 2007 -0400 +++ b/src/video_out/video_out_xcbxv.c Sat Aug 18 17:30:57 2007 -0400 @@ -1245,7 +1245,7 @@ static vo_driver_t *open_plugin(video_dr if(!strcmp(xcb_xv_attribute_info_name(attribute_it.data), "XV_HUE")) { if (!strncmp(xcb_xv_adaptor_info_name(adaptor_it.data), "NV", 2)) { - xprintf (this->xine, XINE_VERBOSITY_NONE, LOG_MODULE ": ignoring broken XV_HUE settings on NVidia cards"); + xprintf (this->xine, XINE_VERBOSITY_NONE, LOG_MODULE ": ignoring broken XV_HUE settings on NVidia cards\n"); } else { xv_check_capability (this, VO_PROP_HUE, attribute_it.data, adaptor_it.data->base_id, diff -r 6da3735ae176cc2b30af1dfe4fbd5c96a93a2260 -r 7fd3df5d67d667238737563dafa4b72b641263df src/video_out/video_out_xv.c --- a/src/video_out/video_out_xv.c Sat Aug 18 17:46:18 2007 -0400 +++ b/src/video_out/video_out_xv.c Sat Aug 18 17:30:57 2007 -0400 @@ -1298,7 +1298,7 @@ static vo_driver_t *open_plugin_2 (video if(!strcmp(attr[k].name, "XV_HUE")) { if (!strncmp(adaptor_info[adaptor_num].name, "NV", 2)) { - xprintf (this->xine, XINE_VERBOSITY_NONE, LOG_MODULE ": ignoring broken XV_HUE settings on NVidia cards"); + xprintf (this->xine, XINE_VERBOSITY_NONE, LOG_MODULE ": ignoring broken XV_HUE settings on NVidia cards\n"); } else { xv_check_capability (this, VO_PROP_HUE, attr[k], adaptor_info[adaptor_num].base_id, diff -r 6da3735ae176cc2b30af1dfe4fbd5c96a93a2260 -r 7fd3df5d67d667238737563dafa4b72b641263df src/xine-engine/audio_out.c --- a/src/xine-engine/audio_out.c Sat Aug 18 17:46:18 2007 -0400 +++ b/src/xine-engine/audio_out.c Sat Aug 18 17:30:57 2007 -0400 @@ -253,6 +253,7 @@ typedef struct { * sure nobody will change speed without going through xine.c:set_speed_internal */ int slow_fast_audio; /* play audio even on slow/fast speeds */ + int16_t last_sample[RESAMPLE_MAX_CHANNELS]; audio_buffer_t *frame_buf[2]; /* two buffers for "stackable" conversions */ int16_t *zero_space; @@ -746,19 +747,19 @@ static audio_buffer_t* prepare_samples( switch (this->input.mode) { case AO_CAP_MODE_MONO: ensure_buffer_size(this->frame_buf[1], (this->output.bits>>3), num_output_frames); - _x_audio_out_resample_mono (buf->mem, buf->num_frames, + _x_audio_out_resample_mono (this->last_sample, buf->mem, buf->num_frames, this->frame_buf[1]->mem, num_output_frames); buf = swap_frame_buffers(this); break; case AO_CAP_MODE_STEREO: ensure_buffer_size(this->frame_buf[1], (this->output.bits>>3)*2, num_output_frames); - _x_audio_out_resample_stereo (buf->mem, buf->num_frames, + _x_audio_out_resample_stereo (this->last_sample, buf->mem, buf->num_frames, this->frame_buf[1]->mem, num_output_frames); buf = swap_frame_buffers(this); break; case AO_CAP_MODE_4CHANNEL: ensure_buffer_size(this->frame_buf[1], (this->output.bits>>3)*4, num_output_frames); - _x_audio_out_resample_4channel (buf->mem, buf->num_frames, + _x_audio_out_resample_4channel (this->last_sample, buf->mem, buf->num_frames, this->frame_buf[1]->mem, num_output_frames); buf = swap_frame_buffers(this); break; @@ -766,7 +767,7 @@ static audio_buffer_t* prepare_samples( case AO_CAP_MODE_5CHANNEL: case AO_CAP_MODE_5_1CHANNEL: ensure_buffer_size(this->frame_buf[1], (this->output.bits>>3)*6, num_output_frames); - _x_audio_out_resample_6channel (buf->mem, buf->num_frames, + _x_audio_out_resample_6channel (this->last_sample, buf->mem, buf->num_frames, this->frame_buf[1]->mem, num_output_frames); buf = swap_frame_buffers(this); break; @@ -774,6 +775,25 @@ static audio_buffer_t* prepare_samples( case AO_CAP_MODE_AC5: /* pass-through modes: no resampling */ break; + } + } else { + /* maintain last_sample in case we need it */ + switch (this->input.mode) { + case AO_CAP_MODE_MONO: + memcpy (this->last_sample, &buf->mem[buf->num_frames - 1], sizeof (this->last_sample[0])); + break; + case AO_CAP_MODE_STEREO: + memcpy (this->last_sample, &buf->mem[(buf->num_frames - 1) * 2], 2 * sizeof (this->last_sample[0])); + break; + case AO_CAP_MO... [truncated message content] |