Commit Graph

3701 Commits

Author SHA1 Message Date
ejurgensen
9cb5810e9a [player] Avoid repeated resets on output delay when changing track (issue #781) 2019-08-18 23:12:10 +02:00
ejurgensen
19ba9d106a [input] Buffer full callback should also be made when source reading ends
Otherwise the player will wait infinitely
2019-08-18 23:10:56 +02:00
ejurgensen
b9b2874a2e [player] Possible fix for issue #781 where playback status is incorrect
pb_suspend() + pb_resume() during track changes made the playback status
incorrect, i.e. pb_session.source_list/playing_now would not match what the
input was actually writing. This attempts to solve it by resetting the
session when pb_suspend() is called, so that the input, input_buffer and
source_list come into sync.
2019-08-17 01:44:45 +02:00
ejurgensen
86339eee87 [input] Make input_resume() not reopen tracks that have finished playing
If playback was paused during the very last part of the track, the rest of the
track would be read into the input buffer and the input would be closed. With
this commit the input will not be reopened.

Also allow input_flush to be called with null argument.
2019-08-17 01:37:39 +02:00
ejurgensen
7dfe4c2b65 [daap] Always use S_PLAYLIST ordering for Q_PL (ref issue #785) 2019-08-13 21:35:07 +02:00
ejurgensen
f9bfec180f [raop] Fix possible infinite loop + wrong packet resend (fixes issue #775)
Fixes bugs which were due to incorrect handling of unsigned integer wrap-around:

1. Calling packet_resend() with seqnum + len greater than UINT16_MAX => infinite loop
2. Calling rtp_packet_get() with session->seqnum - seqnum greater than pktbuf_next => wrong packet
2019-08-10 22:41:04 +02:00
ejurgensen
6578f28621 [raop] Logging change to find cause of issue #775 2019-08-09 23:58:45 +02:00
chme
a87059265d [spotify] Require Spotify web API scope playlist-read-collaborative
Also exposes granted and required Spotify web API scope through the
forked-daapd JSON API.
2019-08-03 12:55:53 +02:00
Christian Meffert
d996b1ff09
Merge pull request #772 from whatdoineed2do/smartpl-dynamic-dates-context
[smartpl] generate dynamic dates for SMARTPL queries
2019-08-03 08:51:57 +02:00
whatdoineed2do/Ray
50232bc091 [streaming] icy-meta overflow fix (for artist+song title > 4064 bytes) 2019-08-01 12:42:20 +01:00
whatdoineed2do
0941cf51ff [streaming] support sending ICY metadata (title) (#732)
* [streaming] obey Icy-MetaData directive and send icy title

* [streaming] fix 'streaming_sessions' race conditions/dbl frees on shutdown

* [streaming] simplify icy meta sending logic

* [streaming] 'icy request' variable cleanup

* [streaming] icy-meta comment/logging cleanup
2019-07-31 16:34:11 +02:00
ejurgensen
cf173df805 [outputs] Fix issue where RTP packet is not available for retransmit
Check for sequence number did not account for wrap around, so e.g. a
request for seqnum 65335 when first was 65100 and last was 100 would
not work.
2019-07-20 20:37:22 +02:00
chme
772b18479d [smartpl] Refactor appending date expression to sql query 2019-07-14 20:51:46 +01:00
ejurgensen
5307c6d94b [player] Fix commit 3e9f8ef, input_resume() must be non-blocking (possibly issue #773) 2019-07-14 00:02:50 +02:00
ejurgensen
2f3ec36c6a [input] Fix for playback pause on http streams
This fixes a bug from commit 37ce8dd6 where seek_http (which is called when
pausing playback) for non-seekable streams would return -1, thus signalling
an error, even though it is not. The player would think that the stream
could not be played and then skip to the next item.
2019-07-12 19:15:31 +02:00
ejurgensen
3e9f8effa0 [player] Better fix for resuming playback af long pause (issue #766)
The fix in commit 3928ab6 broke resuming from an underrun, since it meant that
pb_resume() would flush the input buffer. With this fix it is possible to call
input_resume(), which will not flush the buffer if the source is already open.

Also renamed some functions in player.c for consistency.
2019-07-12 19:11:48 +02:00
whatdoineed2do/Ray
02d4ba1eaa [smartpl] remove dupl code from interval AFTER/BEFORE DATE 2019-07-11 18:48:29 +01:00
whatdoineed2do/Ray
62201e4128 [smartpl] handle intervals in 'week' as days due to lack of SQLite modifier support 2019-07-11 18:25:01 +01:00
whatdoineed2do/Ray
3dcd826513 [smartpl] date 'interval' handling defered to db/not using potentially inaccurate time_t calcaulations 2019-07-11 18:25:01 +01:00
whatdoineed2do/Ray
d31a8c1e05 [smartpl] generate dynamic dates for SMARTPL queries
For dates that require context (ie today, yesterday, N days ago etc) we want the
underlying SQL to respect the current time when running query;  a query that
requests items for 'today' should only find matches for the time it was run.
Current implementation would generated a fixed date (at the time the SMARTPL is
inserted into db) in the playlist table where as this commit understands the
context of the date.
2019-07-11 18:25:01 +01:00
ejurgensen
3928ab6f82 [player] Fix for resuming playback after long pause (issue #766)
After a long pause the input would close the source (due to INPUT_OPEN_TIMEOUT).

This change makes the player restart the input when resuming.
2019-07-09 23:12:20 +02:00
Christian Meffert
e608b763ef
Merge pull request #752 from whatdoineed2do/db-queue-quality
db queue to incl media quality info
2019-07-09 20:19:10 +02:00
whatdoineed2do/Ray
e0a18082f7 [web-src/jsonapi] move endpoint /api/update as PUT operation 2019-07-09 13:54:59 +02:00
whatdoineed2do/Ray
8c024387ae [web-src/jsonapi] endpoint GET /api/update/meta -> PUT /api/rescan 2019-07-09 13:54:59 +02:00
whatdoineed2do/Ray
e9c1a59ad2 [jsonapi] expose force metadata rescan via /api/update/meta endpoint 2019-07-09 13:54:59 +02:00
whatdoineed2do/Ray
8f311d4360 [library] support forced metadata scan of library, via '.meta-rescan' file 2019-07-09 13:54:59 +02:00
whatdoineed2do/Ray
9baba8f8db [smartpl] use start of today (ie 00:00) for DATE calculations 2019-07-06 18:52:58 +01:00
ejurgensen
528a175d99 [main] Conditionally disable functions deprecated by ffmpeg 4.0
av_register_all, av_lockmgr_register and avfilter_register_all
2019-07-03 20:29:31 +02:00
ejurgensen
a321667201 [xcode] Remove deprecated ffmpeg AVFormatContext filename field 2019-07-02 21:48:34 +02:00
ejurgensen
bc8e6794ad [cast] Fix some compiler warnings 2019-07-02 20:42:31 +02:00
ejurgensen
51d85d0975 [alsa] Fix for ALSA issues when source quality changes (issue #722, issue #744 and issue #754)
* Fix "clicks" during playback, especially on low buffer size devices
  Bug had two causes: Trying to write to the prebuf ringbuffer when it was full
  and writing new audio to the device without first having drained the prebuf,
  thus writing out of order.

* Use snd_pcm_drain() so alsa doesn't report underrun on playback session end
  Removes SNDRV_PCM_IOCTL_SYNC_PTR errors

* Fix missing error check of the return value from snd_pcm_avail (now use snd_pcm_avail_delay)
2019-06-22 21:53:09 +02:00
ejurgensen
a28e370c4f
Merge pull request #748 from chme/conf_deprecated
[conf] Gracefully handle the change of config options for modifying playlists
2019-06-16 22:05:08 +02:00
chme
94af51f19b [conf/logger] Log error message from libconfuse in forked-daapd log 2019-06-15 12:21:27 +02:00
chme
9351d905f2 [mpd] Handle deprecated config options gracefully 2019-06-15 12:21:27 +02:00
chme
7853f80269 [conf] Readd old config options in mpd section as deprecated 2019-06-15 12:21:27 +02:00
ejurgensen
0cb8907201 [streaming] Logging fix 2019-06-12 22:51:25 +02:00
whatdoineed2do/Ray
f194145b8e [jsonapi] queue/track responses incl type/bitrate/samplerate/channels 2019-06-12 16:52:46 +01:00
whatdoineed2do/Ray
e2d62a62a4 [scan] extract 'channels' from (files) audio and type/bitrate/samplerate/channels from streams 2019-06-12 16:52:02 +01:00
whatdoineed2do/Ray
b126a2fbc0 [db] add 'channels' to file/queue tbl 2019-06-12 16:52:02 +01:00
whatdoineed2do/Ray
c796db251d [db] schema v20.01 support codec type/bitrate/samplerate in queue tbl 2019-06-12 16:50:52 +01:00
Scott Shambarger
20f5118f75 [alsa] asoundlib.h should be alsa/asoundlib.h 2019-06-11 20:10:04 -07:00
chme
d35333139e [jsonapi] Fix segfault if no default playlist directory is set in conf 2019-06-01 08:12:38 +02:00
ejurgensen
4f5966c9ff [db] Speed up Q_PL query used by e.g. '/databases/1/containers' request
The previous solution would use subqueries to count the number of items and
streams in each playlist, which means that response time gets pretty slow if
there are many playlists.

This commit also includes a number of lesser db code changes.
2019-05-30 21:19:40 +02:00
chme
4434fe7a2c [jsonapi] Check for empty playlist name in queue/save 2019-05-30 11:23:22 +02:00
chme
2b4b9c747f [jsonapi] Add config options for saving playlists to config reply 2019-05-30 11:23:22 +02:00
whatdoineed2do/Ray
d28f7f43b7 [jsonapi,mpd,conf] save playlist via JSON api
- new endpoint api/queue/save?name= to .m3u via library_save()
- refact for common cfg for playlist save options
2019-05-30 07:23:04 +02:00
ejurgensen
380f1358d5 [xcode] Disable reconnect_at_eof, does not work with m3u8 (fixes #745)
Only fixes #745 with newer versions of ffmpeg. With ffmpeg 3.4 playback
will still get interrupted because av_read_frame returns an error.
2019-05-21 21:19:03 +02:00
ejurgensen
7bf90eb8cb [xcode] Fix for reading mono sources (ref issue #742) 2019-05-19 22:45:39 +02:00
Christian Meffert
cbd8d8a44d
Merge pull request #740 from whatdoineed2do/library-https-stream
[library] accept https:// streams
2019-05-18 07:36:45 +02:00
ejurgensen
b3d6211371 [db] Upgrade db schema to 21.0
Commit b3bfb0a and e1993bc change the triggers and calculation of id's in a way
that is not backwards compatible, so we need to make major schema upgrade.
2019-05-17 23:07:48 +02:00
ejurgensen
e1993bc7b6 [db] Comeback for the files-table insert trigger 2019-05-17 23:03:05 +02:00
ejurgensen
35a585c23e [scan] Use MusicBrainz and other tags to set songalbumid
Credit to @whatdoineed2do for finding tags and suggesting this change.
2019-05-17 23:03:05 +02:00
ejurgensen
b3bfb0a5f6 [db] Move calculation of artist/album id's from sqlite to code
The purpose of this is to support library backends making their own
calculation of these id's, which is relevant if they have more information
available than just album_artist and album.

This also removes a bunch of sqlite extension code plus some triggers, which
in itself is probably an improvement.
2019-05-17 23:03:05 +02:00
ejurgensen
c8650a0450 [cast] Put back Chromecast exclude option
Was removed by mistake in commit f8b0147
2019-05-16 23:04:33 +02:00
ejurgensen
31d852993f
Merge pull request #741 from whatdoineed2do/seekable-http-streams
Seekable http streams
2019-05-16 15:26:32 +02:00
ejurgensen
cd7bf45749
[alsa] Return ALSA the error code from buffer_write, not -1 2019-05-15 11:53:13 +02:00
whatdoineed2do/Ray
37ce8dd607 [inputs] enable seek on non-live http streams 2019-05-12 11:08:42 +01:00
whatdoineed2do/Ray
bc8a156132 [library] accept https:// streams 2019-05-12 11:07:08 +01:00
ejurgensen
c36df4fb8e [raop] Bring back forgotten keep-alive for Apple TV's
The keep-alive was accidently disabled by the player refactor (after v26.5).
2019-05-12 00:11:07 +02:00
ejurgensen
a208604c86 [player] More comprehensive attempt at fixing short tracks (issue #733)
Replace reading_next and reading_prev with a list of sources, so that we can
deal with short tracks, i.e. tracks where reading ends before playback starts.
2019-05-11 23:16:22 +02:00
ejurgensen
f793ad9f3e [player] Fix incorrect player state while buffering (partial fix for #738)
Player would return PLAYER_PLAYING when resuming playback after a pause, but
it should initially return PLAYER_PAUSED because it is still buffering.
2019-05-10 16:47:18 +02:00
ejurgensen
1948dcb959 [player] Quick fix for short track segfault (issue #733)
With short tracks reading ends before playback starts, so event_read_eof comes
before event_play_start, which causes playing_now to point to a null
reading_now.

With this change it will point to a non-null reading_prev, but note that in the
hopefully rare case of multiple short tracks, the playing_now pointer will
still be incorrect.
2019-05-05 23:21:28 +02:00
Ali Graham
c7cab8ef6f [websocket] disable ipv6 in ws_init if disabled in config 2019-05-05 22:45:28 +09:30
ejurgensen
9fcc3d2c01 [pipe] Fix double free of metadata strings (fixes #724) 2019-05-04 23:07:22 +02:00
ejurgensen
bc4b5275f3 [input] Make sure marker list is always ordered by pos
Otherwise the read size in input_read() becomes invalid and we segfault.
2019-05-01 23:11:39 +02:00
ejurgensen
c7b8b94163 [alsa] Set quality in device_open() (possible fix for issue #720) 2019-04-12 22:24:48 +02:00
ejurgensen
ce2be1a724 [-] A bit of cleaning up 2019-04-10 22:38:48 +02:00
ejurgensen
dc65cb5b76 [alsa] Make sync and sync evaluation period configurable 2019-04-09 21:45:16 +02:00
ejurgensen
40934e7162 [cast] Remove/disable some unused code
Leaving some of the MEDIA commands in, even though they are not used any more.
Might come in handy later.
2019-04-09 21:03:14 +02:00
ejurgensen
55d9d9e6bd [xcode/artwork] Drop support for ffmpeg legacy versions 2019-04-08 22:06:56 +02:00
ejurgensen
b33e2665a1 [xcode] Hardcode png/jpeg pix formats (fix for #717)
ffmpeg changed the behaviour of avcodec_default_get_format() so that it picks
AV_PIX_FMT_MONOBLACK instead of AV_PIX_FMT_RGB24 for the png encoder. That
makes the function of no use to us, so now the pix formats are just hardcoded
in the settings instead.
2019-04-08 21:30:29 +02:00
ejurgensen
02cd65a992 [alsa] New resample-based sync correction 2019-04-08 00:50:20 +02:00
ejurgensen
781a3c16ed [cast] Remove use of PAUSE, doesn't work with the mirroring app 2019-04-05 23:06:05 +02:00
ejurgensen
2c778a4da0 [cast] Remove check for appid, the session id check should suffice 2019-04-04 21:20:39 +02:00
ejurgensen
53780a7ef3 [xcode] Make sample rate + channels variable
This change is preparation to use ffmpeg's resampling capabilities to keep local
audio in sync (by up/downsampling slightly). This requires that sample rates are
not fixed for a transcode profile.

Added benefit of this is that we don't need quite as many xcode profiles.
2019-04-02 22:47:11 +02:00
ejurgensen
413ce25ec6 [cast] Fixup print mask 2019-03-28 23:22:49 +01:00
ejurgensen
9836280029 [player] Fix issue where sync timestamps are incorrect after pb_suspend() 2019-03-28 23:06:45 +01:00
ejurgensen
f1493db069 [player] Fix bug where device is always deselected before db_speaker_save() 2019-03-28 10:47:58 +01:00
ejurgensen
5f84fefd1b [player] Remove pause timer remnants (moved to input/output in prev commit) 2019-03-27 22:48:09 +01:00
ejurgensen
d10e8ab1a2 [player] Fix proceed to next if track cannot be opened 2019-03-27 22:29:28 +01:00
ejurgensen
9773d9b840 [cast] Fallback if new mirroring app not present + metadata (not working) 2019-03-26 23:13:09 +01:00
ejurgensen
6930fdb28d [alsa] Fix memleak: Missing free 2019-03-26 22:08:15 +01:00
ejurgensen
4a664cfa9f [player] Fix playback start not showing in some clients 2019-03-24 22:53:01 +01:00
ejurgensen
ca56ac25ed [input] Forgot to not timeout if player actually did read 2019-03-23 23:41:09 +01:00
ejurgensen
1b0892a53a [player] Fix player losing quality + invalid return values from source_read() 2019-03-23 23:10:23 +01:00
ejurgensen
7d0ae01e84 [raop] Fixup forgotten free of pktbuffer 2019-03-22 23:25:34 +01:00
ejurgensen
aa36353480 [player] Fixup crash if playback stops while sending metadata 2019-03-22 23:24:11 +01:00
ejurgensen
95deef9c06 A bit of scan-build fixup 2019-03-22 22:15:13 +01:00
ejurgensen
4fb45e84f2 [player/outputs] New metadata handling (wip) 2019-03-18 23:06:08 +01:00
ejurgensen
ab0a6055b9 [input] Refactor metadata handling + add playback wait timeout
Previously input_metadata_get() would retrieve artwork from the source being
read currently, which might not be the one that triggered the FLAG_METADATA
event. So to fix this the metadata is now read by the input module itself when
the METADATA event happens, and the result is stored with the marker.

The commit also includes a timer so that the input thread does loop forever
if the player never starts reading.

Also some refactoring of metadata + abolish input_metadata_get and
input_quality_get. The latter in an attempt to treat the two in the same way.
2019-03-18 23:06:08 +01:00
ejurgensen
992ab90876 [xcode] Fix missing "&" 2019-03-18 23:06:08 +01:00
ejurgensen
b8e0280567 [outputs] Add a 10 sec stop timer + drop playback_stop()
In the output implementations playback_stop() was somewhat redundant,
since device_stop() does the same.

The timer should make sure that we always close outputs (previously
they were in some cases kept open).

The commit also includes some renaming.
2019-03-18 23:06:08 +01:00
ejurgensen
e3d39cff9b [player] Fix incorrect setting of buffer size to outputs 2019-03-18 23:06:08 +01:00
ejurgensen
f7096890f6 [player] Fix incorrect calculation of timestamp due to integer overflow 2019-03-18 23:06:08 +01:00
ejurgensen
daf7d755eb [input] Fix input writing too slowly for buffer to fill up after underrun
After an underrun the player doesn't read, so that meant input_wait would
wait a second before allowing the input to write, even though the input_buffer
was not full
2019-03-18 23:06:08 +01:00
ejurgensen
9b31264a3c [xcode] Use av_get_bytes_per_sample instead of av_get_bits_per_sample
av_get_bits_per_sample(ctx->settings.audio_codec) may return 0 with some codecs
2019-03-18 23:06:08 +01:00
ejurgensen
01797662de [cast] Fix segfault from cast_master_session not being reset 2019-03-18 23:06:08 +01:00
ejurgensen
f8b0147b12 [cast] First draft of Chromecast based on RTP (instead of mp3)
Includes adaptions to modified outputs interface
2019-03-18 23:06:08 +01:00
ejurgensen
9b6a892984 [rtp] Extra commenting about the RTP header 2019-03-18 23:06:08 +01:00
ejurgensen
d762bd0a56 [raop] master_session_free should allow null as argument 2019-03-18 23:06:08 +01:00