From 45f8eb7fba5f14b93ab6fa7ae3057d79fb7001e4 Mon Sep 17 00:00:00 2001
From: vkot <valery.kot@4cinsights.com>
Date: Thu, 11 Oct 2018 13:55:33 +0200
Subject: [PATCH 1/2] Set sample aspect ratio in libopenh264 encoder

---
 libavcodec/libopenh264enc.c | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/libavcodec/libopenh264enc.c b/libavcodec/libopenh264enc.c
index 83c3f0ce20..6d4d9e6192 100644
--- a/libavcodec/libopenh264enc.c
+++ b/libavcodec/libopenh264enc.c
@@ -164,6 +164,32 @@ FF_ENABLE_DEPRECATION_WARNINGS
     param.sSpatialLayers[0].iSpatialBitrate     = param.iTargetBitrate;
     param.sSpatialLayers[0].iMaxSpatialBitrate  = param.iMaxBitrate;
 
+    #if OPENH264_VER_AT_LEAST(1, 7)
+    if(avctx->sample_aspect_ratio.num == 0 || avctx->sample_aspect_ratio.den == 0)
+        param.sSpatialLayers[0].bAspectRatioPresent = false;
+    else {
+        param.sSpatialLayers[0].bAspectRatioPresent = true;
+        if      (!av_cmp_q(av_make_q( 1,  1), avctx->sample_aspect_ratio))  param.sSpatialLayers[0].eAspectRatio = ASP_1x1;
+        else if (!av_cmp_q(av_make_q(12, 11), avctx->sample_aspect_ratio))  param.sSpatialLayers[0].eAspectRatio = ASP_12x11;
+        else if (!av_cmp_q(av_make_q(10, 11), avctx->sample_aspect_ratio))  param.sSpatialLayers[0].eAspectRatio = ASP_10x11;
+        else if (!av_cmp_q(av_make_q(16, 11), avctx->sample_aspect_ratio))  param.sSpatialLayers[0].eAspectRatio = ASP_16x11;
+        else if (!av_cmp_q(av_make_q(40, 33), avctx->sample_aspect_ratio))  param.sSpatialLayers[0].eAspectRatio = ASP_40x33;
+        else if (!av_cmp_q(av_make_q(24, 11), avctx->sample_aspect_ratio))  param.sSpatialLayers[0].eAspectRatio = ASP_24x11;
+        else if (!av_cmp_q(av_make_q(20, 11), avctx->sample_aspect_ratio))  param.sSpatialLayers[0].eAspectRatio = ASP_20x11;
+        else if (!av_cmp_q(av_make_q(32, 11), avctx->sample_aspect_ratio))  param.sSpatialLayers[0].eAspectRatio = ASP_32x11;
+        else if (!av_cmp_q(av_make_q(80, 33), avctx->sample_aspect_ratio))  param.sSpatialLayers[0].eAspectRatio = ASP_80x33;
+        else if (!av_cmp_q(av_make_q(18, 11), avctx->sample_aspect_ratio))  param.sSpatialLayers[0].eAspectRatio = ASP_18x11;
+        else if (!av_cmp_q(av_make_q(15, 11), avctx->sample_aspect_ratio))  param.sSpatialLayers[0].eAspectRatio = ASP_15x11;
+        else if (!av_cmp_q(av_make_q(64, 33), avctx->sample_aspect_ratio))  param.sSpatialLayers[0].eAspectRatio = ASP_64x33;
+        else if (!av_cmp_q(av_make_q(160,99), avctx->sample_aspect_ratio))  param.sSpatialLayers[0].eAspectRatio = ASP_160x99;
+        else {
+            param.sSpatialLayers[0].eAspectRatio = ASP_EXT_SAR;
+            param.sSpatialLayers[0].sAspectRatioExtWidth = avctx->sample_aspect_ratio.num;
+            param.sSpatialLayers[0].sAspectRatioExtHeight = avctx->sample_aspect_ratio.den;
+        }
+    }
+#endif
+
     if ((avctx->slices > 1) && (s->max_nal_size)) {
         av_log(avctx, AV_LOG_ERROR,
                "Invalid combination -slices %d and -max_nal_size %d.\n",
-- 
2.15.1.windows.2

