diff --git a/CHANGELOG b/CHANGELOG index 8e94fe86..b4a0852d 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,5 +1,7 @@ -0.2.4.dev.1 - - Some players (moode) open the URL on SETURI, then close and re-open it on PLAY. But re-open might be received before close (threading), causing confusion with a double-open request. So use a mutex with timeout in sq_open +0.2.4.0 + - add ARMv5 binary + - When creating a UPnP renderer, set state(s) to STOP + - Some players (moode) open the URL on SETURI, then close and re-open it on PLAY. But re-open might be received before close (due to threading), causing confusion with a double-open request. So use a mutex with timeout in sq_open - create a fake pthread_mutex_timedlock for OSX - Send SetPlayMode to NORMAL at each play (some players by default are in auto_repeat mode) - DLNA.ORG_OP set to 00 (limited random availability) @@ -9,7 +11,8 @@ - Add when set (default) allow 0 to be set as volume - (P) increase web UI log line to 200 - (P) manual now available to view in a web browser tab - - (p) add option to delete a player + - (P) add option to delete a player + - (P) enable/disable from the list did not work if selected player was 'default' 0.2.3.0 (plugin) - when log is disable, no log shall be generated eveen if extra debug options are set diff --git a/application/squeeze2upnp/squeeze2upnp.c b/application/squeeze2upnp/squeeze2upnp.c index 62630f53..bee5ec56 100644 --- a/application/squeeze2upnp/squeeze2upnp.c +++ b/application/squeeze2upnp/squeeze2upnp.c @@ -1210,6 +1210,8 @@ static bool AddMRDevice(struct sMR *Device, char *UDN, IXML_Document *DescDoc, c Device->ErrorCount = 0; Device->Running = true; Device->InUse = true; + Device->sqState = SQ_STOP; + Device->State = STOPPED; strcpy(Device->UDN, UDN); strcpy(Device->DescDocURL, location); strcpy(Device->FriendlyName, friendlyName); diff --git a/application/squeezetiny/squeezedefs.h b/application/squeezetiny/squeezedefs.h index 240e1c56..a610d818 100644 --- a/application/squeezetiny/squeezedefs.h +++ b/application/squeezetiny/squeezedefs.h @@ -3,7 +3,7 @@ //#define __EARLY_STMd__ -#define VERSION "v0.2.4.dev.1" +#define VERSION "v0.2.4.0" #if defined(linux) #define LINUX 1 diff --git a/plugin/CHANGELOG b/plugin/CHANGELOG new file mode 100644 index 00000000..b4a0852d --- /dev/null +++ b/plugin/CHANGELOG @@ -0,0 +1,171 @@ +0.2.4.0 + - add ARMv5 binary + - When creating a UPnP renderer, set state(s) to STOP + - Some players (moode) open the URL on SETURI, then close and re-open it on PLAY. But re-open might be received before close (due to threading), causing confusion with a double-open request. So use a mutex with timeout in sq_open + - create a fake pthread_mutex_timedlock for OSX + - Send SetPlayMode to NORMAL at each play (some players by default are in auto_repeat mode) + - DLNA.ORG_OP set to 00 (limited random availability) + - cli_send_cmd must return NULL only if command is not responded, otherwise allow respond with an empty string + - sq_set_time: double format shoudl be %.1f not %.1lf + - Do not send self-generated volume command on unpause, wait for the real volume request + - Add when set (default) allow 0 to be set as volume + - (P) increase web UI log line to 200 + - (P) manual now available to view in a web browser tab + - (P) add option to delete a player + - (P) enable/disable from the list did not work if selected player was 'default' + +0.2.3.0 (plugin) + - when log is disable, no log shall be generated eveen if extra debug options are set + - space char instead of thab on line 186 + +0.2.3.0 + - changing naming + - cleaning LOG + - AIFF problem is for all versions before 7.9 + - AIFF partial header' in not sent in LMS < 7.9 when transcoding happens, so try to detect source file format + - aif removed from default codec list, too troublesome + - fwrite for 24 bits pcm was not using adjusted buffer size + - Support fully AIFF => build header on the fly + - Use TrackURI from GetPositionInfo and not from GetMediaInfo - this is more reliable and saves one polling UPnP request + - by default, only use pcm in because wav and aiff require a filesize and some players are stuck on the current URI when the whole size has not been received + - Some players do not fill "TrackURI" so get it from "TrackMetaData" + - add to limit the size of logfile + - by default, codecs are + - Send a STOP to playing renderers at exit - critical otherwise libupnp does not stop (deadlock) + - when checking codecs list, 'aif' was not in the matching list for 'aif' (only audio/L and wav) + - In LMS 7.7, when sending pcm in AIFF format, there is an 8 bytes header to skip if the data is forwarded as PCM or WAV. Does not exist in 7.9 (don't know for 7.8) + - Query LMS version at discovery do differentiate between different AIFF option + - add option 2 to L24_format to truncate 24 bits in 16 bits for players that do only 16 bits (only for pm/aiff, not flac) + - MainThread only sleeps 1 sec to speed up exit + - optimize endianness changes + +0.2.2.2 (not published) + - XML special char were not properly handled in DIDL header ==> moved to a full XML constructor, not a sprintf patch + - using autosave, only sections are written unless there is no existing config file + - removed memory leak in SaveConfig (nodelist using wrong free) + - add the full channel and sample rate in DIDL header, not only in content-type + - OSX version is now multi-architecture, named squeeze2upnp-osx-multi + - Some players do not feel "CurrentURI" properly in GetMediaInfo. Use the "CurrentURIMetaData" and parse it instead + - Added partial AIFF support (not sending AIFF to player but accepting AIFF=PCM from LMS) ==> less byte-reordering needed + - Codecs capabilities send to LMS only include codecs supported by UPnP player + - added as a comma-separated, ordered, list of file format sent to UPnP players amongst (pcm, aif, wav) + - added to try to match (within the priority of byte orders between LMS and player to avoid CPU consuming byte re-ordering + + +0.2.2.1 + - mac_size in AddMR was wrong type causing a stack corruption on WinXP + - version now works for XP and above + +0.2.2.0 + - can be '?' (w/o the '') to enable use of default system "temp" dir (this is the default now instead of '.') + - config parameters with incorrect values (buffer_size) no longer re-written with corrected values in config + - config file generating (-i or 'save' while running )do not erase existing players + - add command line option '-Z' to disable interactive mode, allowing backgrounding using '&' in Linux (no more consumes 100% CPU) + - buffer files are now deleted each time user stops a playback unless new parameter is set to 1 + - add parameter to scale and limit the . Any value calculated from volume curve is scaled by /100 + - Window version is renamed squeeze2upnp-win + - add -I command line option to auto-save config file at each scan + - some players trigger false detectio of URI change by reporting empty nextURI, so check the nextURI contains "-idx-" pattern + - when saving an existing device, the UPnP friendly name was used, even if a different name was set in configuration + - add -k option to force immediate exit on SIGINT, SIGQUIT and SIGTERM + - handle SIGINT, SIGQUIT and SIGTERM properly + +0.2.1.0 + - at 0 was not disabling scan + - added parameter to remove a device only N times after failed re-discovery + - add Ralphy's patch (SendARP) to compile for OSX + - reset read pointer in sq_read by calling fseek + +0.2.0.1 + - Race condition where a upnp poll-response can be interrupted by the update thread that removes that device - locking a non-existing mutex happens then + - Handle 24 bits mono tracks with PACKED format + - when was disabled, some default metadata were not initialized (was missing backport from 0.1.4.0) + - very quick pause/unpause created an infinite loop (created by fixing dealock issue between upnp notification and LMS playback in 0.2.0.0) + - on quick unpause/pause, the pause command was ignored - can be irritating if unpause was pressed by mistake + +0.2.0.0 + - each player uses own timer thread to poll position, track and related info instead of a single thread for all players + - upnp rescan dedicated thread created at each scan interval to avoid blocking libupnp caller thread in callback + - continue re-organizing LOG + - metadata using "songinfo" CLI command to allow access to more information, includign albumart (still fallback to use "playlist" info if "songinfo" fails) + - on = 0, metadat was not properly handled, leading to random filesize being sent + - add to configure how long a network player *rescan* lasts (initial scan is still 15) + - is 30 seconds minimum + - When skipping track very quickly, a "playing" state of previous skip could be received before the "stopped" state or last skip, causing player to stall (confused with an unsollicited play) + - force_volume was used, even when volume_on_play was set to -1 in SyncNotifyState + - option -i was broken before a5 release + - context index toggle shall be done after stream mutex lock (slimproto) + - remove deadlock between upnp notification and LMS playback request (sq_notify call in SyncNotifyState) + - global Mutex for renderer list un-necessary now that list is a table + - change some string definition to allow VC2008 compilation + - add the option to set a socket for upnp operations + + +0.1.4.0 + - can be set to -1 so that *all* LMS volume commands are ignored (use the player's volume control) + - When pause/play directly on the player, action is feedback to LMS that should stay in sycn (still early phase ...). This does NOT work when "stop" is being used - such "stop" will be interpreted by LMS as an error and will move to next track + - if uPnP player cannot play a format, send the proper error code to LMS (also send STMc everytime) == > that's to avoid being stuck in a middle of a playlist - LMS will gently move to the next song and a squeeze2upnp will just log the problem + - add parameter + - add parameter + - add paramater (O to disable regular scan) + - building a Linux statically linked version as well (-static) + - now 0,1 or 2 (2 restarts stream from that last sent byte - will stay undocumented as it does not seem to work) + - add -4 for to allow usage of unkown file size to be sent *but* not using chunked-encoding (need updated libupnp webserver.c and httpreadwrite.c), responding to open-ended request (xxx-) by HTTP 206 and range xxx-yyy/* + - add -1 for to allow usage of unkown file size to be sent *but* not using chunked-encoding (need updated libupnp webserver.c and httpreadwrite.c), responding to open-ended requests (xxx-) by HTTP 200 instead of 206 + - add -2 for to allow usage of chunked-encoding (need updated libupnp webserver.c and httpreadwrite.c), and responding to open-ended requests (xxx-) by HTTP 200 instead of 206 + - update DIDL-lite header to add DLNA namespace, , trackNumber and tweak other parameters + - added to each device. As pointed by ralphy, current logic was not working properly. Now, if mac predecence is 1/ mac from , then mac from ARP network request, then mac from + n (Nth player). when "save is called, the is re-written for every device. + - add command line "-i " to discover upnp players, save config file, then exit + - add command line "-p " to store the pid + - "unexpected" stops managed from squeelite side instead of uPnP (NB: a "stop" from the player"s remote will cause LMS to move to next track, NOT to stop + - if is smaller than max(, ) * 4, set it to that max + - parameter removed + - big fat warning when config file has an error and cannot be loaded + - improve HTTP range request response (might have impact with and pause reaction) + - Update COMPATIBILITY file + - remove all warning for Linux compilation + - "cookie" is now a proper pointer, no more integer cast + - configure libupnp with disabled blocking TCP connection and gen GENA timeouts to avoid "disapearing players" to lock the job queue, ending to a "too many jobs" disaster in libupnp + - Stop sending poll request to a player that has generated more than 5 consecutives ACTION_ERROR (has disappeared probably) + - for each player, check that is accessible in WRITE mode (and remove device if it is not) + - Improved cleanup on exit() to avoid coredump + - Improved LMS device deletion when upnp device disappears + - When the same uPnP player disappears and re-apppears, re-connect was not working + - Removed all memory leaks found by valgrind + - metadata request can cause a fault if the list has been emptied (modulus 0 call) + - when disabled, metadata gathering was causing fault. + - take into account metadata config as well when accept_nexturi is disable + - sq_get_metadata must fill metadata in all cases, no NULL can be returned + - start to re-organize LOG levels + - prepare metadata gathering for artwork and extended information (like filesize) + - 64 bits int printed with %Ld for arm + - divide by 0 on volume removed (was causing volume command 0 ==> 255) + - volume calculation does not use float anymore (integer arithmetic only) + - ending pair changed so be (0x7fffffff,0x7f) to work with integer arithmetic + - initialize a string in AddMRDevice + + +0.1.3.3 + - with set to 1, unpause was not restarting at the right time if repositionig was done during pause + - when upnp device capability for pcm does not detail sample rate and channel (ie audio/L16), add the channel and rate details in the mime-type response (ie audio/L16;channels=2;rate=44100) - was need for foobar2000 + - add aac in the supported format (does not seem to work with Sonos or foobar yet) + - to 1 by default + - max by default is 65536 instead of 65535 + - check that squeezelite instance was created before trying to run it + - L/R inversion corrected in PCM 24 bits, packed type 1 + - buffer write file opening done as soon as LMS play command is received (quick GET) + - in flac metadata (for repositionning) vorbis header is needed to NamUniti + - flac header in re-positioning was not set as "last block = 0x80" (happened after vorbis_comment was removed) + - handle case where no playlist index is returned in metadata (crash) + - metadata track and time request were doubling the '?' + - add metadata + - change incorrect upnp:artist to dc:creator in DIDL string + - change back flac header re-insertion default max block size to 0xfff + - remove a few compiler warning + - improve the "synchronous start" (continuous synchro does not work) + +0.1.2.0 + - add a wav header to pcm stream for players that accept audio/wav, audio/x-wav and audio/wave in protocol info by do not accept audio/Lxx (xx = sample size).Was needed for Sonos to receive pcm samples. Endianness pobably need more attention + - re-organize format detection code for wave header addition + - suppress DIRECT mode (was useless) + - correct some coredump on exit (access to invalid file handles) \ No newline at end of file diff --git a/plugin/Settings.pm b/plugin/Settings.pm index 827d9084..e35c483d 100644 --- a/plugin/Settings.pm +++ b/plugin/Settings.pm @@ -169,17 +169,18 @@ sub handler { my $profile = loadprofiles()->{ $params->{'selprofile'} }; mergeprofile($device, $profile); } - } - - # get enabled status for all device, except the selected one - foreach my $device (@{$xmlconfig->{'device'}}) { - if ($device->{'udn'} ne $params->{'seldevice'}) { - my $enabled = $params->{ 'enabled.'.$device->{ 'udn' } }; - $device->{'enabled'} = defined $enabled ? $enabled : 0; - } - } + } } + $log->error("get all"}); + # get enabled status for all device, except the selected one (if any) + foreach my $device (@{$xmlconfig->{'device'}}) { + if ($device->{'udn'} ne $params->{'seldevice'}) { + my $enabled = $params->{ 'enabled.'.$device->{ 'udn' } }; + $device->{'enabled'} = defined $enabled ? $enabled : 0; + } + } + $log->info("writing XML config"); $log->debug(Dumper($xmlconfig)); Plugins::UPnPBridge::Squeeze2upnp->stop; diff --git a/plugin/Squeeze2upnp.pm b/plugin/Squeeze2upnp.pm index 7a3ca227..02242341 100644 --- a/plugin/Squeeze2upnp.pm +++ b/plugin/Squeeze2upnp.pm @@ -29,7 +29,7 @@ sub binaries { return qw(squeeze2upnp-x86 squeeze2upnp-x86-static); } if ($os->{'binArch'} =~ /arm/) { - return qw(squeeze2upnp-armv6hf squeeze2upnp-armv6hf-static); + return qw(squeeze2upnp-armv6hf squeeze2upnp-armv6hf-static squeeze2upnp-armv5 squeeze2upnp-armv5-static); } # fallback to offering all linux options for case when architecture detection does not work diff --git a/plugin/install.xml b/plugin/install.xml index 5b71470a..74c3f3b1 100644 --- a/plugin/install.xml +++ b/plugin/install.xml @@ -1,17 +1,17 @@ + 0.2.4.0 + PLUGIN_UPNPBRIDGE_DESC enabled + plugins/UPnPBridge/settings/basic.html + PLUGIN_UPNPBRIDGE Philippe - 0.2.4.dev.1 + http://sourceforge.net/projects/lms-to-upnp/files/profiles.xml/download + Plugins::UPnPBridge::Plugin - *.* 7.5 SlimServer + *.* philippe_44@outlook.com - PLUGIN_UPNPBRIDGE_DESC - Plugins::UPnPBridge::Plugin - PLUGIN_UPNPBRIDGE - http://sourceforge.net/projects/lms-to-upnp/files/profiles.xml/download - plugins/UPnPBridge/settings/basic.html