diff mbox

[FFmpeg-devel] lavc/mpegvideo_enc: allow to force low_delay by increasing strict_std_compliance

Message ID 1495535328-32223-1-git-send-email-stefasab@gmail.com
State Superseded
Headers show

Commit Message

Stefano Sabatini May 23, 2017, 10:28 a.m. UTC
Forcing low_delay can be useful, even if not officially supported.
---
 libavcodec/mpegvideo_enc.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

Comments

Steven Liu May 23, 2017, 10:30 a.m. UTC | #1
2017-05-23 18:28 GMT+08:00 Stefano Sabatini <stefasab@gmail.com>:

> Forcing low_delay can be useful, even if not officially supported.
> ---
>  libavcodec/mpegvideo_enc.c | 5 +++--
>  1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c
> index db241c8..1123788 100644
> --- a/libavcodec/mpegvideo_enc.c
> +++ b/libavcodec/mpegvideo_enc.c
> @@ -671,9 +671,10 @@ FF_ENABLE_DEPRECATION_WARNINGS
>      }
>
>      if (s->avctx->flags & AV_CODEC_FLAG_LOW_DELAY) {
> -        if (s->codec_id != AV_CODEC_ID_MPEG2VIDEO) {
> +        if (s->codec_id != AV_CODEC_ID_MPEG2VIDEO &&
> +            s->strict_std_compliance >= FF_COMPLIANCE_NORMAL) {
>              av_log(avctx, AV_LOG_ERROR,
> -                  "low delay forcing is only available for mpeg2\n");
> +                  "low delay forcing is only available for mpeg2,
> increase strict_std_compliance to force it\n");
>              return -1;
>          }
>          if (s->max_b_frames != 0) {
> --
> 1.9.1
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


LGTM
Moritz Barsnick May 23, 2017, 1:07 p.m. UTC | #2
On Tue, May 23, 2017 at 12:28:48 +0200, Stefano Sabatini wrote:
> -        if (s->codec_id != AV_CODEC_ID_MPEG2VIDEO) {
> +        if (s->codec_id != AV_CODEC_ID_MPEG2VIDEO &&
> +            s->strict_std_compliance >= FF_COMPLIANCE_NORMAL) {
>              av_log(avctx, AV_LOG_ERROR,
> -                  "low delay forcing is only available for mpeg2\n");
> +                  "low delay forcing is only available for mpeg2, increase strict_std_compliance to force it\n");

Mathematically speaking, you need to decrease, not increase it (so that
it makes s->strict_std_compliance >= FF_COMPLIANCE_NORMAL false).

#define FF_COMPLIANCE_VERY_STRICT   2 ///< Strictly conform to an older more strict version of the spec or reference software.
#define FF_COMPLIANCE_STRICT        1 ///< Strictly conform to all the things in the spec no matter what consequences.
#define FF_COMPLIANCE_NORMAL        0
#define FF_COMPLIANCE_UNOFFICIAL   -1 ///< Allow unofficial extensions
#define FF_COMPLIANCE_EXPERIMENTAL -2 ///< Allow nonstandardized experimental things.

The text is also confusing (while correct) in that you'll be "forcing
the forcing (of low delay)".

Perhaps something like:
"[...] set strict_std_compliance to 'unofficial' or lower in order to
allow it", or "enable it nevertheless". (I'm too lazy to check for
other wordings.)

Moritz
diff mbox

Patch

diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c
index db241c8..1123788 100644
--- a/libavcodec/mpegvideo_enc.c
+++ b/libavcodec/mpegvideo_enc.c
@@ -671,9 +671,10 @@  FF_ENABLE_DEPRECATION_WARNINGS
     }
 
     if (s->avctx->flags & AV_CODEC_FLAG_LOW_DELAY) {
-        if (s->codec_id != AV_CODEC_ID_MPEG2VIDEO) {
+        if (s->codec_id != AV_CODEC_ID_MPEG2VIDEO &&
+            s->strict_std_compliance >= FF_COMPLIANCE_NORMAL) {
             av_log(avctx, AV_LOG_ERROR,
-                  "low delay forcing is only available for mpeg2\n");
+                  "low delay forcing is only available for mpeg2, increase strict_std_compliance to force it\n");
             return -1;
         }
         if (s->max_b_frames != 0) {