Commit Graph

4378 Commits

Author SHA1 Message Date
ejurgensen
6eb01f8ffc [outputs] Remove incorrect NULL return if packet buffer seqnum is 0
Since seqnum wraps around it should be ok to call rtp_packet_get() even when
session->seqnum is 0.
2020-11-03 23:44:22 +01:00
whatdoineed2do/Ray
7917695676 [db] add LISTENER_DATABASE for db_pl_*() on CRUD 2020-11-03 10:12:42 +00:00
whatdoineed2do/Ray
827921a028 [db] update db_statement_run() to accepts update events like db_query_run() 2020-11-03 09:28:14 +00:00
nia
4cdeb1afea Remove unnecessary check for FreeBSD
The non-timerfd code path depends on SIGALRM being defined, so signal.h
always needs to be included.

This allows forked-daapd to build and run on NetBSD and probably other
BSD systems too.
2020-11-02 15:07:17 +01:00
Christian Meffert
3395773c9f
Merge pull request #1105 from chme/rescan-metadata
[spotify] Force metadata update on library "metarescan" update
2020-10-24 09:57:40 +02:00
ejurgensen
c20b85a6d9 [artwork] Always stash results of http requests in cache, even if negative
This is an attempt to be nice to peers, so that we don't make many similar
requests to e.g. Discogs. This could happen via proces_items() for an album
where we have the same artwork url for each track, and if it was 404 we
would continue attempting the same request for each track.
2020-10-20 23:22:49 +02:00
ejurgensen
0383f19e9f [artwork] Avoid repeating online search requests with same query
This changes online_source_search_check_last() so that it also works if the
last search query was unsuccesful, i.e. last_artwork_url was NULL.
2020-10-19 22:34:26 +02:00
ejurgensen
f48fae20e2 [db] Remove unused db_speaker_clear_all() 2020-10-19 20:39:03 +02:00
ejurgensen
d2d9b78ae7 [player] Don't unselect disappeared speakers on exit/restart
With the new speaker selection philosophy we aim to preserve user choice, so we
shouldn't unselect speakers just because they happen to be switched off when
the server is restarted.
2020-10-19 20:36:32 +02:00
ejurgensen
ce9fbff8f5 [artwork] Use cache stash to avoid making repeated requests
E.g. for an album we would for each track request artwork from Spotify, even
though the requests are similar and the first one didn't give a result.
2020-10-19 20:25:01 +02:00
ejurgensen
3233aefa8a [scan] Improve logging of inotify events 2020-10-19 20:24:31 +02:00
chme
bda2cff5db [spotify] Force metadata update on library "metarescan" update 2020-10-18 10:35:51 +02:00
chme
d29f56f3eb [httpd] Add "max-age=0" to Cache-Control header to force browsers to
always revalidate cached content
2020-09-27 19:13:07 +02:00
chme
20a2c96b2a [jsonapi] Add boolean field "random" to playlist
The new field "random" is true for smart playlists with an order by
clause "random", otherwise it is false. This allows clients to handle
randomly generated playlists differently from static playlists.
2020-09-27 19:13:07 +02:00
chme
dd811e6c70 [jsonapi] Prevent browsers to cache playlist tracks
The tracks of a smart playlist might change between library rescans.
Allowing them to be cached based on the last rescan timestamp
("Last-Modified" header in the response) leads to potentially showing
incorrect track listing if a cached version is used. Thus the response
for playlist tracks should never be cached by the browser (this is
achieved with setting "Cache-Control" header to "no-store").
2020-09-27 19:13:07 +02:00
Tucker Kern
39b14ff8d4 Use relative paths in web interface to ease reolcation or proxying 2020-09-27 19:13:07 +02:00
chme
023436c959 [settings] Add support for (optional) default values and remove default
value functions for artwork
2020-09-27 19:13:07 +02:00
chme
e86aa95d89 [settings] Add new setting for "webinterface"
- add settings to show/hide menu items in the top nav bar
- add setting to show/hide cover artwork in album lists
2020-09-27 19:13:07 +02:00
Christian Meffert
1258427afc
Merge pull request #1090 from chme/spotify-release-date
Map release date for Spotify tracks + fix release data being off by one day
2020-09-24 06:44:23 +02:00
ejurgensen
81c776fc4a [player] Fixup commit 1f45967 2020-09-21 17:18:09 +02:00
ejurgensen
1f45967481 [player] Fix autoselect so it also applies when there are no selected devices (second attempt)
Second attempt at fixing regression in version 27.2. First attempt was commit 2345885.

Closes #1091.
2020-09-21 17:12:18 +02:00
chme
a28c6ba1d6 [spotify] Scan album info during saved playlists scan (if available) 2020-09-19 08:00:26 +02:00
ejurgensen
513a09e6d1 [player] Reduce log severity of devices not starting 2020-09-06 23:18:08 +02:00
ejurgensen
2345885f19 [player] Fix autoselect so it also applies when there are no selected devices
Regression in version 27.2. Closes #1091.
2020-09-06 00:12:15 +02:00
ejurgensen
500f57ba1a [player] Clear up return value of outputs_start()
Should return 0 if no devices at all, or if none selected. Should not return
negative from failure to stop unselected devices.
2020-09-06 00:08:40 +02:00
chme
451e0bf10b [spotify/jsonapi] Map date_released for Spotify tracks; fix date
released being off by one day in the JSON API
2020-09-01 20:37:10 +02:00
chme
6f5822e461 [jsonapi] Map fields time_added, time_played, seek for album / artist 2020-08-30 09:08:41 +02:00
chme
a74a3e5add [db] Add fields time_added, time_played, seek to group object 2020-08-30 09:08:41 +02:00
chme
382467eb9c [jsonapi] Map additional metadata for artist and album 2020-08-30 09:08:41 +02:00
chme
8afae4a41b [db] Fetch additional metadata for artist and album in group query 2020-08-30 09:08:41 +02:00
ejurgensen
bb9536ef44 [scan] Early skip if file should be ignored
Avoids needless logging, e.g. from failed lstat(). Closes #1078.
2020-08-22 21:38:12 +02:00
ejurgensen
c5df688caf [alsa] Align commit bfe99e5 with coding style 2020-08-22 21:36:10 +02:00
whatdoineed2do/Ray
bfe99e56f7 [alsa] use alsamixer volume adjustment algorithm 2020-08-22 21:25:17 +02:00
ejurgensen
11de4c09bc [misc] Also have buildopts[] have disabled features + regex 2020-08-19 20:12:06 +02:00
ejurgensen
a5ddb3c85d [player] Fix for volumes of unselected devices being reduced
Closes #1077
2020-08-13 20:48:48 +02:00
ejurgensen
de5060bc57 [db] Remove a FIXME, not much of an issue 2020-08-10 23:03:37 +02:00
ejurgensen
d77927d3c3 [xcode] Fix incorrect error check, unsigned int can't be negative
av_find_best_stream() returns an int, with negative being an error

Credit lgtm.com
2020-08-10 22:56:08 +02:00
ejurgensen
d9177dfb25 [artwork] Remove some superfluous checks
Credit lgtm.com
2020-08-10 22:50:04 +02:00
ejurgensen
a0876e532c [websocket] Prefix globals with websocket_
Avoids e.g. "event" being both the name of a global and a parameter name in
send_notify_reply()

credit lgtm.com
2020-08-10 22:36:00 +02:00
ejurgensen
23be5aa749 [config] Name change to avoid overlapping/hiding global variable "cfg"
credit lgtm.com
2020-08-10 22:29:02 +02:00
ejurgensen
5e6b5fbe8a [httpd/logger] Use gmtime_r/localtime_r instead of gmtime/localtime
gmtime and localtime are not thread safe

credit lgtm.com
2020-08-10 22:23:21 +02:00
ejurgensen
fada4c0ee7 [lastfm] Fix incorrect error condition test 2020-08-10 22:08:35 +02:00
ejurgensen
47779e59e7 [input] Fix memleak of path when seting up a new input file
Credit @whatdoineed2do

Closes #1067
2020-08-10 22:01:49 +02:00
whatdoineed2do/Ray
76d35f5abc [scan] bulk_scan() counter reset before processing any library dirs 2020-08-09 22:33:23 +02:00
ejurgensen
55d5289c05 [player] Add settings for persisting repeat, shuffle and consume
Closes issue #963
2020-07-24 20:15:03 +02:00
ejurgensen
3245b81e60 [settings] Add shorthand macros for getting/setting options 2020-07-24 20:15:03 +02:00
whatdoineed2do/Ray
d567bd004a [db,conf,json] new backup endpoint 2020-07-24 20:07:42 +02:00
ejurgensen
a71444d3e1 [player] Limit auto reconnection + add option for user override
With this commit auto reconnection per default will only be done for ATV4s and
HomePods. Reconnection is not always desirable, for instance if the device cuts
the connection because it is busy with something else, ref. issue #934.

The commit also adds an option to override auto reconnection, thus either
enabling it for other devices or disabling it for affected devices.
2020-07-24 00:10:26 +02:00
ejurgensen
e8bdcd2365 [xcode] Use ffmpeg's "image2pipe" muxer instead of "image2"
With ffmpeg 4.3 it seems image2 no longer works for non-file output, so use
image2pipe instead.

Closes #1061
2020-07-19 23:52:42 +02:00
ejurgensen
d0a7d5114b [http] Drop own Shoutcast metadata requestor, rely on ffmpeg now
ffmpeg/libav has been capable of this since approx 2016, so the fallback
functions can be dropped now.

Also means we don't add automatically add Icy-MetaData: 1 to request
headers any more.
2020-07-17 00:08:16 +02:00
ejurgensen
3e707c4060 [http] Make libcurl a hard requirement
Always using libcurl makes the code simpler, plus makes sure we always have a
https client
2020-07-16 23:30:05 +02:00
ejurgensen
941fb47c1d [player] Only resurrect speakers that fail during playback
Fix bug where we would resurrect speakers, incl restart playback, if the speaker
disconnected after a flush.

Closes #1057
2020-07-16 23:08:58 +02:00
ejurgensen
c4d6e1c251 [raop] Extra logging of invalid retransmit headers 2020-07-16 21:30:48 +02:00
whatdoineed2do/Ray
c6c1e8f9ee [alsa] dump_card() includes ALSA device name
Include ALSA's device name in the ALSA modules 'info' logging to help
identify sound devices as seen by the system for assisting config setup

Many configs use ALSA's hw ids to refer to device but ALSA can also use
device names:

    laudio: Available ALSA playback mixer(s) on hw:0 CARD=Intel (HDA Intel): 'Master' 'Headphone' 'Speaker' 'PCM' 'Mic' 'Beep'
    laudio: Available ALSA playback mixer(s) on hw:1 CARD=E30 (E30): 'E30 '

From the example above can use these ALSA names interchangably:
    'hw:0' and 'hw:Intel'
    'hw:1' and 'hw:E30'
2020-07-14 21:55:46 +01:00
ejurgensen
67f16138c5 [pipe] Change int64_t print mask for log message
Removes compiler warning
2020-07-05 20:59:03 +02:00
ejurgensen
5e60527f40 [spotify] Add an API endpoint for logging out of Spotify 2020-07-05 20:43:51 +02:00
ejurgensen
1b74966ef1 [db] Remove HAVE_SPOTIFY_H conditionals, not required
The db functions don't depend on the Spotify library, so remove conditionals
2020-07-05 20:43:51 +02:00
Christian Meffert
3fd812ef2f
Merge pull request #1008 from chme/web_next
Player web interface v0.7.2
2020-07-05 10:59:15 +02:00
Christian Meffert
0e8e8564bb
Merge pull request #1042 from chme/player-prev-next
[player/jsonapi] Do not report error on skip next/prev if end/start of queue is reached
2020-07-05 10:58:50 +02:00
Christian Meffert
07f3f808c7
Merge pull request #1041 from chme/ws-header-space
[ws] Set websocket header data space
2020-07-05 10:57:54 +02:00
Christian Meffert
db51d59be4
Merge pull request #995 from whatdoineed2do/json-add-by-query-with-limit
[jsonapi] support 'limit' on 'api/queue/items/add?expression='
2020-07-03 20:09:00 +02:00
chme
56564dec87 [ws] Set header data space to 4096
Hopefully fixes the "LWS Ran out of header data space" error seen in the
Chrome browser.
2020-07-03 09:53:39 +02:00
chme
9616cfdf0c [jsonapi] harmonize "channels" attribute in queue item and track object 2020-07-01 07:32:12 +02:00
ejurgensen
a2ec7ee28f [outputs] Fix gcc 10 complaining about multiple definitions
outputs_master_volume, output_device_list and output_buffer were defined in
outputs.h, but should only have been declared with extern.

Solve it by making output_buffer static/non-global (wasn't used anyway), and
the two others are now returned by functions.
2020-06-29 00:19:03 +02:00
ejurgensen
69fbd7b32a [library] Fix gcc 10 warning
And avoid a year 10000 doomsday
2020-06-28 23:23:52 +02:00
chme
8e333c7978 [player/jsonapi] Do not report error on skip next/prev if end/start of
queue is reached
2020-06-28 11:56:51 +02:00
whatdoineed2do/Ray
dd2ee019a8 [streaming] drop client mp3 streaming connections if libav has mp3 encode 2020-06-11 13:11:12 +01:00
ejurgensen
8046f13698 [outputs] Fix issue where speaker becomes unselected after pause (flush) 2020-05-30 21:31:27 +02:00
ejurgensen
5d22f11b0e [player/outputs] Fix for speaker selection and volume adj (closes #1011)
* Make sure that vol_adjust() bases adjustments on the same speakers that the
  user sees as active
* If a speaker fails during activation we unselect it, so that we don't keep
  trying to start it, so we find a new master volume if required, and so it is
  possible for the user to reselect it.
2020-05-27 23:02:29 +02:00
ejurgensen
a9a6f4b584 [outputs] Check for session in outputs_device_authorize() 2020-05-27 23:02:29 +02:00
ejurgensen
384b1171d9 [raop] Change device verification so we don't risk stale sesssions
Before, if a user never verified the device, we would have a device->session
even though the device was not streaming and was in a failed state.

This solution should be more clean and in line with the overall principle that
we only have a session when communicating with the device.

Also includes a bit of code refactoring.
2020-05-27 23:02:29 +02:00
ejurgensen
138d482510 [dummy] Add capability to mock device verification for testing 2020-05-27 23:02:29 +02:00
ejurgensen
d6ec6afb5b [outputs] Remove outputs_authorize()
Replaced by outputs_device_authorize()
2020-05-26 23:21:06 +02:00
ejurgensen
3cca778419 [player] Stop using outputs_authorize() so it can be removed
Use outputs_device_authorize() instead
2020-05-26 23:20:29 +02:00
ejurgensen
d18e49f59b [jsonapi] Make PUT /api/outputs/x capable of device verification 2020-05-26 22:46:49 +02:00
ejurgensen
18e75c2445 [player] Add player_speaker_authorize()
A more straightforward function for device verification, using the new
outputs_device_authorize() function.
2020-05-26 22:45:38 +02:00
ejurgensen
2fa2d33602 [outputs] Add a more standard device authentication function
outputs_authorize() has two issues, one that the caller can't specify device
(problem if there are two devices waiting for verification), the other that it
didn't offer a standard callback, so difficult to catch failure/success.
2020-05-26 22:42:06 +02:00
ejurgensen
9308f81224 [player] Get rid of listener notifications direct from outputs
Try to consolidate in player.c
2020-05-25 22:43:08 +02:00
ejurgensen
010185eab5 [player] Another way of implementing commit 3b033e48 2020-05-25 22:43:04 +02:00
ejurgensen
3b033e48ee [player] Consolidate listener handling in one player trigger - wip
The goal is to make the listener invokation more unified and less ad hoc. Also
reduce risk of blocking/deadlocking player thread.
2020-05-25 22:42:22 +02:00
ejurgensen
3885b92111 [worker] Remove not-so-useful log message 2020-05-25 22:42:22 +02:00
ejurgensen
38ed9e59ad [listener] Update so that comments etc match actual use 2020-05-25 22:42:22 +02:00
ejurgensen
37521406f3 [input] Split file_http.c input into file.c and http.c
The common code is by now limited, and there is a lot of http-specific code.
2020-05-19 23:06:36 +02:00
ejurgensen
8acb2a647d [http] Don't set ICY metadata if they are just empty strings
An empty string will mean that m3u tags won't get used (unless m3u_override is
configured), but they should be used, since they are probably better than an
empty string.
2020-05-19 23:06:36 +02:00
ejurgensen
a69cc65ff6 [input] Download StreamUrl resource async so input thread is not blocked 2020-05-19 23:06:36 +02:00
ejurgensen
28df2fb0f9 [input] Extra comment 2020-05-19 23:06:36 +02:00
ejurgensen
552c201cf3 [artwork] Change cache strategy for artwork_url_get
Credit @sfeakes
2020-05-19 23:06:36 +02:00
ejurgensen
b44e5b3ede [input] Add handler/parser for StreamUrl tags 2020-05-19 23:06:36 +02:00
ejurgensen
ca82857bfe [artwork] Add artwork_extension_is_artwork() + some fixup/renaming 2020-05-19 23:06:36 +02:00
ejurgensen
d2ac216f47 [http] Change name of struct field for StreamUrl
Should not be called artwork_url, since it also can link to other ressources.

Also some fixup, e.g. use new macros.
2020-05-16 00:13:31 +02:00
ejurgensen
d073781445 [json] Add endpoint to delete a setting (reset to defaults) 2020-05-16 00:13:10 +02:00
ejurgensen
bb434297ca [artwork] Be more forgiving towards incorrect mime content-types 2020-05-15 23:10:43 +02:00
ejurgensen
360e46683b [input] Add a simple input for testing timing 2020-05-12 22:25:38 +02:00
ejurgensen
e570cbdcbd [player] Use input progress metadata to update clients
Before, we were ignoring progress metadata, and we were also updating clients
and db too early with input metadata (right when read from the input, instead of
waiting until playback (speakers) were at that position.

This change adds a complicated async chain of events from when the update is
received.
2020-05-12 20:16:15 +02:00
ejurgensen
68022d5c10 [dacp] Change update id's more often
Sometimes the artwork changes, but the album does not (especially likely if we
are in a row of "Unknown album"-tracks)
2020-05-11 21:39:02 +02:00
ejurgensen
63ab446bd5 [pipe] Fix issue where Shairport progress metadata was ignored
Sometimes the progress has a negative position, which we were incorrectly
disregarding.
2020-05-11 21:39:02 +02:00
ejurgensen
1921a2401f [artwork] Fix memleak in source_item_pipe_get
Queue item not being freed on succes
2020-05-11 21:37:29 +02:00
ejurgensen
97a2165666 [lastfm] Fix forgotten include in commit de1b1c3
Closes #1001
2020-05-11 19:19:28 +02:00
ejurgensen
a6cb70fd66 [artwork] Don't use group handlers if unknown group (artist/album) 2020-05-11 17:24:05 +02:00
ejurgensen
de1b1c3805 [cfg] Remove hardcoding of strings for unknown album etc
Now configurable, since we don't have real localisation
2020-05-11 17:02:14 +02:00
whatdoineed2do/Ray
69c56f5971 [jsonapi] items/add?expression can take 'limit' param 2020-05-09 20:04:27 +01:00
whatdoineed2do/Ray
c5fe0d217b [jsonapi] support 'limit' on 'api/queue/items/add?expression='
Extend to support SMART query allows 'limit'

  curl -X POST "http://localhost:3689/api/queue/items/add?expression=genre+is+%22Pop%22+order+by+time_added+desc+limit+3"
2020-05-09 17:09:03 +01:00
whatdoineed2do/Ray
4147e302a8 [SMARTPL] add 'random' in 'order by' clause
'random' tag in 'order by' clause to request SQLite to random select data rows from result set

    "random 3 pop" {
      genre is "Pop" and
      media_kind is music
      order by random desc
      limit 3
    }
2020-05-09 15:47:30 +01:00
ejurgensen
86d49a7028 [artwork] Don't log Spotify artwork errors if user is not logged in
Ref issue #986
2020-05-05 16:23:55 +02:00
ejurgensen
07158cf2d5 [raop] Fix incorrect log domains 2020-05-05 16:06:06 +02:00
ejurgensen
b10434627a [player] Remove outdated comment 2020-05-05 16:04:39 +02:00
ejurgensen
778d6f4999 [config] Change speaker_autoselect default to no
The changes in commit 6612899 mean that we now do more to maintain selection of
a user selected speaker, even if it fails or is powered off for a while. Thus
this option is no longer relevant.

The option was also never very good for people with many speakers.
2020-05-04 17:41:57 +02:00
ejurgensen
b6dfb48100 [raop] Adjust keep alive interval 30s -> 25s
Testing with Homepod/ATV points at 25s working better, see:
https://github.com/ejurgensen/forked-daapd/issues/734#issuecomment-622959334
2020-05-03 23:15:44 +02:00
ejurgensen
57ff2e3124 [raop] Fix bug where we send start packets during teardown
The teardown send function was setting state to CONNECTED, which made
raop_write() believe that the device had just joined.
2020-05-03 00:00:26 +02:00
ejurgensen
661289990c [player] Migrate a lot of speaker handling to outputs.c
Moves speaker selection, volume handling and startup to outputs.c, plus adds
the ability to "resurrect" a speaker that disconnects.

The purpose of moving the code is to concentrate device handling in one place.

Also changes how we deal with speaker selection. The player will now generally
not alter a user selection, even if the device fails. The purpose of this is to
maintain selection both if the device briefly fails, and if the user switches
off the device (we stop playback) and later turns it on + starts new playback.
2020-05-03 00:00:18 +02:00
ejurgensen
0e19102efd [artwork] Define MEDIA_KIND_ALL as USHRT_MAX instead of individual num values 2020-05-02 00:52:52 +02:00
ejurgensen
37b4188c3c [artwork] Generalize handler configuration of supported media_kinds 2020-05-02 00:52:52 +02:00
ejurgensen
9d1f15d3c2 [db] Define MEDIA_KIND_ALL 2020-05-02 00:52:52 +02:00
whatdoineed2do/Ray
329c0620fc [artwork] query playlist-wide artwork if availble 2020-04-30 20:28:36 +02:00
whatdoineed2do/Ray
5a872dc436 [library] rss pulls channel->image->url if available 2020-04-30 20:28:36 +02:00
whatdoineed2do/Ray
e7c62086a2 [db] add artwork_url to playlist_info 2020-04-30 20:28:36 +02:00
whatdoineed2do/Ray
9a0c7e9ad2 [db] v21.4 - add playlist..artwork_url column 2020-04-30 20:28:36 +02:00
ejurgensen
d84ea2008f [pipe] Increase metadata pipe max read size + don't abort if exceeded
Closes #976
2020-04-29 23:02:05 +02:00
ejurgensen
a14a8458aa [scan] Remove iTunes_CDDB_IDs as album ID (closes #972)
Seems this ID is not reliable, it can be semi-empty, e.g. with a value of '16++'
2020-04-29 20:57:13 +02:00
ejurgensen
489b90e067 [rsp] Add comments with RSP sample requests 2020-04-29 20:55:46 +02:00
whatdoineed2do/Ray
52800b419a [smartpl] support song_length 2020-04-29 11:53:29 +01:00
ejurgensen
6d9cf5c1d7 [rsp] Fix commit 24e3ac1 so it filters properly (ref issue #944) 2020-04-28 22:27:36 +02:00
ejurgensen
d3fb451960 [player] Save seek position more often
Makes it possible for the user to resume playback from the correct position if
for instance the speaker disconnects -> pb_abort is called.
2020-04-27 21:29:51 +02:00
ejurgensen
153eb40b6d [db] Remove some definitions of ARTWORK_XXX
The artwork db field should only be used to save media file artwork metadata,
which mostly means whether it has embedded artwork or not. It should not be
used to save where we found artwork for the file, since that is not static.

So this commit removes for instance ARTWORK_OWN, ARTWORK_DIR etc., which we
weren't using anyway.
2020-04-25 22:07:10 +02:00
ejurgensen
daf3922650 [artwork] Remove http instance of artwork_source for embedded
Commit 8510f7e should mean that it is not required any more, since we won't be
probing http streams unless we know they have artwork.
2020-04-25 21:59:18 +02:00
chme
8510f7e5f2 [artwork] Only try embedded artwork if dbmfi has ARTWORK_EMBEDDED flag 2020-04-25 21:58:21 +02:00
ejurgensen
946853fdf4 [rss] Change feed virtual_path
Instead of /file:/https:/domain.podcast set it to /https://domain.podcast.com/xxxx
2020-04-25 21:51:00 +02:00
whatdoineed2do/Ray
f23ef1aa9c [library] RSS - protect against invalid pubdate 2020-04-24 19:04:45 +02:00
ejurgensen
b00e2655f0
Merge pull request #954 from chme/rss-scanner
[rss] Always use RSS feed title and author for album and artist
2020-04-24 19:02:48 +02:00
ejurgensen
7a9f66538a [raop] Extra comments + logging changes 2020-04-24 18:49:33 +02:00
ejurgensen
b78282db38 [player] Only send startup metadata once 2020-04-24 18:46:17 +02:00
ejurgensen
07972c28f7 [raop] Only send exact types of metadata requested by device
Airport Express announces md=2, meaning only progress metadata, so we shouldn't
send artwork and text metadata to it.
2020-04-24 18:46:17 +02:00
ejurgensen
4491928466 [player] Don't send metadata before the input has started
Otherwise we have a race condition between the worker and the input thread. If
the worker returns with metadata before the input thread has started reading,
then pb_session.pts will still be zero, which means metadata->pts will be zero
in finalize_cb(). That is an invalid time to give the outputs.
2020-04-24 18:46:17 +02:00
ejurgensen
e2205e2399 [raop] Fix calculation of metadata progress values 2020-04-24 18:49:03 +02:00
ejurgensen
8070c2f68c [outputs] Change rtp timespec arg to take value instead of pointer 2020-04-24 18:46:17 +02:00
ejurgensen
349b05bd4f [raop] Use progress metadata to keep ATV4/Homepod connection alive (issue #734)
Instead of using OPTIONS we use SET_PARAMETER with progress metadata to avoid
disconnects from Apple TVs, Homepods and possibly also Airport Expresses.
2020-04-24 18:46:17 +02:00
ejurgensen
01033c0662 [cast] Fix incorrect log level 2020-04-22 00:00:09 +02:00
ejurgensen
886557f946 [cast] Better logging of app not launching 2020-04-20 21:40:39 +02:00
Christian Meffert
a1cf32172a
Merge pull request #955 from chme/jsonapi-track-playlists
Add JSON API endpoint to fetch playlists for a track
2020-04-19 07:21:58 +02:00
chme
df0c36f4f4 [jsonapi] Add new endpoint to fetch playlists for a track
The new endpoint `api/library/track/{id}/playlists` allows to fetch all
playlists that contain the track.
2020-04-19 06:44:13 +02:00
ejurgensen
aa9a08aedb [alsa] Improvements to commit 0a08b93 2020-04-18 21:35:47 +02:00
ejurgensen
515232e7fc
Merge pull request #950 from whatdoineed2do/alsa-device-listing
[alsa] option to list alsa devices/mixers suitable for playback
2020-04-18 20:54:28 +02:00
whatdoineed2do/Ray
0a08b93c24 [alsa] list alsa devices/mixers suitable for playback 2020-04-18 11:36:41 +01:00
chme
5074b158bd [rss] Always use RSS feed title and author for album and artist 2020-04-18 11:46:44 +02:00
Justin Wong
c0b3782578 Updated websocket.c to notify once per event cycle 2020-04-18 15:11:39 +08:00
ejurgensen
3994ef0f2e [jsonapi] Add endpoint for playlist update of query_limit
Makes it possible to set number of podcasts retrieved for RSS feeds.

Closes #951.
2020-04-17 20:10:58 +02:00
ejurgensen
95bc6e3e70
Merge pull request #946 from whatdoineed2do/scan-rss-rescan-fix
[library] RSS bug fix - meta rescan resets "play count" and other fields
2020-04-17 11:21:29 +02:00
whatdoineed2do/Ray
3d869b0857 [library] RSS - reuse db file id when performing meta scan
Fixes issue when performing an 'api/rescan' (results in RSS_SCAN_META scan type
in this module) that would result in a library_media_save() -> a readd even for
entries that already exist in db.  This would result in dropping db record, incl
play_count etc instead of an update
2020-04-17 09:44:51 +01:00
ejurgensen
24e3ac1a80 [rsp] Filter out non-file sources since they can't be played 2020-04-15 22:05:19 +02:00
ejurgensen
1c08b75ce5 [httpd] Improve log and error message 2020-04-15 16:00:18 +02:00
ejurgensen
19358dc869 [mxml] Simplify mxml workarounds 2020-04-15 15:59:15 +02:00
ejurgensen
5ad5f85cc4 [mxml] Workaround mxmlNewTextf/mxmlSaveString segfault
Occurs on amd64 Debian 10.x with mxml 2.12
2020-04-15 15:59:15 +02:00
Justin Wong
938a19ff15 Update volume on device reconnect 2020-04-14 23:49:34 +08:00
ejurgensen
805cd16442 [pairing] Remove dead assignment 2020-04-13 21:39:59 +02:00
ejurgensen
90eb333f03
Merge pull request #933 from nhannam/raop-configurable-ports
[raop] Allow configuration of raop control and timing ports
2020-04-12 19:49:49 +02:00
chme
14b4081769 [artwork] Ignore streams with media kind != music in artwork sources
"stream", "discogs", "coverartarchive", "spotify"
2020-04-12 10:49:56 +02:00
Nigel Hannam
5d6c8d7b5b [raop] Fix spelling mistakes 2020-04-11 22:44:41 +01:00
Nigel Hannam
5f3103fae7 [raop] Move config into new airplay_shared block 2020-04-11 22:30:27 +01:00
ejurgensen
08b2eb8d4c [dacp/player] Change support for prevent-playback and busy (ref issue #934)
Adds support for dcmp.device-busy, and also changes handling of
device-prevent-playback so it matches iTunes better.
2020-04-10 21:01:41 +02:00
whatdoineed2do/Ray
e5ff30e11b [scan] support #EXTGENRE: 2020-04-09 17:43:09 +01:00
Nigel Hannam
19d1d4f67b [raop] Allow configuration of raop control and timing ports 2020-04-08 21:16:00 +01:00
ejurgensen
c4cc366e6f [artwork] Avoid slow nowplaying artwork response -> slow Remote connect
Lower priority of potentielly slow embedded artwork retrieval, plus make sure
we tell the transcode module about http data kind, so that it can probe
quicker.
2020-04-07 22:54:10 +02:00
ejurgensen
3a897afc44 [xcode] Use smaller probe size for remote tracks for quicker startup 2020-04-07 21:44:52 +02:00
ejurgensen
a8e6522a3c [xcode] Change workaround in commit a0ac66e for AIFF issue
This solution matches what we do for 'in' filter
2020-04-07 21:24:31 +02:00
ejurgensen
a0ac66e020 [xcode] Workaround for ffmpeg detecting channel_layout = 0 for AIF 2020-04-07 20:55:17 +02:00
whatdoineed2do/Ray
0baa0ac552 [smartpl] add samplerate 2020-04-07 18:46:33 +01:00
whatdoineed2do/Ray
1b354121c5 [smartpl] support birate,bits_per_sample,codectype 2020-04-05 14:42:01 +01:00
ejurgensen
4fcd0ba781 [daap] Adjust user_agent_filter() so code matches intention 2020-04-04 21:25:14 +02:00
ejurgensen
5651ce7694 [library] Use item title from RSS feed 2020-04-04 21:07:16 +02:00
ejurgensen
dbc798da4f [-] Workaround for mxml 2.10 memleak
2.10's mxmlDelete memleaks, and mxml is used in many parts of forked-daapd. So
to avoid that we ship upstream's fixed version of mxmlDelete and use that.
2020-04-04 21:07:16 +02:00
ejurgensen
2d8521139c [library] Add action to library_schedule_callback()
Makes it possible for the caller to request that a previous callback is
replaced, so we don't end up with more and more callbacks. Also add other
options for future use.
2020-04-04 21:07:16 +02:00
ejurgensen
2af7296723 [library] Ignore RSS items without URL's 2020-04-04 21:07:16 +02:00
ejurgensen
1a45a2acda [db] Fix db_pl_delete so it won't delete files belonging to other pl's 2020-04-04 21:07:16 +02:00
ejurgensen
16a3b8878f [jsonapi] Change library_item_add, add delete pl and drop library_item_remove 2020-04-04 21:07:16 +02:00
ejurgensen
59fa33311d [library] Refactor RSS scanner 2020-04-04 21:07:16 +02:00
ejurgensen
b19314e814 [db] Add cleanup to db_pl_delete(), remove db_pl_purge() 2020-04-04 21:07:16 +02:00
ejurgensen
2ee5f6d747 [library] Change implementation of item_add, event cb and drop item_remove. 2020-04-04 21:07:16 +02:00
whatdoineed2do/Ray
5cddf0e347 [jsonapi] RSS support: new /api/library/item_{add,remove} endpoints for adding items to library - for RSS at this time and extend PL_ search and queries to incl PL_RSS 2020-04-04 21:07:16 +02:00
whatdoineed2do/Ray
10b10f8037 [daap] RSS support: podcasts visible on IOS Remote app
IOS appl generates request for itunes.extended-media-kind: 4,36,6,7 when
navigating "Podcasts" item on menu
2020-04-04 21:07:16 +02:00
whatdoineed2do/Ray
d40131d38d [scan] RSS support: new library source - RSS scanner; periodically updates RSS feeds as found in db once subuscribed. Auto translates apple podcasts to RSS link 2020-04-04 21:07:16 +02:00
whatdoineed2do/Ray
8b02ea9d6b [library] RSS support: new library interface item_{add.remove} and all library modules to register (timer) events 2020-04-04 21:07:16 +02:00
whatdoineed2do/Ray
57b0626906 [db] RSS support: new PL_RSS db value and new pl purge 2020-04-04 21:07:16 +02:00
Rosen Penev
08b055dd2b
websocket: add header for errno
fixes compilation under newer musl.
2020-03-29 20:51:19 -07:00
ejurgensen
f61dfa0529 [db] db_pl_delete_bypath() must also delete disabled playlists
Otherwise we end up with a bunch of disabled playlists in the db.
2020-03-29 00:33:44 +01:00
Christian Meffert
5bd32135ee
Merge pull request #916 from whatdoineed2do/json-playlist-play-count-update
[json] enable playlist play_count
2020-03-28 07:41:24 +01:00
ejurgensen
114881cd1c [misc] Add comment for commit 27138ed 2020-03-25 16:13:55 +01:00
uvjustin
27138edd55
Update misc.c
Allocate extra byte for null termination of string
2020-03-25 14:57:23 +08:00
ejurgensen
cfecb4a5f5 [scan] Also support nested smart playlists (closes issue #923) 2020-03-23 23:46:52 +01:00
whatdoineed2do/Ray
a31430f671 [jsonapi] album/playlist inc uses db specific methods 2020-03-23 13:42:46 +00:00
whatdoineed2do/Ray
286525a85c [db] inc playcount using filter 2020-03-23 13:39:59 +00:00
whatdoineed2do/Ray
1a912d9808 [jsonapi] enable album track play_count update 2020-03-23 13:39:59 +00:00
whatdoineed2do/Ray
a6d8d55bd4 [jsonap] new PUT /api/library/playlists/[[:digit:]]+/tracks endpoint
enable playlist tracks play_count updates: 'increment', 'reset', 'played'
2020-03-23 13:39:59 +00:00
chme
ec8ce91baa [jsonapi] Use synchronous pairing request command 2020-03-18 14:56:05 +01:00
chme
accab800ac [pairing] Refactor remote_pairing to use cmdbase
This allows to call a sync command that returns the outcome of a pairing
request. And that will be useful for the JSON API and the web interface.
2020-03-18 14:56:05 +01:00
ejurgensen
3b27d50f97
Merge pull request #907 from chme/artwork_remove_libspotify_refactor
Remove libspotify as artwork source + refactoring
2020-03-15 18:27:18 +01:00
chme
67fd555b52 [artwork] Refactor artwork_get_dir_image 2020-03-14 07:03:06 +01:00
chme
c75ff89769 [jsonapi] Do not fail on /api/library/playlists/0
The root playlist folder does not exist in the DB therefor add special
handling and return some fixed data.
2020-03-08 19:13:17 +01:00
Christian Meffert
1bf094ed81
Merge pull request #906 from chme/playlist_folder2
JSON API - Support for Playlist Folders
2020-03-08 07:31:09 +01:00
ejurgensen
51b7a8854c [scan] Add support for MUSICBRAINZ_ALBUMID tag (fixes issue #914) 2020-03-06 19:07:06 +01:00
ejurgensen
37510db748 [mdns] Fix possible incorrect library ID in _dacp._tcp (fixes #899)
If the library ID started with one or more 0's then it would not be printed in
the announcement, which meant that DACP commands would not work due to
incorrect ID.
2020-03-02 19:53:43 +01:00
whatdoineed2do/Ray
81f4834814 [http] leak fix for curl_slist_append() 2020-02-28 21:57:10 +00:00
ejurgensen
64c6007aad [db] Fix memleak from unexpected return value, closes issue #909
On success the function was returning SQLITE_OK = 100, not 0, which made
json_reply_library think that the operation failed.

Credit @whatdoineed2do
2020-02-25 21:58:18 +01:00
chme
6ba45e8d94 [artwork] Remove libspotify based artwork handler 2020-02-25 05:41:49 +01:00
chme
36ebf7d06c [jsonapi] Add support for playlist folders 2020-02-24 21:27:53 +01:00
ejurgensen
248f82f3c8 [db] Fixup fixup in commit #00de0a3 (upgrade dbvers to 21.3)
Forgot to include db_upgrade to v21.3
2020-02-23 21:26:00 +01:00
ejurgensen
1ed10771f1 [artwork] Get enablement of online srcs from settings
Settings will take care of consulting the cfg file now
2020-02-23 20:30:35 +01:00
ejurgensen
9b9d2d0fb7 [settings] Add handlers to set default settings, e.g. from the cfg file 2020-02-23 20:30:35 +01:00
ejurgensen
5736217315 [db] Change prototype of db_admin_getxxx() functions
Makes it possible for caller to distinguish between "not set" and "set to 0".
2020-02-23 20:30:35 +01:00
ejurgensen
afa1a07a42 [artwork] Fix handling of cache + enable online srcs via config
* Don't save artwork for permanent items (file + Spotify) to the stash. The
  stash is only for short term artwork.
* If a request comes with a different max_w/max then search the online source
  again.
* Make artwork requests thread-safe by mutex protecting the search history.
* Add config option
2020-02-23 20:30:35 +01:00
ejurgensen
c674f84497 [json] Make clients reload artwork when we have new http metadata 2020-02-23 20:30:35 +01:00
ejurgensen
ad9ebb75c6 [artwork] Refinement of online artwork search
* Add system to avoid making too many futile requests + repeated requests
* Fixup Spotify artwork search (use type=track, type=album gave empty results)
* Include stash caching in artwork_get_byurl()
2020-02-23 20:30:35 +01:00
ejurgensen
8261fb8e59 [http] Don't return zero-length ICY title metadata 2020-02-23 20:30:35 +01:00
ejurgensen
9068c66dcd [cache] Minor changes so "const char *" path arguments are accepted 2020-02-23 20:30:35 +01:00
ejurgensen
2651a979fe [inputs] Fix issue where input metadata would not be erased
When playing a stream, the input metadata is transferred to the queue_item.
However, that was not done if there was no input metadata, which meant that
old metadata was not getting erased.
2020-02-23 20:30:35 +01:00
ejurgensen
b43e174baf [logger] Show long log messages truncated 2020-02-23 20:30:35 +01:00
ejurgensen
a289135325 [artwork] Construct online src querys based on data_kind
For http streams we don't have an album name to search for. Plus we don't
want to cache those images.
2020-02-23 20:30:35 +01:00
ejurgensen
b73f33f8e9 [artwork] Use settings to enable online sources 2020-02-23 20:30:35 +01:00
ejurgensen
18cf2dbbbf [misc] Change json_drilldown to _select and fix error case 2020-02-23 20:30:35 +01:00
ejurgensen
70f0ff1f61 [artwork] Support for online artwork sources - WIP
* Discogs
* Spotify
* Cover Art Archive
2020-02-23 20:30:35 +01:00
ejurgensen
15b18e26b7 [http] Let the curl https client follow up to 5 redirects
Requests for artwork to Cover Art Archive require redirects. Perhaps there are
also some playlist requests that will benefit from this.
2020-02-23 20:30:35 +01:00
ejurgensen
937f4431f8 [misc] Add json_drilldown() function
Will descend into a json object along the path set by a list of keys
2020-02-23 20:30:35 +01:00
ejurgensen
d86ca1176d [misc] Add an in-place string replacement function 2020-02-23 20:30:35 +01:00
ejurgensen
00de0a3f76 [db] Fixup commit #1edfadc 2020-02-23 20:25:22 +01:00
whatdoineed2do/Ray
3a48864001 [smartpl] support date_realeased 2020-02-23 20:25:22 +01:00
whatdoineed2do/Ray
de665fc6c8 [daap] honor requests to sort by 'releasedate' 2020-02-23 20:25:22 +01:00
whatdoineed2do/Ray
78194807db [db] add S_RELEASEDATE and idx 2020-02-23 20:25:22 +01:00
Christian Meffert
80921a71a4
Merge pull request #901 from whatdoineed2do/json-spotify-token-leak
Json spotify token leak
2020-02-22 08:27:32 +01:00
ejurgensen
b40e691e6e [db] Fix memleak of mfi->url
Credit @whatdoineed2do
2020-02-16 21:16:33 +01:00
whatdoineed2do/Ray
3049b3e70e [jsonapi] spotify token leak 2020-02-14 21:10:15 +00:00
ejurgensen
646dd44dd9 Silence unused var/func warnings for autogenerated ANTLR files 2020-02-08 21:24:25 +01:00
ejurgensen
f4cb0fb79d [db] Error checking for alloc failure 2020-02-08 16:10:33 +01:00
ejurgensen
e9d1a2475e [db] Fix memleak on error from prev commit 2020-02-08 15:17:34 +01:00
ejurgensen
541a1a6701 [db] Orphan nested playlists if parent is deleted/cleared
Also align db_pl_delete_bypath with db_pl_delete by making it a wrapper.
2020-02-08 13:41:26 +01:00
ejurgensen
84aced0a3d [scan] Fix exit and error message if nested playlist is invalid 2020-02-08 13:38:24 +01:00
ejurgensen
6b007dcd26 [scan] Fixes for #d2f0d7b
* Don't treat m3u's with m3u URL's as nested playlists
* Dereference playlist paths in the m3u's
2020-02-08 12:11:14 +01:00
ejurgensen
5295d787ad [scan] Change library_playlist_save return + fix Spotify
* fix Spotify invalid mem access
* fix clearing of Spotify files
2020-02-08 10:55:15 +01:00
ejurgensen
da29fa5f93 [scan] Make sure new, nested playlists are scanned
During scanning we might find a new, nested playlist (so inside another m3u),
which we will then save. When the scanner then reaches the actual playlist file,
we must make sure to scan the contents of it. This means the timestamp when
saving the first time has to be set to a dummy value.
2020-02-08 10:55:15 +01:00
ejurgensen
4b60da5fb4 [scan] Minor changes to smart pl scanner 2020-02-08 10:55:15 +01:00
ejurgensen
4c86798182 [scan] Fix bug added to iTunes scanner
Incorrect title for meta playlist used in commit 9be7d8f
2020-02-08 10:55:15 +01:00
ejurgensen
77a8de3bea [scan] Fix db_pl_add() so it always returns correct id 2020-02-08 10:55:15 +01:00
ejurgensen
d94cf3f07f [scan] Add option to let m3u tags override ICY metadata (issue #891) 2020-02-08 10:55:15 +01:00
ejurgensen
cac4b14e6f [conf] Add missing stdint.h include 2020-02-08 10:55:15 +01:00
ejurgensen
189370df91 [scan] Update smartpl scanner to use filescanner util functions 2020-02-08 10:55:15 +01:00
ejurgensen
2a69869816 [scan] Update iTunes scanner to use new filescanner util functions 2020-02-08 10:55:15 +01:00
ejurgensen
46a9114948 [scan] Support for nested playlists
Also includes some refactoring of the playlist filescanner and some
rearrangement of filescanner.c functions.
2020-02-08 10:55:15 +01:00
ejurgensen
ba1c536ca3 [library] Let library_media_save() return errors 2020-02-08 10:55:15 +01:00
ejurgensen
c5988665b0 [db] Expose db_pl_fetch_byid() 2020-02-08 10:55:15 +01:00
ejurgensen
abdc0d6d27 [library] Some refactoring of the library module
Misc refactoring, e.g. alignment of how modules save tracks and playlists, incl
use of mfi and pli. Also try to avoid direct calls between library and player.
2020-02-08 10:55:15 +01:00
ejurgensen
08e89ffd4f [db] Use prepared statements for playlists (add/update) 2020-02-08 10:55:15 +01:00
ejurgensen
942628f914 [library] Check for all scanning methods in library_init() 2020-02-08 10:53:59 +01:00
whatdoineed2do/Ray
a1a49b9497 [library] validate mandatory methods for source or die 2020-02-06 19:37:16 +00:00
whatdoineed2do/Ray
6120551cf5 [spotify/library] add missing metarescan 2020-02-06 18:38:21 +00:00
ejurgensen
b565df1d87 [raop] Add ATV 4k mdns announcement 2020-01-19 13:50:16 -08:00
ejurgensen
16cfca1bfe [scan] Remove some id3 tags that ffmpeg parses better (issue #882)
ffmpeg parses TDA, TDAT, TYE, TYER and TDR these days, so there is no need
to do that in forked-daapd. Also the parsing of TDA/TDAT was incorrect,
since it is MMDD.
2020-01-14 20:33:39 +01:00
ejurgensen
dfd2a4ab14 [dacp] Increase current revision number even if there are no open requests
This change aligns with iTunes behavior. It also means that a client that is
not long polling can use the revision number (cmsr) value to check for changes.
2020-01-12 01:06:34 +01:00
ejurgensen
919906233c [logger] Adjust log repeat max 2020-01-12 01:06:34 +01:00
ejurgensen
92dee0386d [daap/dacp] Workaround so that libevent cleans up when a long poll is disconnected
See https://github.com/ejurgensen/forked-daapd/issues/870
2020-01-12 01:06:34 +01:00
ejurgensen
87cb3b8b58 [logger] Always limit repeated logging no matter the log level 2020-01-12 01:06:34 +01:00
ejurgensen
4fa7eb98a0 [daap/dacp] Fix for memleak when client hangs up 2020-01-12 01:05:59 +01:00
ejurgensen
8d21a66493 [logger] Suppress logging of many similar repeated messages 2020-01-12 01:05:59 +01:00
whatdoineed2do/Ray
609cba5f04 [alsa] multi alsa cfg section SEGV with no nickname - use 'card' when not specified 2020-01-06 15:38:32 +00:00
ejurgensen
cc78926721 [dacp] Support for volumeup, volumedown and mutetoggle (issue #873)
Mute toggle only supported via enable/disable
2020-01-03 23:40:16 +01:00
whatdoineed2do/Ray
7ea8eeae05 [alsa] cfg section typo using 'mixer_device_name' 2020-01-03 19:37:07 +00:00
ejurgensen
e61e98bcbb [player] Reverse args to player_speaker_get_byid() for consistency 2020-01-03 19:38:52 +01:00
ejurgensen
af1bc27dd5 [dacp] Support for dmcp.device-prevent-playback (issue #855) 2020-01-03 19:36:35 +01:00
ejurgensen
80b183c7ff [dacp] Fix for genres that have single quotes in their name (fixes #869) 2020-01-03 19:05:48 +01:00
ejurgensen
4e1e5efedc [alsa] Changes to commit 0cb4e0b: multiple devices 2020-01-03 19:02:39 +01:00
whatdoineed2do/Ray
0cb4e0b862 [outputs/conf] New multiple 'alsa' sections split from 'audio' 2020-01-02 23:51:59 +01:00
ejurgensen
8248d2fe9f [scan] Fix access violation if pls line has no '=' 2019-12-27 23:58:57 +01:00
ejurgensen
251080344e [alsa] Fix missing unsubscription when closing session (ref. #866) 2019-12-27 11:29:36 +01:00
ejurgensen
0c08e83811 [outputs] Fix segv due to incorrect array size (fix for issue #866)
If the number of quality subscriptions reaches max then this bug will be
triggered, because we will incorrectly use the last element of the
output_buffer for a subscription, thus losing the zero terminator.
2019-12-27 00:10:32 +01:00
ejurgensen
33f97f55f3 [player] Fix for #860, going to next track when consume is enabled 2019-12-17 20:58:47 +01:00
ejurgensen
b83023356b [db] Fix for time_added incorrectly updated (issue #852) 2019-12-04 20:57:21 +01:00
Will Saxon
f3ebb574ba Recognize '@' as an operator identical to ':' (#841)
* Recognize '@' as an operator identical to ':'

* Add comments

* Add shortened example query
2019-11-16 12:27:43 +01:00
ejurgensen
f5e59c9b26
[pipe] Allow sample rate of 88200
Ref. issue #838
2019-11-05 00:13:33 +01:00
ejurgensen
6f3c315dfc [db] Add missing declarations of media_kind column in commit 40c7522 (fixes issue #836) 2019-11-03 00:16:20 +01:00
ejurgensen
a4f9bb576d [xcode] Increase read timeout 15s -> 30s (ref. issue #728) 2019-11-02 08:56:10 -07:00
Christian Meffert
cafdb96329
Merge pull request #833 from chme/cache_control
[httpd] Force browsers to always revalidate their cache
2019-11-02 07:57:55 +01:00
ejurgensen
40c7522baa [db] Make Apple Music on Catalina work - part 2 (fix for issue #834)
Extends the playlist table with media_kind to handle playlist queries like
this from Apple Music:

/databases/71/containers?session-id=12345678&revision-number=4&delta=0&query=('dmap.itemname:Library%20name','com.apple.itunes.extended-media-kind:1','com.apple.itunes.extended-media-kind:32','com.apple.itunes.extended-media-kind:128','com.apple.itunes.extended-media-kind:65537')&meta=dmap.itemid,dmap.itemname,dmap.persistentid,dmap.parentcontainerid,com.apple.itunes.is-podcast-playlist,com.apple.itunes.special-playlist,com.apple.itunes.smart-playlist,dmap.haschildcontainers,com.apple.itunes.saved-genius,dmap.objectextradata
2019-11-01 15:44:53 -07:00
ejurgensen
a69e79e5ec [daap] Make Apple Music on Catalina work - part 1 (fix for issue #834)
Like with iTunes, it has adverse effects to announce support for DAAP groups,
so with this change we also check if user-agent is "Music" before deciding what
to announce.
2019-11-01 15:43:56 -07:00
ejurgensen
dd24c35b2f [misc] Add missing comparison in quality_is_equal() 2019-10-26 23:30:44 +02:00
ejurgensen
051e526b2c [pipe] Disallow 24 bit input, doesn't work currently
If 24 bit input needs to be transcoded, like it will for AirPlay, it
will fail in transcode.c, because XCODE_PCM24 actually produces 4-byte
samples.
2019-10-26 23:28:05 +02:00
chme
662bfa529b [httpd] Force browsers to always revalidate their cached versions
Setting Cache-Control to "no-cache" tells a client to always make a
request to check if the version in the client cache is still valid
(response code 403 not modified).
2019-10-26 12:01:15 +02:00
ejurgensen
85ab7c3057 [alsa] Fix playback of 24 bit audio (issue #830)
The player will write 24 bit samples using 3 bytes, not 4, so the appropriate
sample format is SND_PCM_FORMAT_S24_3LE, not SND_PCM_FORMAT_S24_LE.

For extra protection we also use snd_pcm_bytes_to_frames() instead of BTOS(),
because that way we can be more certain that the buffer is not too short for
snd_pcm_writei().
2019-10-22 19:51:51 +02:00
ejurgensen
41f51d43ac [pipe] Allow configuration of 32 bit input format (issue #830)
Should work with e.g. arecord -f S32_LE -r 96000 -c 2 -t wav
2019-10-21 21:54:12 +02:00
chme
4c835f4435 [player] Remove dead code and rework check if fetching queue item failed 2019-10-20 14:36:21 +02:00
chme
69d3c97b7e [player] Fix freeing of queue item if error happens during seek
Plus fix some code style issues and add more documentation
2019-10-20 14:36:21 +02:00
chme
6e5d6791ff [player/dacp/mpd/jsonapi] Combine seek commands into one with mode param
Also changes relative seeking behavior:
- seeking behind the the current track only switches to the previous
track, if we are not more than 3 seconds into the current track,
otherwise starts current track from the beginning
- seeking beyond the current track will start the next track from the
beginning
2019-10-20 14:36:21 +02:00
chme
d69f328973 [jsonapi] Support relative seeking 2019-10-20 14:36:21 +02:00
chme
ced11ef0c1 [player] Allow seeking by a relative amount of milliseconds 2019-10-20 14:36:21 +02:00
chme
dc9396886c [jsonapi] Set correct artwork url for pipe input 2019-10-20 08:39:18 +02:00
chme
7e6b8f740d [db] Add missing mapping of queue version into queue item on fetch 2019-10-20 08:38:40 +02:00
ejurgensen
547222ec2b
Merge pull request #821 from chme/master_vol
[player] Fix missing update of master volume in web interface
2019-09-26 22:17:37 +02:00
chme
e3edcb5b96 [player] Fix missing update of master volume in web interface
Activating/deactivating an output might change the master volume,
therefor send a volume change notification.
2019-09-26 08:11:29 +02:00
chme
2846287169 [jsonapi] Add endpoint "/api/outputs/{id}/toggle" to toggle outputs 2019-09-26 08:00:03 +02:00
ejurgensen
8cff93ce55 [streaming] A bit of fixing up 2019-09-22 23:08:35 +02:00
whatdoineed2do/Ray
586dc4342d [streaming] mem leak fix on client initiated disconnect; close callback cleans
up the session but not the evhhttp_request object alloc'd in
  httpd()-> event_base_loop() -> ... -> evhttp_request_new()
2019-09-22 23:08:35 +02:00
whatdoineed2do/Ray
c2ba1fdb63 [streaming,conf,xcode] review fixes 2019-09-22 22:58:32 +02:00
whatdoineed2do/Ray
008e11bfb8 [streaming] review: remove bps/channels from cfg, undoc icy_metaint cfg option 2019-09-22 22:58:32 +02:00
whatdoineed2do/Ray
7ccd32c354 [streaming] validate cfg for supported ffmpeg/mp3 sample_rates
$ fmpeg -h encoder=mp3
    ...
	Supported sample rates: 44100 48000 32000 22050 24000 16000 11025 12000 8000
	Supported sample formats: s32p fltp s16p
	Supported channel layouts: mono stereo
2019-09-22 22:58:32 +02:00
whatdoineed2do/Ray
8762891145 [streaming] configurable icy_metaint 2019-09-22 22:58:32 +02:00
whatdoineed2do/Ray
f5c3eb0c14 [streaming] refactor for sperate in/out streaming qualities and configurable streaming params 2019-09-22 22:58:32 +02:00
whatdoineed2do/Ray
07d297aaca [streaming] increase icy-metaint interval to 16k bytes 2019-09-22 22:58:32 +02:00
whatdoineed2do/Ray
554799ebc3 [streaming/xcode] configurable MP3 streaming bitrate 2019-09-22 22:58:32 +02:00
ejurgensen
cae790ed7e [pipe] Harden pict_tmpfile_recreate() against invalid input, take 2 2019-09-22 22:56:18 +02:00
ejurgensen
d2921e9444 [pipe] Harden pict_tmpfile_recreate() against invalid input 2019-09-22 20:27:47 +02:00
ejurgensen
56d3f42598 Fix a few gcc 8 / scan-build compiler warnings 2019-09-22 00:51:17 +02:00
ejurgensen
cf927e7daa [pipe] Fixup missing condition 2019-09-20 21:51:09 +02:00
ejurgensen
e1a0e366cf [dacp] Make sure Remote updates images from metadata pipes 2019-09-20 21:47:17 +02:00
ejurgensen
7316c060b8 [pipe/artwork] Support for artwork via Shairport metadata pipes, take 3
This implementation uses a tmpfile for storage of the artwork, plus it uses
artwork_get() which means that it scales the image as requested by the client.

It also does not create a tmpfile unless we actually receive artwork.
2019-09-20 21:47:17 +02:00
ejurgensen
ddb91e61ef [pipe/artwork] Support for artwork via Shairport metadata pipes, take 2
This implementation uses a tmpfile for storage of the artwork (instead of the
cache, which may not be enabled).
2019-09-20 21:47:17 +02:00
ejurgensen
69fafd873d [pipe/artwork] Support for artwork via Shairport metadata pipes
This implementation uses the cache for storage. Might change that to use a
tmpfile instead.
2019-09-20 21:47:17 +02:00
ejurgensen
2e149273e5 [cache] Clear stash if called with called with NULL 2019-09-20 21:47:17 +02:00
ejurgensen
1752901529 [misc] Change b64_* to wrap ffmpeg's base64 encoder/decoder
Using ffmpeg's is probably better than having our own, plus it provides us with
decoded length, which we will need to support artwork via pipe.
2019-09-20 21:47:17 +02:00
ejurgensen
e654276262 [alsa] Fix incorrect use of abs() for float, use fabs() instead 2019-09-18 21:28:15 +02:00
ejurgensen
6836a0f277 [mdns] Fix incorrect error check for getaddrinfo (can cause segfault)
Non-zero return from getaddrinfo is an error, so since *ai could be a null
pointer when derefenced in the following socket() call.
2019-09-18 21:18:01 +02:00
ejurgensen
4ab734343c [-] Free events on exit (turns out event_base_free does not free them)
Credit @whatdoineed2do, ref. pr #797
2019-09-09 22:23:00 +02:00
chme
d88182820c [mpd] Fix initial value of 'songpos' in play command 2019-09-07 08:31:31 +02:00
Christian Meffert
7925639f5b
Merge pull request #790 from chme/admin_settings
Introduce new settings for displaying the composer in the now playing page
2019-08-31 09:05:49 +02:00
Christian Meffert
73470113b6
Merge pull request #795 from whatdoineed2do/jsonapi-memleak
[jsonapi] potential memleaks on query_params.filter object
2019-08-30 19:31:44 +02:00
whatdoineed2do/Ray
6ad3d8dbef [jsonapi] potential memleaks on query_params.filter object 2019-08-28 21:35:29 +01:00
ejurgensen
ef9c0117c9 [input] Fix pipe playback bringing cpu to 100%
When pipe playback is started, but no data is written to the pipe, the input
loop would bring the cpu to 100%. This fix limits the loop like it was before
player refactor.
2019-08-28 22:23:11 +02:00
chme
a5c2d6c0f8 [spotify] Return widest image if no max width is given 2019-08-25 11:24:14 +02:00
chme
2cc310b646 [jsonapi] Expose reading and updating settings through the JSON API 2019-08-25 10:39:16 +02:00
chme
02dd0a9445 [settings] Add settings component
This adds a new settings component for user configurable options that
can be changed through the JSON API.
The settings are stored in the admin db table and not in the conf-file.
2019-08-25 10:39:16 +02:00
ejurgensen
78373af201 [cast] Add a simple delay to stream to a have little bit of sync
Since it is unknown how to do real sync on Chromecast, this commit instead adds
a primitive delay to the stream, so that it is at least somewhat closer to
Airplay/local audio.

Also some cleanup of unused stuff.
2019-08-23 19:45:17 +02:00
whatdoineed2do
a5987addd4 [db,jsonapi] case insensitive directory/file listing (#784)
* [db,jsonapi] case insensitive directory/file listing

* [jsonapi] file listing of playlist uses same VPATH ordering as per directory and files

* [db,jsonapi] sorting via existing S_VPATH

* [db] replace LOWER with COLLATE NOCASE
2019-08-21 22:54:34 +02:00
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
ejurgensen
3e4766ffaa [outputs] Fix segfault if encode_reset() fails to setup an encode_ctx 2019-03-18 23:06:08 +01:00
ejurgensen
1285128b9a [xcode] Fix incorrect source BPS detection + support for more audio qualities 2019-03-18 23:06:08 +01:00
ejurgensen
39037c7c8b [player] Fix typo 2019-03-18 23:06:08 +01:00
ejurgensen
8cf717664d [player] Don't call event_read_quality() twice 2019-03-18 23:06:08 +01:00
ejurgensen
63a2e750c7 [pulse] Convert Pulseaudio to new interface, incl support for native quality
First draft, probably has a few bugs
2019-03-18 23:06:08 +01:00
ejurgensen
3c2ff294a1 [player] Fix rewind problem where quality level was lost by player
+ remember to flush in source_start(), since the input won't do it if
input_now_reading has already been closed (e.g. if starting a new track
while playback is at the end of another track)
2019-03-18 23:06:08 +01:00
ejurgensen
50c7d96bc4 [raop] Remove flush timer, the player now takes care of stopping
Player now stops 10 secs after stop command and 10 mins after pause. At
that time the outputs have probably cut the connection themselves, but
that might be ok (needs testing).
2019-03-18 23:06:08 +01:00
ejurgensen
2893e597c3 [player] Partially revert commit ec9633c, now don't do full stop straight away
It is normal for the player to be called with stop() and then start(), so we
should keep the outputs open for a while.
2019-03-18 23:06:08 +01:00
ejurgensen
4017ce8846 [player] Fixup to commit 8f39c65, avoid crash when queue ends 2019-03-18 23:06:08 +01:00
ejurgensen
fc20b55a9b [raop] Log sync packet times 2019-03-18 23:06:08 +01:00
ejurgensen
977f8570a5 [player] Fix handling of underrun/read_deficit
* Also call full_cb() from input_wait if buffer is full
* Make read_deficit count missing bytes instead of clock ticks
* Make read_deficit a part of the playback session
2019-03-18 23:06:08 +01:00
ejurgensen
143708368c [alsa] Fix sync check
Sync correction still not implemented
2019-03-18 23:06:08 +01:00
ejurgensen
0f83b09ef7 [player] Fix incorrect setting of start timestamp
The time stamp was getting set too late, because if pos was zero the first
reads then it would be overwritten, but it shouldn't because the loop will
catch up even if the initial reads have zero samples.
2019-03-18 23:06:08 +01:00
ejurgensen
16469f6fa3 [player] Fixup missing fix from merge conflict resolution 2019-03-18 23:06:08 +01:00
ejurgensen
a37c9b4839 [player] Change name that was incorrect from merge conflict resolution 2019-03-18 23:06:08 +01:00
ejurgensen
2472aa9463 [player] Add timer to stop playback after being paused for a while 2019-03-18 23:06:08 +01:00
ejurgensen
b56b56af07 [input] Cleaning up 2019-03-18 23:06:08 +01:00
ejurgensen
107fa3634b [spotify] Remove obsolete .start reference 2019-03-18 23:06:08 +01:00
ejurgensen
cfaceab9fe [outputs] Misc fixup 2019-03-18 23:06:08 +01:00
ejurgensen
9d5555152c [alsa] Implement new output interface + some refactoring
Sync still missing
2019-03-18 23:06:08 +01:00
ejurgensen
b811122566 [outputs] Rename output_buffer.frame to .data 2019-03-18 23:06:08 +01:00
ejurgensen
5c35e1a9db [player] Completely stop devices on playback_stop()
Previously we just flushed, and local audio devices would never get closed.
Also a little fixup to the printing of session debug.
2019-03-18 23:06:08 +01:00
ejurgensen
19694ee1dd [misc] Add ringbuffer utility to misc.c/misc.h 2019-03-18 23:06:08 +01:00