Re: [FFmpeg-devel] [PATCH v5 1/3] lavc/libopenh264enc: Rewrite profile handling

2020-05-13 Thread Fu, Linjie
> From: ffmpeg-devel  On Behalf Of Fu,
> Linjie
> Sent: Tuesday, May 12, 2020 21:58
> To: FFmpeg development discussions and patches  de...@ffmpeg.org>
> Subject: Re: [FFmpeg-devel] [PATCH v5 1/3] lavc/libopenh264enc: Rewrite
> profile handling
> 
> > From: ffmpeg-devel  On Behalf Of
> > Martin Storsjö
> > Sent: Tuesday, May 12, 2020 17:36
> > To: FFmpeg development discussions and patches  > de...@ffmpeg.org>
> > Cc: Fu, Linjie 
> > Subject: Re: [FFmpeg-devel] [PATCH v5 1/3] lavc/libopenh264enc: Rewrite
> > profile handling
> >
> > On Wed, 6 May 2020, Linjie Fu wrote:
> >
> > > Support the profiles "constrained_baseline" and "high" for libopenh264
> > > version >= 1.8, support "constrained_baseline" and "main" for earlier
> > > version.
> > >
> > > If option not supported with current version, convert to constrained
> > > baseline with a warning for users.
> > >
> > > Signed-off-by: Linjie Fu 
> > > ---
> > > libavcodec/libopenh264enc.c | 44
> > +
> > > 1 file changed, 40 insertions(+), 4 deletions(-)
> > >
> > > diff --git a/libavcodec/libopenh264enc.c b/libavcodec/libopenh264enc.c
> > > index 3bb3cceb64..12c71ca0e9 100644
> > > --- a/libavcodec/libopenh264enc.c
> > > +++ b/libavcodec/libopenh264enc.c
> > > @@ -44,7 +44,7 @@ typedef struct SVCContext {
> > > ISVCEncoder *encoder;
> > > int slice_mode;
> > > int loopfilter;
> > > -char *profile;
> > > +int profile;
> > > int max_nal_size;
> > > int skip_frames;
> > > int skipped;
> > > @@ -75,7 +75,12 @@ static const AVOption options[] = {
> > > #endif
> > > #endif
> > > { "loopfilter", "enable loop filter", OFFSET(loopfilter),
> AV_OPT_TYPE_INT,
> > { .i64 = 1 }, 0, 1, VE },
> > > -{ "profile", "set profile restrictions", OFFSET(profile),
> > AV_OPT_TYPE_STRING, { .str = NULL }, 0, 0, VE },
> > > +{ "profile", "set profile restrictions", OFFSET(profile),
> AV_OPT_TYPE_INT,
> > { .i64 = FF_PROFILE_UNKNOWN }, FF_PROFILE_UNKNOWN, 0x, VE,
> > "profile" },
> > > +#define PROFILE(name, value)  name, NULL, 0, AV_OPT_TYPE_CONST,
> > { .i64 = value }, 0, 0, VE, "profile"
> > > +{ PROFILE("constrained_baseline",
> > FF_PROFILE_H264_CONSTRAINED_BASELINE) },
> > > +{ PROFILE("main", FF_PROFILE_H264_MAIN) },
> > > +{ PROFILE("high", FF_PROFILE_H264_HIGH) },
> > > +#undef PROFILE
> > > { "max_nal_size", "set maximum NAL size in bytes",
> > OFFSET(max_nal_size), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, VE },
> > > { "allow_skip_frames", "allow skipping frames to hit the target 
> > > bitrate",
> > OFFSET(skip_frames), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE },
> > > { "cabac", "Enable cabac", OFFSET(cabac), AV_OPT_TYPE_INT, { .i64 = 0 
> > > },
> > 0, 1, VE },
> > > @@ -176,10 +181,41 @@ FF_ENABLE_DEPRECATION_WARNINGS
> > > param.iLoopFilterDisableIdc  = !s->loopfilter;
> > > param.iEntropyCodingModeFlag = 0;
> > > param.iMultipleThreadIdc = avctx->thread_count;
> > > -if (s->profile && !strcmp(s->profile, "main"))
> > > +
> > > +if (s->profile == FF_PROFILE_UNKNOWN)
> > > +s->profile = !s->cabac ?
> FF_PROFILE_H264_CONSTRAINED_BASELINE :
> > > +#if OPENH264_VER_AT_LEAST(1, 8)
> > > + FF_PROFILE_H264_HIGH;
> > > +#else
> > > + FF_PROFILE_H264_MAIN;
> > > +#endif
> > > +
> > > +switch (s->profile) {
> > > +#if OPENH264_VER_AT_LEAST(1, 8)
> > > +case FF_PROFILE_H264_HIGH:
> > > param.iEntropyCodingModeFlag = 1;
> > > -else if (!s->profile && s->cabac)
> > > +av_log(avctx, AV_LOG_VERBOSE, "Using CABAC, "
> > > +"select EProfileIdc PRO_HIGH in libopenh264.\n");
> > > +break;
> > > +#else
> > > +case FF_PROFILE_H264_MAIN:
> > > param.iEntropyCodingModeFlag = 1;
> > > +av_log(avctx, AV_LOG_VERBOSE, "Usin

Re: [FFmpeg-devel] [PATCH v5 1/3] lavc/libopenh264enc: Rewrite profile handling

2020-05-12 Thread Fu, Linjie
> From: ffmpeg-devel  On Behalf Of
> Martin Storsjö
> Sent: Tuesday, May 12, 2020 17:36
> To: FFmpeg development discussions and patches  de...@ffmpeg.org>
> Cc: Fu, Linjie 
> Subject: Re: [FFmpeg-devel] [PATCH v5 1/3] lavc/libopenh264enc: Rewrite
> profile handling
> 
> On Wed, 6 May 2020, Linjie Fu wrote:
> 
> > Support the profiles "constrained_baseline" and "high" for libopenh264
> > version >= 1.8, support "constrained_baseline" and "main" for earlier
> > version.
> >
> > If option not supported with current version, convert to constrained
> > baseline with a warning for users.
> >
> > Signed-off-by: Linjie Fu 
> > ---
> > libavcodec/libopenh264enc.c | 44
> +
> > 1 file changed, 40 insertions(+), 4 deletions(-)
> >
> > diff --git a/libavcodec/libopenh264enc.c b/libavcodec/libopenh264enc.c
> > index 3bb3cceb64..12c71ca0e9 100644
> > --- a/libavcodec/libopenh264enc.c
> > +++ b/libavcodec/libopenh264enc.c
> > @@ -44,7 +44,7 @@ typedef struct SVCContext {
> > ISVCEncoder *encoder;
> > int slice_mode;
> > int loopfilter;
> > -char *profile;
> > +int profile;
> > int max_nal_size;
> > int skip_frames;
> > int skipped;
> > @@ -75,7 +75,12 @@ static const AVOption options[] = {
> > #endif
> > #endif
> > { "loopfilter", "enable loop filter", OFFSET(loopfilter), 
> > AV_OPT_TYPE_INT,
> { .i64 = 1 }, 0, 1, VE },
> > -{ "profile", "set profile restrictions", OFFSET(profile),
> AV_OPT_TYPE_STRING, { .str = NULL }, 0, 0, VE },
> > +{ "profile", "set profile restrictions", OFFSET(profile), 
> > AV_OPT_TYPE_INT,
> { .i64 = FF_PROFILE_UNKNOWN }, FF_PROFILE_UNKNOWN, 0x, VE,
> "profile" },
> > +#define PROFILE(name, value)  name, NULL, 0, AV_OPT_TYPE_CONST,
> { .i64 = value }, 0, 0, VE, "profile"
> > +{ PROFILE("constrained_baseline",
> FF_PROFILE_H264_CONSTRAINED_BASELINE) },
> > +{ PROFILE("main", FF_PROFILE_H264_MAIN) },
> > +{ PROFILE("high", FF_PROFILE_H264_HIGH) },
> > +#undef PROFILE
> > { "max_nal_size", "set maximum NAL size in bytes",
> OFFSET(max_nal_size), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, VE },
> > { "allow_skip_frames", "allow skipping frames to hit the target 
> > bitrate",
> OFFSET(skip_frames), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE },
> > { "cabac", "Enable cabac", OFFSET(cabac), AV_OPT_TYPE_INT, { .i64 = 0 },
> 0, 1, VE },
> > @@ -176,10 +181,41 @@ FF_ENABLE_DEPRECATION_WARNINGS
> > param.iLoopFilterDisableIdc  = !s->loopfilter;
> > param.iEntropyCodingModeFlag = 0;
> > param.iMultipleThreadIdc = avctx->thread_count;
> > -if (s->profile && !strcmp(s->profile, "main"))
> > +
> > +if (s->profile == FF_PROFILE_UNKNOWN)
> > +s->profile = !s->cabac ? FF_PROFILE_H264_CONSTRAINED_BASELINE :
> > +#if OPENH264_VER_AT_LEAST(1, 8)
> > + FF_PROFILE_H264_HIGH;
> > +#else
> > + FF_PROFILE_H264_MAIN;
> > +#endif
> > +
> > +switch (s->profile) {
> > +#if OPENH264_VER_AT_LEAST(1, 8)
> > +case FF_PROFILE_H264_HIGH:
> > param.iEntropyCodingModeFlag = 1;
> > -else if (!s->profile && s->cabac)
> > +av_log(avctx, AV_LOG_VERBOSE, "Using CABAC, "
> > +"select EProfileIdc PRO_HIGH in libopenh264.\n");
> > +break;
> > +#else
> > +case FF_PROFILE_H264_MAIN:
> > param.iEntropyCodingModeFlag = 1;
> > +av_log(avctx, AV_LOG_VERBOSE, "Using CABAC, "
> > +"select EProfileIdc PRO_MAIN in libopenh264.\n");
> > +break;
> > +#endif
> > +case FF_PROFILE_H264_CONSTRAINED_BASELINE:
> > +case FF_PROFILE_UNKNOWN:
> > +param.iEntropyCodingModeFlag = 0;
> > +av_log(avctx, AV_LOG_VERBOSE, "Using CAVLC, "
> > +   "select EProfileIdc PRO_BASELINE in libopenh264.\n");
> > +break;
> > +default:
> > +param.iEntropyCodingModeFlag = 0;
> > +av_log(avctx, AV_LOG_WARNING, "Unsupported profile, "
> > +   "select EProfileIdc PRO_BASELINE in libopenh264.\n");
> > +break;
> > +}
> >
> > param.sSpatialLayers[0].iVideoWidth = param.iPicWidth;
> > param.sSpatialLayers[0].iVideoHeight= param.iPicHeight;
> > --
> > 2.17.1
> 
> Thanks, this looks ok to me.
> 
> // Martin
> 
Thanks for the review.

- Linjie

___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

Re: [FFmpeg-devel] [PATCH v5 1/3] lavc/libopenh264enc: Rewrite profile handling

2020-05-12 Thread Martin Storsjö

On Wed, 6 May 2020, Linjie Fu wrote:


Support the profiles "constrained_baseline" and "high" for libopenh264
version >= 1.8, support "constrained_baseline" and "main" for earlier
version.

If option not supported with current version, convert to constrained
baseline with a warning for users.

Signed-off-by: Linjie Fu 
---
libavcodec/libopenh264enc.c | 44 +
1 file changed, 40 insertions(+), 4 deletions(-)

diff --git a/libavcodec/libopenh264enc.c b/libavcodec/libopenh264enc.c
index 3bb3cceb64..12c71ca0e9 100644
--- a/libavcodec/libopenh264enc.c
+++ b/libavcodec/libopenh264enc.c
@@ -44,7 +44,7 @@ typedef struct SVCContext {
ISVCEncoder *encoder;
int slice_mode;
int loopfilter;
-char *profile;
+int profile;
int max_nal_size;
int skip_frames;
int skipped;
@@ -75,7 +75,12 @@ static const AVOption options[] = {
#endif
#endif
{ "loopfilter", "enable loop filter", OFFSET(loopfilter), AV_OPT_TYPE_INT, 
{ .i64 = 1 }, 0, 1, VE },
-{ "profile", "set profile restrictions", OFFSET(profile), 
AV_OPT_TYPE_STRING, { .str = NULL }, 0, 0, VE },
+{ "profile", "set profile restrictions", OFFSET(profile), AV_OPT_TYPE_INT, { .i64 = 
FF_PROFILE_UNKNOWN }, FF_PROFILE_UNKNOWN, 0x, VE, "profile" },
+#define PROFILE(name, value)  name, NULL, 0, AV_OPT_TYPE_CONST, { .i64 = value }, 0, 0, 
VE, "profile"
+{ PROFILE("constrained_baseline", 
FF_PROFILE_H264_CONSTRAINED_BASELINE) },
+{ PROFILE("main", FF_PROFILE_H264_MAIN) },
+{ PROFILE("high", FF_PROFILE_H264_HIGH) },
+#undef PROFILE
{ "max_nal_size", "set maximum NAL size in bytes", OFFSET(max_nal_size), 
AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, VE },
{ "allow_skip_frames", "allow skipping frames to hit the target bitrate", 
OFFSET(skip_frames), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE },
{ "cabac", "Enable cabac", OFFSET(cabac), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 
1, VE },
@@ -176,10 +181,41 @@ FF_ENABLE_DEPRECATION_WARNINGS
param.iLoopFilterDisableIdc  = !s->loopfilter;
param.iEntropyCodingModeFlag = 0;
param.iMultipleThreadIdc = avctx->thread_count;
-if (s->profile && !strcmp(s->profile, "main"))
+
+if (s->profile == FF_PROFILE_UNKNOWN)
+s->profile = !s->cabac ? FF_PROFILE_H264_CONSTRAINED_BASELINE :
+#if OPENH264_VER_AT_LEAST(1, 8)
+ FF_PROFILE_H264_HIGH;
+#else
+ FF_PROFILE_H264_MAIN;
+#endif
+
+switch (s->profile) {
+#if OPENH264_VER_AT_LEAST(1, 8)
+case FF_PROFILE_H264_HIGH:
param.iEntropyCodingModeFlag = 1;
-else if (!s->profile && s->cabac)
+av_log(avctx, AV_LOG_VERBOSE, "Using CABAC, "
+"select EProfileIdc PRO_HIGH in libopenh264.\n");
+break;
+#else
+case FF_PROFILE_H264_MAIN:
param.iEntropyCodingModeFlag = 1;
+av_log(avctx, AV_LOG_VERBOSE, "Using CABAC, "
+"select EProfileIdc PRO_MAIN in libopenh264.\n");
+break;
+#endif
+case FF_PROFILE_H264_CONSTRAINED_BASELINE:
+case FF_PROFILE_UNKNOWN:
+param.iEntropyCodingModeFlag = 0;
+av_log(avctx, AV_LOG_VERBOSE, "Using CAVLC, "
+   "select EProfileIdc PRO_BASELINE in libopenh264.\n");
+break;
+default:
+param.iEntropyCodingModeFlag = 0;
+av_log(avctx, AV_LOG_WARNING, "Unsupported profile, "
+   "select EProfileIdc PRO_BASELINE in libopenh264.\n");
+break;
+}

param.sSpatialLayers[0].iVideoWidth = param.iPicWidth;
param.sSpatialLayers[0].iVideoHeight= param.iPicHeight;
--
2.17.1


Thanks, this looks ok to me.

// Martin

___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

[FFmpeg-devel] [PATCH v5 1/3] lavc/libopenh264enc: Rewrite profile handling

2020-05-06 Thread Linjie Fu
Support the profiles "constrained_baseline" and "high" for libopenh264
version >= 1.8, support "constrained_baseline" and "main" for earlier
version.

If option not supported with current version, convert to constrained
baseline with a warning for users.

Signed-off-by: Linjie Fu 
---
 libavcodec/libopenh264enc.c | 44 +
 1 file changed, 40 insertions(+), 4 deletions(-)

diff --git a/libavcodec/libopenh264enc.c b/libavcodec/libopenh264enc.c
index 3bb3cceb64..12c71ca0e9 100644
--- a/libavcodec/libopenh264enc.c
+++ b/libavcodec/libopenh264enc.c
@@ -44,7 +44,7 @@ typedef struct SVCContext {
 ISVCEncoder *encoder;
 int slice_mode;
 int loopfilter;
-char *profile;
+int profile;
 int max_nal_size;
 int skip_frames;
 int skipped;
@@ -75,7 +75,12 @@ static const AVOption options[] = {
 #endif
 #endif
 { "loopfilter", "enable loop filter", OFFSET(loopfilter), AV_OPT_TYPE_INT, 
{ .i64 = 1 }, 0, 1, VE },
-{ "profile", "set profile restrictions", OFFSET(profile), 
AV_OPT_TYPE_STRING, { .str = NULL }, 0, 0, VE },
+{ "profile", "set profile restrictions", OFFSET(profile), AV_OPT_TYPE_INT, 
{ .i64 = FF_PROFILE_UNKNOWN }, FF_PROFILE_UNKNOWN, 0x, VE, "profile" },
+#define PROFILE(name, value)  name, NULL, 0, AV_OPT_TYPE_CONST, { .i64 = value 
}, 0, 0, VE, "profile"
+{ PROFILE("constrained_baseline", 
FF_PROFILE_H264_CONSTRAINED_BASELINE) },
+{ PROFILE("main", FF_PROFILE_H264_MAIN) },
+{ PROFILE("high", FF_PROFILE_H264_HIGH) },
+#undef PROFILE
 { "max_nal_size", "set maximum NAL size in bytes", OFFSET(max_nal_size), 
AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, VE },
 { "allow_skip_frames", "allow skipping frames to hit the target bitrate", 
OFFSET(skip_frames), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE },
 { "cabac", "Enable cabac", OFFSET(cabac), AV_OPT_TYPE_INT, { .i64 = 0 }, 
0, 1, VE },
@@ -176,10 +181,41 @@ FF_ENABLE_DEPRECATION_WARNINGS
 param.iLoopFilterDisableIdc  = !s->loopfilter;
 param.iEntropyCodingModeFlag = 0;
 param.iMultipleThreadIdc = avctx->thread_count;
-if (s->profile && !strcmp(s->profile, "main"))
+
+if (s->profile == FF_PROFILE_UNKNOWN)
+s->profile = !s->cabac ? FF_PROFILE_H264_CONSTRAINED_BASELINE :
+#if OPENH264_VER_AT_LEAST(1, 8)
+ FF_PROFILE_H264_HIGH;
+#else
+ FF_PROFILE_H264_MAIN;
+#endif
+
+switch (s->profile) {
+#if OPENH264_VER_AT_LEAST(1, 8)
+case FF_PROFILE_H264_HIGH:
 param.iEntropyCodingModeFlag = 1;
-else if (!s->profile && s->cabac)
+av_log(avctx, AV_LOG_VERBOSE, "Using CABAC, "
+"select EProfileIdc PRO_HIGH in libopenh264.\n");
+break;
+#else
+case FF_PROFILE_H264_MAIN:
 param.iEntropyCodingModeFlag = 1;
+av_log(avctx, AV_LOG_VERBOSE, "Using CABAC, "
+"select EProfileIdc PRO_MAIN in libopenh264.\n");
+break;
+#endif
+case FF_PROFILE_H264_CONSTRAINED_BASELINE:
+case FF_PROFILE_UNKNOWN:
+param.iEntropyCodingModeFlag = 0;
+av_log(avctx, AV_LOG_VERBOSE, "Using CAVLC, "
+   "select EProfileIdc PRO_BASELINE in libopenh264.\n");
+break;
+default:
+param.iEntropyCodingModeFlag = 0;
+av_log(avctx, AV_LOG_WARNING, "Unsupported profile, "
+   "select EProfileIdc PRO_BASELINE in libopenh264.\n");
+break;
+}
 
 param.sSpatialLayers[0].iVideoWidth = param.iPicWidth;
 param.sSpatialLayers[0].iVideoHeight= param.iPicHeight;
-- 
2.17.1

___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".