]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/libopenh264enc.c
avformat/avio: Add Metacube support
[ffmpeg] / libavcodec / libopenh264enc.c
index f63aa52348cad26ebd20e23608880ce75a2abb49..54babc3e975d8bc2ebbbb065ac44040cbcd33a46 100644 (file)
@@ -156,7 +156,16 @@ static av_cold int svc_encode_init(AVCodecContext *avctx)
 
     (*s->encoder)->GetDefaultParams(s->encoder, &param);
 
-    param.fMaxFrameRate              = 1/av_q2d(avctx->time_base);
+    if (avctx->framerate.num > 0 && avctx->framerate.den > 0) {
+        param.fMaxFrameRate = av_q2d(avctx->framerate);
+    } else {
+        if (avctx->ticks_per_frame > INT_MAX / avctx->time_base.num) {
+            av_log(avctx, AV_LOG_ERROR,
+                   "Could not set framerate for libopenh264enc: integer overflow\n");
+            return AVERROR(EINVAL);
+        }
+        param.fMaxFrameRate = 1.0 / av_q2d(avctx->time_base) / FFMAX(avctx->ticks_per_frame, 1);
+    }
     param.iPicWidth                  = avctx->width;
     param.iPicHeight                 = avctx->height;
     param.iTargetBitrate             = avctx->bit_rate > 0 ? avctx->bit_rate : TARGET_BITRATE_DEFAULT;
@@ -201,16 +210,6 @@ static av_cold int svc_encode_init(AVCodecContext *avctx)
             break;
         }
 
-#if FF_API_CODER_TYPE && FF_API_OPENH264_CABAC
-FF_DISABLE_DEPRECATION_WARNINGS
-    if (s->coder < 0 && avctx->coder_type == FF_CODER_TYPE_AC)
-        s->coder = 1;
-
-    if (s->coder < 0)
-        s->coder = s->cabac;
-FF_ENABLE_DEPRECATION_WARNINGS
-#endif
-
     if (s->profile == FF_PROFILE_UNKNOWN && s->coder >= 0)
         s->profile = s->coder == 0 ? FF_PROFILE_H264_CONSTRAINED_BASELINE :
 #if OPENH264_VER_AT_LEAST(1, 8)
@@ -429,7 +428,7 @@ static const AVCodecDefault svc_enc_defaults[] = {
     { NULL },
 };
 
-AVCodec ff_libopenh264_encoder = {
+const AVCodec ff_libopenh264_encoder = {
     .name           = "libopenh264",
     .long_name      = NULL_IF_CONFIG_SMALL("OpenH264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10"),
     .type           = AVMEDIA_TYPE_VIDEO,
@@ -438,8 +437,9 @@ AVCodec ff_libopenh264_encoder = {
     .init           = svc_encode_init,
     .encode2        = svc_encode_frame,
     .close          = svc_encode_close,
-    .capabilities   = AV_CODEC_CAP_AUTO_THREADS,
-    .caps_internal  = FF_CODEC_CAP_INIT_THREADSAFE | FF_CODEC_CAP_INIT_CLEANUP,
+    .capabilities   = AV_CODEC_CAP_OTHER_THREADS,
+    .caps_internal  = FF_CODEC_CAP_INIT_THREADSAFE | FF_CODEC_CAP_INIT_CLEANUP |
+                      FF_CODEC_CAP_AUTO_THREADS,
     .pix_fmts       = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P,
                                                     AV_PIX_FMT_NONE },
     .defaults       = svc_enc_defaults,