update pianobar to 2017.08.30
ok abieber@ kmos@
This commit is contained in:
parent
7491bc9ed2
commit
6b931262ba
@ -1,9 +1,8 @@
|
||||
# $OpenBSD: Makefile,v 1.88 2019/07/12 20:43:39 sthen Exp $
|
||||
# $OpenBSD: Makefile,v 1.89 2020/08/21 20:44:15 tracey Exp $
|
||||
|
||||
COMMENT = command-line client for Pandora Internet Radio
|
||||
|
||||
DISTNAME = pianobar-2017.08.30
|
||||
REVISION = 1
|
||||
DISTNAME = pianobar-2020.04.05
|
||||
EXTRACT_SUFX = .tar.bz2
|
||||
CATEGORIES = audio
|
||||
|
||||
|
@ -1,2 +1,2 @@
|
||||
SHA256 (pianobar-2017.08.30.tar.bz2) = 7BTbbPGn28HYGQtcoNJWAh6XBYe82usjkE1LynGgRnQ=
|
||||
SIZE (pianobar-2017.08.30.tar.bz2) = 46664
|
||||
SHA256 (pianobar-2020.04.05.tar.bz2) = bBc7aynMwfQy4AE/tCXo+ctCYVObWNNE4LInSWNyZIA=
|
||||
SIZE (pianobar-2020.04.05.tar.bz2) = 48823
|
||||
|
@ -1,242 +0,0 @@
|
||||
$OpenBSD: patch-src_player_c,v 1.23 2019/02/18 10:05:39 ajacoutot Exp $
|
||||
|
||||
- XXX Revert:
|
||||
commit f3dff6792232d1e3f2deb8baf21dc1fa81581090
|
||||
Author: Lars-Dominik Braun <lars@6xq.net>
|
||||
Date: Fri Mar 24 10:02:27 2017
|
||||
|
||||
Replace deprecated avcodec_decode_audio4
|
||||
|
||||
Use new send_packet/receive_frame API.
|
||||
- Remove deprecated header avfiltergraph.h
|
||||
|
||||
Index: src/player.c
|
||||
--- src/player.c.orig
|
||||
+++ src/player.c
|
||||
@@ -36,7 +36,6 @@ THE SOFTWARE.
|
||||
#include <libavcodec/avcodec.h>
|
||||
#include <libavutil/avutil.h>
|
||||
#include <libavfilter/avfilter.h>
|
||||
-#include <libavfilter/avfiltergraph.h>
|
||||
#include <libavfilter/buffersink.h>
|
||||
#include <libavfilter/buffersrc.h>
|
||||
#ifdef HAVE_LIBAVFILTER_AVCODEC_H
|
||||
@@ -166,23 +165,16 @@ static bool openStream (player_t * const player) {
|
||||
}
|
||||
|
||||
player->st = player->fctx->streams[player->streamIdx];
|
||||
+ AVCodecContext * const cctx = player->st->codec;
|
||||
player->st->discard = AVDISCARD_DEFAULT;
|
||||
|
||||
/* decoder setup */
|
||||
- if ((player->cctx = avcodec_alloc_context3 (NULL)) == NULL) {
|
||||
- softfail ("avcodec_alloc_context3");
|
||||
- }
|
||||
- const AVCodecParameters * const cp = player->st->codecpar;
|
||||
- if ((ret = avcodec_parameters_to_context (player->cctx, cp)) < 0) {
|
||||
- softfail ("avcodec_parameters_to_context");
|
||||
- }
|
||||
-
|
||||
- AVCodec * const decoder = avcodec_find_decoder (cp->codec_id);
|
||||
+ AVCodec * const decoder = avcodec_find_decoder (cctx->codec_id);
|
||||
if (decoder == NULL) {
|
||||
softfail ("find_decoder");
|
||||
}
|
||||
|
||||
- if ((ret = avcodec_open2 (player->cctx, decoder, NULL)) < 0) {
|
||||
+ if ((ret = avcodec_open2 (cctx, decoder, NULL)) < 0) {
|
||||
softfail ("codec_open2");
|
||||
}
|
||||
|
||||
@@ -203,7 +195,7 @@ static bool openFilter (player_t * const player) {
|
||||
/* filter setup */
|
||||
char strbuf[256];
|
||||
int ret = 0;
|
||||
- AVCodecParameters * const cp = player->st->codecpar;
|
||||
+ AVCodecContext * const cctx = player->st->codec;
|
||||
|
||||
if ((player->fgraph = avfilter_graph_alloc ()) == NULL) {
|
||||
softfail ("graph_alloc");
|
||||
@@ -212,11 +204,17 @@ static bool openFilter (player_t * const player) {
|
||||
/* abuffer */
|
||||
AVRational time_base = player->st->time_base;
|
||||
|
||||
+ /* Workaround for a bug in libav-11, which reports an invalid channel
|
||||
+ * layout mp3 files */
|
||||
+ if (cctx->channel_layout == 0) {
|
||||
+ cctx->channel_layout = av_get_default_channel_layout (cctx->channels);
|
||||
+ }
|
||||
+
|
||||
snprintf (strbuf, sizeof (strbuf),
|
||||
"time_base=%d/%d:sample_rate=%d:sample_fmt=%s:channel_layout=0x%"PRIx64,
|
||||
- time_base.num, time_base.den, cp->sample_rate,
|
||||
- av_get_sample_fmt_name (player->cctx->sample_fmt),
|
||||
- cp->channel_layout);
|
||||
+ time_base.num, time_base.den, cctx->sample_rate,
|
||||
+ av_get_sample_fmt_name (cctx->sample_fmt),
|
||||
+ cctx->channel_layout);
|
||||
if ((ret = avfilter_graph_create_filter (&player->fabuf,
|
||||
avfilter_get_by_name ("abuffer"), NULL, strbuf, NULL,
|
||||
player->fgraph)) < 0) {
|
||||
@@ -264,14 +262,14 @@ static bool openFilter (player_t * const player) {
|
||||
/* setup libao
|
||||
*/
|
||||
static bool openDevice (player_t * const player) {
|
||||
- const AVCodecParameters * const cp = player->st->codecpar;
|
||||
+ AVCodecContext * const cctx = player->st->codec;
|
||||
|
||||
ao_sample_format aoFmt;
|
||||
memset (&aoFmt, 0, sizeof (aoFmt));
|
||||
aoFmt.bits = av_get_bytes_per_sample (avformat) * 8;
|
||||
assert (aoFmt.bits > 0);
|
||||
- aoFmt.channels = cp->channels;
|
||||
- aoFmt.rate = cp->sample_rate;
|
||||
+ aoFmt.channels = cctx->channels;
|
||||
+ aoFmt.rate = cctx->sample_rate;
|
||||
aoFmt.byte_format = AO_FMT_NATIVE;
|
||||
|
||||
int driver = ao_default_driver_id ();
|
||||
@@ -289,7 +287,6 @@ static int play (player_t * const player) {
|
||||
assert (player != NULL);
|
||||
|
||||
AVPacket pkt;
|
||||
- AVCodecContext * const cctx = player->cctx;
|
||||
av_init_packet (&pkt);
|
||||
pkt.data = NULL;
|
||||
pkt.size = 0;
|
||||
@@ -300,28 +297,18 @@ static int play (player_t * const player) {
|
||||
filteredFrame = av_frame_alloc ();
|
||||
assert (filteredFrame != NULL);
|
||||
|
||||
- enum { FILL, DRAIN, DONE } drainMode = FILL;
|
||||
- int ret = 0;
|
||||
- while (!player->doQuit && drainMode != DONE) {
|
||||
- if (drainMode == FILL) {
|
||||
- ret = av_read_frame (player->fctx, &pkt);
|
||||
- if (ret == AVERROR_EOF) {
|
||||
- /* enter drain mode */
|
||||
- drainMode = DRAIN;
|
||||
- avcodec_send_packet (cctx, NULL);
|
||||
- } else if (pkt.stream_index != player->streamIdx) {
|
||||
- /* unused packet */
|
||||
- av_packet_unref (&pkt);
|
||||
- continue;
|
||||
- } else if (ret < 0) {
|
||||
- /* error, abort */
|
||||
- break;
|
||||
- } else {
|
||||
- /* fill buffer */
|
||||
- avcodec_send_packet (cctx, &pkt);
|
||||
- }
|
||||
+ while (!player->doQuit) {
|
||||
+ int ret = av_read_frame (player->fctx, &pkt);
|
||||
+ if (ret < 0) {
|
||||
+ av_free_packet (&pkt);
|
||||
+ return ret;
|
||||
+ } else if (pkt.stream_index != player->streamIdx) {
|
||||
+ av_free_packet (&pkt);
|
||||
+ continue;
|
||||
}
|
||||
|
||||
+ AVPacket pkt_orig = pkt;
|
||||
+
|
||||
/* pausing */
|
||||
pthread_mutex_lock (&player->pauseMutex);
|
||||
if (player->doPause) {
|
||||
@@ -333,50 +320,54 @@ static int play (player_t * const player) {
|
||||
}
|
||||
pthread_mutex_unlock (&player->pauseMutex);
|
||||
|
||||
- while (!player->doQuit) {
|
||||
- ret = avcodec_receive_frame (cctx, frame);
|
||||
- if (ret == AVERROR_EOF) {
|
||||
- /* done draining */
|
||||
- drainMode = DONE;
|
||||
+ while (pkt.size > 0 && !player->doQuit) {
|
||||
+ int got_frame = 0;
|
||||
+
|
||||
+ const int decoded = avcodec_decode_audio4 (player->st->codec,
|
||||
+ frame, &got_frame, &pkt);
|
||||
+ if (decoded < 0) {
|
||||
+ /* skip this one */
|
||||
break;
|
||||
- } else if (ret != 0) {
|
||||
- /* no more output */
|
||||
- break;
|
||||
}
|
||||
|
||||
- /* XXX: suppresses warning from resample filter */
|
||||
- if (frame->pts == (int64_t) AV_NOPTS_VALUE) {
|
||||
- frame->pts = 0;
|
||||
- }
|
||||
- ret = av_buffersrc_write_frame (player->fabuf, frame);
|
||||
- assert (ret >= 0);
|
||||
-
|
||||
- while (true) {
|
||||
- if (av_buffersink_get_frame (player->fbufsink, filteredFrame) < 0) {
|
||||
- /* try again next frame */
|
||||
- break;
|
||||
+ if (got_frame != 0) {
|
||||
+ /* XXX: suppresses warning from resample filter */
|
||||
+ if (frame->pts == (int64_t) AV_NOPTS_VALUE) {
|
||||
+ frame->pts = 0;
|
||||
}
|
||||
+ ret = av_buffersrc_write_frame (player->fabuf, frame);
|
||||
+ assert (ret >= 0);
|
||||
|
||||
- const int numChannels = av_get_channel_layout_nb_channels (
|
||||
- filteredFrame->channel_layout);
|
||||
- const int bps = av_get_bytes_per_sample(filteredFrame->format);
|
||||
- ao_play (player->aoDev, (char *) filteredFrame->data[0],
|
||||
- filteredFrame->nb_samples * numChannels * bps);
|
||||
+ while (true) {
|
||||
+ if (av_buffersink_get_frame (player->fbufsink, filteredFrame) < 0) {
|
||||
+ /* try again next frame */
|
||||
+ break;
|
||||
+ }
|
||||
|
||||
- av_frame_unref (filteredFrame);
|
||||
+ const int numChannels = av_get_channel_layout_nb_channels (
|
||||
+ filteredFrame->channel_layout);
|
||||
+ const int bps = av_get_bytes_per_sample(filteredFrame->format);
|
||||
+ ao_play (player->aoDev, (char *) filteredFrame->data[0],
|
||||
+ filteredFrame->nb_samples * numChannels * bps);
|
||||
+
|
||||
+ av_frame_unref (filteredFrame);
|
||||
+ }
|
||||
}
|
||||
- }
|
||||
|
||||
+ pkt.data += decoded;
|
||||
+ pkt.size -= decoded;
|
||||
+ };
|
||||
+
|
||||
+ av_free_packet (&pkt_orig);
|
||||
+
|
||||
player->songPlayed = av_q2d (player->st->time_base) * (double) pkt.pts;
|
||||
player->lastTimestamp = pkt.pts;
|
||||
-
|
||||
- av_packet_unref (&pkt);
|
||||
}
|
||||
|
||||
av_frame_free (&filteredFrame);
|
||||
av_frame_free (&frame);
|
||||
|
||||
- return ret;
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
static void finish (player_t * const player) {
|
||||
@@ -386,9 +377,9 @@ static void finish (player_t * const player) {
|
||||
avfilter_graph_free (&player->fgraph);
|
||||
player->fgraph = NULL;
|
||||
}
|
||||
- if (player->cctx != NULL) {
|
||||
- avcodec_close (player->cctx);
|
||||
- player->cctx = NULL;
|
||||
+ if (player->st != NULL && player->st->codec != NULL) {
|
||||
+ avcodec_close (player->st->codec);
|
||||
+ player->st = NULL;
|
||||
}
|
||||
if (player->fctx != NULL) {
|
||||
avformat_close_input (&player->fctx);
|
@ -1,15 +0,0 @@
|
||||
$OpenBSD: patch-src_player_h,v 1.3 2019/02/18 10:05:39 ajacoutot Exp $
|
||||
|
||||
Remove deprecated header avfiltergraph.h
|
||||
|
||||
Index: src/player.h
|
||||
--- src/player.h.orig
|
||||
+++ src/player.h
|
||||
@@ -34,7 +34,6 @@ THE SOFTWARE.
|
||||
#include <ao/ao.h>
|
||||
#include <libavformat/avformat.h>
|
||||
#include <libavfilter/avfilter.h>
|
||||
-#include <libavfilter/avfiltergraph.h>
|
||||
#include <piano.h>
|
||||
|
||||
#include "settings.h"
|
@ -1,7 +1,7 @@
|
||||
@comment $OpenBSD: PLIST,v 1.7 2017/01/10 12:46:41 sthen Exp $
|
||||
@comment $OpenBSD: PLIST,v 1.8 2020/08/21 20:44:15 tracey Exp $
|
||||
@bin bin/pianobar
|
||||
include/piano.h
|
||||
lib/libpiano.a
|
||||
@static-lib lib/libpiano.a
|
||||
@lib lib/libpiano.so.${LIBpiano_VERSION}
|
||||
@man man/man1/pianobar.1
|
||||
share/examples/pianobar/
|
||||
|
Loading…
Reference in New Issue
Block a user