From 39de1355e8f0565594bac973218d347c1fe02c69 Mon Sep 17 00:00:00 2001 From: Lars-Dominik Braun Date: Mon, 10 Aug 2015 14:04:50 +0200 Subject: player: Replace deprecated ffmpeg API calls 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. --- src/player.c | 24 +++++++----------------- 1 file changed, 7 insertions(+), 17 deletions(-) (limited to 'src') diff --git a/src/player.c b/src/player.c index 0ba0f36..559ada5 100644 --- a/src/player.c +++ b/src/player.c @@ -45,6 +45,7 @@ THE SOFTWARE. #endif #include #include +#include #ifndef HAVE_AV_TIMEOUT #include #endif @@ -77,7 +78,6 @@ void BarPlayerInit () { void BarPlayerDestroy () { avformat_network_deinit (); - avfilter_uninit (); ao_shutdown (); } @@ -309,9 +309,9 @@ static int play (player_t * const player) { pkt.size = 0; AVFrame *frame = NULL, *filteredFrame = NULL; - frame = avcodec_alloc_frame (); + frame = av_frame_alloc (); assert (frame != NULL); - filteredFrame = avcodec_alloc_frame (); + filteredFrame = av_frame_alloc (); assert (filteredFrame != NULL); while (!player->doQuit) { @@ -357,28 +357,18 @@ static int play (player_t * const player) { assert (ret >= 0); while (true) { - AVFilterBufferRef *audioref = NULL; -#ifdef HAVE_AV_BUFFERSINK_GET_BUFFER_REF - /* ffmpeg’s compatibility layer is broken in some releases */ - if (av_buffersink_get_buffer_ref (player->fbufsink, - &audioref, 0) < 0) { -#else - if (av_buffersink_read (player->fbufsink, &audioref) < 0) { -#endif + if (av_buffersink_get_frame (player->fbufsink, filteredFrame) < 0) { /* try again next frame */ break; } - ret = avfilter_copy_buf_props (filteredFrame, audioref); - 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); - avfilter_unref_bufferp (&audioref); + av_frame_unref (filteredFrame); } } @@ -392,8 +382,8 @@ static int play (player_t * const player) { player->lastTimestamp = pkt.pts; } - avcodec_free_frame (&filteredFrame); - avcodec_free_frame (&frame); + av_frame_free (&filteredFrame); + av_frame_free (&frame); return 0; } -- cgit v1.2.3