]> git.sesse.net Git - ffmpeg/commitdiff
lavc/libopenh264enc: Allow specifying the profile through AVCodecContext
authorLinjie Fu <linjie.fu@intel.com>
Wed, 6 May 2020 13:47:51 +0000 (21:47 +0800)
committerLinjie Fu <linjie.fu@intel.com>
Wed, 13 May 2020 01:55:47 +0000 (09:55 +0800)
And determine the profile with following priority:
1. s->profile; then
2. avctx->profile; then
3. s->cabac; then
4. a default profile.

This seems more natural in case user somehow sets both avctx->profile and
s->profile.

Reviewed-by: Martin Storsjö <martin@martin.st>
Signed-off-by: Linjie Fu <linjie.fu@intel.com>
libavcodec/libopenh264enc.c

index 12c71ca0e9b8249020829104375bcef7df6e381b..4c57fa1c89aa16fe2224b2abb53afc5ffd7be21f 100644 (file)
@@ -182,6 +182,21 @@ FF_ENABLE_DEPRECATION_WARNINGS
     param.iEntropyCodingModeFlag     = 0;
     param.iMultipleThreadIdc         = avctx->thread_count;
 
+    /* Allow specifying the libopenh264 profile through AVCodecContext. */
+    if (FF_PROFILE_UNKNOWN == s->profile &&
+        FF_PROFILE_UNKNOWN != avctx->profile)
+        switch (avctx->profile) {
+        case FF_PROFILE_H264_HIGH:
+        case FF_PROFILE_H264_MAIN:
+        case FF_PROFILE_H264_CONSTRAINED_BASELINE:
+            s->profile = avctx->profile;
+            break;
+        default:
+            av_log(avctx, AV_LOG_WARNING,
+                   "Unsupported avctx->profile: %d.\n", avctx->profile);
+            break;
+        }
+
     if (s->profile == FF_PROFILE_UNKNOWN)
         s->profile = !s->cabac ? FF_PROFILE_H264_CONSTRAINED_BASELINE :
 #if OPENH264_VER_AT_LEAST(1, 8)