Age | Commit message (Collapse) | Author | Files | Lines |
|
|
|
|
|
Bumps required ffmpeg version to at least 5.1.
|
|
It’s not entirely clear why or when ffmpeg returns this error.
Fixes #735.
|
|
Use av_packet_alloc() instead of av_packet_init().
|
|
Compile *without* -DNDEBUG. The environment variable PIANOBAR_DEBUG
accepts a bitfield which enables (1) network (2) audio (4) UI debug
messages.
|
|
Fixes #684
|
|
Fixes #683
|
|
av_mul_q calls av_reduce, whose runtime depends on its inputs. This is
a latency-sensitive calculation though.
|
|
Again, I used the wrong time_base. Since lastTimestamp and the decoder’s
frame->pts used different time_base’s, the buffer health was wrong,
resulting in an indefinite stall (“buffer is full” when it was not).
See #678.
|
|
Their time_base is not the same for stream and buffersink.
See issue #678.
|
|
Mainly useful for debugging with AV_LOG_DEBUG.
|
|
When the play thread receives an error (ret < 0), it waits for
aoplayCond. But if the buffer is full (decode thread waiting for
aoplayCond), the player deadlocks.
See #672.
|
|
See issue #672.
|
|
These are now optional according to doc/APIchanges. Closes #670.
|
|
Prevent stuttering on low-power devices like Android phones by moving
playback to its own thread and decoupling it from decoding through a
reasonably sized buffer.
Fixes #665.
|
|
Has been merged into avfilter.h. Closes #660.
|
|
All network operations can time out now. API requests are retried up to
three times (default). Replaces setting max_player_errors with
max_retries, which is used for player and API. Adds timeout setting.
Partially reverts 436a1d4012553a2f33d0e3a5180b3b5ae0378bdd and fixes
(at least) issue #657.
Thanks to @exarkun for testing.
|
|
The volatile keyword neither guarantees atomic access nor memory
visibility[1]. Although this is usually not a problem on x86, it is
incorrect to rely on this. Use mutex locks to protect all shared player
variables and enforce memory visibility.
[1] https://wiki.sei.cmu.edu/confluence/display/c/CON02-C.+Do+not+use+volatile+as+a+synchronization+primitive
|
|
Use new send_packet/receive_frame API.
Bumps libav and ffmpeg version requirements. Revert this commit if you
need an older version.
|
|
|
|
See #577.
|
|
If player is running one SIGINT restarts current track request, two
SIGINT (or more) quit pianobar. Idle main loop (i.e. no player or
submenu) quits on SIGINT. Fixes issue #564.
|
|
^C now works as expected: It interrupts API requests, input prompts and
audio streaming. Timeouts have been removed.
|
|
On one of my machines the first song plays fine, but every track
thereafter fails playing with the following error message:
[volume @ 0x7f6b1c0a1200] [Eval @ 0x7f6b21ab6b60] Invalid chars '.0' at the end of expression '1.0'
[volume @ 0x7f6b1c0a1200] Error when evaluating the volume expression '1.0'
/!\ create_filter volume (Das Argument ist ungültig)
I’m not sure why this fixes the issue, but it might be a bug in ffmpeg.
|
|
A few changes were made to AVFrame and the buffersink. Should be
compatible with ffmpeg >= 2.1 and libav >= 10. Version 1.2/9 do not work
at this point.
|
|
I removed most of the *BSD-related stuff, because I can’t test these. If
this breaks your build, send me a patch please.
|
|
The initial volume setup was ignored as well. Introduced by previous
commit 310900e4be52d11388792d776d9f6b89380bbecd. See
https://github.com/PromyLOPh/pianobar/commit/310900e4be52d11388792d776d9f6b89380bbecd
|
|
Fixes issue #508.
|
|
libav 11 reports an invalid channel layout for mp3 files. This is a
work-around. The problem is fixed with libav 11.1.
|
|
Skipping/quitting while pausing does not play the current packet any
more. Avoid unneccessary calls to av_read_(play|pause).
|
|
If retry is triggered once and openStream fails after that retry is
never set to false, resulting in an infinite loop that cannot be
interrupted by the user.
|
|
Fixes #442.
|
|
Drop minor version check, assuming this workaround is required for all
future versions. See 0a64272db65201fc2ecb3406b89d895966933b99. Fixes
issue #456.
|
|
I’ll give it another shot. ffmpeg’s doc/developer.texi states their
micro version always starts at 100 for this very reason. Use that to
detect ffmpeg and guess its version by looking at major and minor
version numbers. Let’s hope this works.
|
|
Closes #441.
|
|
Song timer was shown without song playing.
|
|
Commit 8012d6cb4bb65a858105ef878c5b98d91b24e1cd was broken in several
ways. Since auto-detection did not work correctly it was replaced by a
user-editable variable. See #439.
|
|
Adds support for ffmpeg 2.2 and 1.2. Right now the maintenance overhead
of supporting both libav implementations is not that big.
Fixes #437 and #435.
|
|
Shouldn’t make a difference right now. Just in case…
|
|
libav 9.12 and ffmpeg 2.2 have been tested.
Here’s why: My mp4 “parser” *cough* never was a mp4 parser in the sense
that it actually understood the file format. Instead it grepped the
input stream for “magic” strings (section identifiers). That alone
should be sufficient to throw away the code and rewrite it. Additionally
libfaad2 has not been updated for ages. I guess it was abandoned in
favor of libav/ffmpeg.
With libav/ffmpeg, which we support both as long as the API’s don’t
diverge too much, pianobar gains fast and reliable AAC and MP3 decoding
without bothering too much about the details. Most users will have it
installed already. On my own machine libav consumes about 2/3 CPU time
compared to the previous solution when playing AAC. Unfortunately memory
usage doubled and my attempts to disable unused protocols/formats/codec
failed due to libav’s API limitations.
While cleaning up a small detail regarding the eventcmd API has changed
too: Song duration and position are measured in seconds instead of
milliseconds now. Since libav/ffmpeg keeps track of accurate timing the
precision pianobar keeps track of can be reduced, while still being
sufficient for most users.
|
|
|
|
1) Make sure that multiple bad playlists in a row don’t result in a
temporary ban
2) Ignore songs skipped because the playlist timed out after pausing for
too long
|
|
Player thread now sets its status correctly. Closes #360.
|
|
Workaround for #355, fixes commit
2c516503d2cb81dd156afc24677ac4bf3caefceb.
|
|
See #352.
|
|
Add commands that always play and always pause, in addition to the
current toggle pause command.
Closes #342.
|
|
|
|
Decoding errors are usually not fatal, so we can recover by skipping the
broken frame. This also fixes invalid memory reads caused by
sampleSizeCurr >= sampleSizeN. See issue #304.
|
|
Pandora limited the audio formats we can request explicitly. Don’t rely
on this and use the formats available with the given partner
credentials. Closes #271.
|