Index: src/player.c
--- src/player.c.orig
+++ src/player.c
@@ -286,7 +286,7 @@ static bool openFilter (player_t * const player) {
 			"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);
+			cp->ch_layout.u.mask);
 	if ((ret = avfilter_graph_create_filter (&player->fabuf,
 			avfilter_get_by_name ("abuffer"), "source", strbuf, NULL,
 			player->fgraph)) < 0) {
@@ -340,7 +340,7 @@ static bool openDevice (player_t * const player) {
 	memset (&aoFmt, 0, sizeof (aoFmt));
 	aoFmt.bits = av_get_bytes_per_sample (avformat) * 8;
 	assert (aoFmt.bits > 0);
-	aoFmt.channels = cp->channels;
+	aoFmt.channels = cp->ch_layout.nb_channels;
 	aoFmt.rate = getSampleRate (player);
 	aoFmt.byte_format = AO_FMT_NATIVE;
 
@@ -508,7 +508,7 @@ static void finish (player_t * const player) {
 		player->fgraph = NULL;
 	}
 	if (player->cctx != NULL) {
-		avcodec_close (player->cctx);
+		avcodec_free_context (&player->cctx);
 		player->cctx = NULL;
 	}
 	if (player->fctx != NULL) {
@@ -583,8 +583,7 @@ void *BarAoPlayThread (void *data) {
 		}
 		pthread_mutex_unlock (&player->aoplayLock);
 
-		const int numChannels = av_get_channel_layout_nb_channels (
-				filteredFrame->channel_layout);
+		const int numChannels = filteredFrame->ch_layout.nb_channels;
 		const int bps = av_get_bytes_per_sample (filteredFrame->format);
 		ao_play (player->aoDev, (char *) filteredFrame->data[0],
 				filteredFrame->nb_samples * numChannels * bps);
