summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinjie Fu <linjie.fu@intel.com>2020-05-06 21:47:51 +0800
committerLinjie Fu <linjie.fu@intel.com>2020-05-13 09:55:47 +0800
commite3e2702d400e047d7a12b3c4f7ee666ffdafd090 (patch)
treefcdcada77461aa897c0cc1142dc31997b60c0aec
parentd3a7bdd4ac54349aea9150a234478635d50ebd87 (diff)
lavc/libopenh264enc: Allow specifying the profile through AVCodecContext
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>
-rw-r--r--libavcodec/libopenh264enc.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/libavcodec/libopenh264enc.c b/libavcodec/libopenh264enc.c
index 12c71ca0e9..4c57fa1c89 100644
--- a/libavcodec/libopenh264enc.c
+++ b/libavcodec/libopenh264enc.c
@@ -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)