diff -udprN /usr/ports/multimedia/libav/Makefile ./Makefile
--- /usr/ports/multimedia/libav/Makefile	2018-09-29 08:04:27.000000000 +0000
+++ ./Makefile	2018-11-27 10:05:24.634979000 +0000
@@ -1,8 +1,7 @@
 # $FreeBSD: head/multimedia/libav/Makefile 480899 2018-09-29 08:04:27Z riggs $
 
 PORTNAME=	libav
-PORTVERSION=	12.1
-PORTREVISION=	8
+PORTVERSION=	12.3
 CATEGORIES=	multimedia audio ipv6 net
 MASTER_SITES=	http://libav.org/releases/
 
@@ -21,8 +20,9 @@ LIB_DEPENDS=	libopencv_core.so:graphics/
 		libhogweed.so:security/nettle
 
 USES=		cpe gmake perl5 pkgconfig tar:xz
-USE_XORG=	x11
+
 HAS_CONFIGURE=	yes
+USE_XORG=	x11
 USE_PERL5=	build
 USE_LDCONFIG=	${PREFIX}/lib/${PORTNAME}
 NOPRECIOUSMAKEVARS=	yes # ARCH
diff -udprN /usr/ports/multimedia/libav/distinfo ./distinfo
--- /usr/ports/multimedia/libav/distinfo	2017-08-20 16:05:20.000000000 +0000
+++ ./distinfo	2018-11-27 06:07:10.666426000 +0000
@@ -1,3 +1,3 @@
-TIMESTAMP = 1495507159
-SHA256 (libav-12.1.tar.xz) = fad96aa265d3d64b9e53c159559621ec888effa022908da8372164fa4cbe5d2d
-SIZE (libav-12.1.tar.xz) = 5267292
+TIMESTAMP = 1543298830
+SHA256 (libav-12.3.tar.xz) = 6893cdbd7bc4b62f5d8fd6593c8e0a62babb53e323fbc7124db3658d04ab443b
+SIZE (libav-12.3.tar.xz) = 5267988
diff -udprN /usr/ports/multimedia/libav/files/patch-libavcodec_libfdk-aacenc.c ./files/patch-libavcodec_libfdk-aacenc.c
--- /usr/ports/multimedia/libav/files/patch-libavcodec_libfdk-aacenc.c	1970-01-01 00:00:00.000000000 +0000
+++ ./files/patch-libavcodec_libfdk-aacenc.c	2018-11-27 09:37:05.572195000 +0000
@@ -0,0 +1,71 @@
+--- libavcodec/libfdk-aacenc.c.orig	2018-02-12 21:25:59 UTC
++++ libavcodec/libfdk-aacenc.c
+@@ -26,6 +26,11 @@
+ #include "audio_frame_queue.h"
+ #include "internal.h"
+ 
++#define FDKENC_VER_AT_LEAST(vl0, vl1) \
++    (defined(AACENCODER_LIB_VL0) && \
++        ((AACENCODER_LIB_VL0 > vl0) || \
++         (AACENCODER_LIB_VL0 == vl0 && AACENCODER_LIB_VL1 >= vl1)))
++
+ typedef struct AACContext {
+     const AVClass *class;
+     HANDLE_AACENCODER handle;
+@@ -286,7 +291,11 @@ static av_cold int aac_encode_init(AVCod
+     }
+ 
+     avctx->frame_size = info.frameLength;
++#if FDKENC_VER_AT_LEAST(4, 0)
++    avctx->initial_padding = info.nDelay;
++#else
+     avctx->initial_padding = info.encoderDelay;
++#endif
+     ff_af_queue_init(avctx, &s->afq);
+ 
+     if (avctx->flags & AV_CODEC_FLAG_GLOBAL_HEADER) {
+@@ -319,28 +328,35 @@ static int aac_encode_frame(AVCodecConte
+     int out_buffer_size, out_buffer_element_size;
+     void *in_ptr, *out_ptr;
+     int ret;
++    uint8_t dummy_buf[1];
+     AACENC_ERROR err;
+ 
+     /* handle end-of-stream small frame and flushing */
+     if (!frame) {
++        /* Must be a non-null pointer, even if it's a dummy. We could use
++         * the address of anything else on the stack as well. */
++        in_ptr               = dummy_buf;
++        in_buffer_size       = 0;
++
+         in_args.numInSamples = -1;
+     } else {
+-        in_ptr                   = frame->data[0];
+-        in_buffer_size           = 2 * avctx->channels * frame->nb_samples;
+-        in_buffer_element_size   = 2;
++        in_ptr               = frame->data[0];
++        in_buffer_size       = 2 * avctx->channels * frame->nb_samples;
+ 
+-        in_args.numInSamples     = avctx->channels * frame->nb_samples;
+-        in_buf.numBufs           = 1;
+-        in_buf.bufs              = &in_ptr;
+-        in_buf.bufferIdentifiers = &in_buffer_identifier;
+-        in_buf.bufSizes          = &in_buffer_size;
+-        in_buf.bufElSizes        = &in_buffer_element_size;
++        in_args.numInSamples = avctx->channels * frame->nb_samples;
+ 
+         /* add current frame to the queue */
+         if ((ret = ff_af_queue_add(&s->afq, frame)) < 0)
+             return ret;
+     }
+ 
++    in_buffer_element_size   = 2;
++    in_buf.numBufs           = 1;
++    in_buf.bufs              = &in_ptr;
++    in_buf.bufferIdentifiers = &in_buffer_identifier;
++    in_buf.bufSizes          = &in_buffer_size;
++    in_buf.bufElSizes        = &in_buffer_element_size;
++
+     /* The maximum packet size is 6144 bits aka 768 bytes per channel. */
+     if ((ret = ff_alloc_packet(avpkt, FFMAX(8192, 768 * avctx->channels)))) {
+         av_log(avctx, AV_LOG_ERROR, "Error getting output packet\n");