Message ID | 20181221005135.126908-1-rclaus@google.com |
---|---|
State | Accepted |
Headers | show |
On Thu, Dec 20, 2018 at 7:51 PM Rene Claus <rclaus-at-google.com@ffmpeg.org> wrote: > > This commit adds configuration options to libvpxenc.c that can be used to > tune the sharpness parameter for VP8 and VP9. > > Signed-off-by: Rene Claus <rclaus@google.com> > --- > doc/encoders.texi | 4 ++++ > libavcodec/libvpxenc.c | 6 ++++++ > 2 files changed, 10 insertions(+) > This looks all right aside from the text comments. > diff --git a/doc/encoders.texi b/doc/encoders.texi > index 3d5b9fc2d2..7f9478fa9d 100644 > --- a/doc/encoders.texi > +++ b/doc/encoders.texi > @@ -1767,6 +1767,10 @@ Set number of frames to look ahead for frametype and ratecontrol. > @item error-resilient > Enable error resiliency features. > > +@item sharpness @var{integer} > +Codec control function to set higher sharpness at the expense of a lower PSNR. > +The valid range is [0, 7]. Default is 0. > + Codec control is meaningful for users of libvpx, but not here. The text from vpxenc should work: "Increase sharpness at the expense of lower PSNR" The range is OK to keep, the default up to the library. From the wrapper's point of view the default is unset. > [...] > + { "sharpness", "Sharpness", offsetof(VPxContext, sharpness), AV_OPT_TYPE_INT, {.i64 = -1}, -1, 7, VE}, > This could match as well: "Increase sharpness at the expense of lower PSNR" No need to mention the range, that's handled automatically (try -h encoder=libvpx).
On 12/21/2018 1:09 PM, James Zern wrote: > On Thu, Dec 20, 2018 at 7:51 PM Rene Claus > <rclaus-at-google.com@ffmpeg.org> wrote: >> >> This commit adds configuration options to libvpxenc.c that can be used to >> tune the sharpness parameter for VP8 and VP9. >> >> Signed-off-by: Rene Claus <rclaus@google.com> >> --- >> doc/encoders.texi | 4 ++++ >> libavcodec/libvpxenc.c | 6 ++++++ >> 2 files changed, 10 insertions(+) >> > > This looks all right aside from the text comments. > >> diff --git a/doc/encoders.texi b/doc/encoders.texi >> index 3d5b9fc2d2..7f9478fa9d 100644 >> --- a/doc/encoders.texi >> +++ b/doc/encoders.texi >> @@ -1767,6 +1767,10 @@ Set number of frames to look ahead for frametype and ratecontrol. >> @item error-resilient >> Enable error resiliency features. >> >> +@item sharpness @var{integer} >> +Codec control function to set higher sharpness at the expense of a lower PSNR. >> +The valid range is [0, 7]. Default is 0. >> + > > Codec control is meaningful for users of libvpx, but not here. The > text from vpxenc should work: > "Increase sharpness at the expense of lower PSNR" > The range is OK to keep, the default up to the library. From the > wrapper's point of view the default is unset. > >> [...] >> + { "sharpness", "Sharpness", offsetof(VPxContext, sharpness), AV_OPT_TYPE_INT, {.i64 = -1}, -1, 7, VE}, >> > > This could match as well: > "Increase sharpness at the expense of lower PSNR" > > No need to mention the range, that's handled automatically (try -h > encoder=libvpx). There's no need to mention it the AVOption description, but it's ok in the encoders.texi. Other options do it as well.
On Fri, Dec 21, 2018 at 11:24 AM James Almer <jamrial@gmail.com> wrote: > > On 12/21/2018 1:09 PM, James Zern wrote: > > On Thu, Dec 20, 2018 at 7:51 PM Rene Claus > > <rclaus-at-google.com@ffmpeg.org> wrote: > >> > >> This commit adds configuration options to libvpxenc.c that can be used to > >> tune the sharpness parameter for VP8 and VP9. > >> > >> Signed-off-by: Rene Claus <rclaus@google.com> > >> --- > >> doc/encoders.texi | 4 ++++ > >> libavcodec/libvpxenc.c | 6 ++++++ > >> 2 files changed, 10 insertions(+) > >> > > > > This looks all right aside from the text comments. > > > >> diff --git a/doc/encoders.texi b/doc/encoders.texi > >> index 3d5b9fc2d2..7f9478fa9d 100644 > >> --- a/doc/encoders.texi > >> +++ b/doc/encoders.texi > >> @@ -1767,6 +1767,10 @@ Set number of frames to look ahead for frametype and ratecontrol. > >> @item error-resilient > >> Enable error resiliency features. > >> > >> +@item sharpness @var{integer} > >> +Codec control function to set higher sharpness at the expense of a lower PSNR. > >> +The valid range is [0, 7]. Default is 0. > >> + > > > > Codec control is meaningful for users of libvpx, but not here. The > > text from vpxenc should work: > > "Increase sharpness at the expense of lower PSNR" > > The range is OK to keep, the default up to the library. From the > > wrapper's point of view the default is unset. > > > >> [...] > >> + { "sharpness", "Sharpness", offsetof(VPxContext, sharpness), AV_OPT_TYPE_INT, {.i64 = -1}, -1, 7, VE}, > >> > > > > This could match as well: > > "Increase sharpness at the expense of lower PSNR" > > > > No need to mention the range, that's handled automatically (try -h > > encoder=libvpx). > > There's no need to mention it the AVOption description, but it's ok in > the encoders.texi. Other options do it as well. > Yes that's what I meant, sorry if it wasn't clear.
diff --git a/doc/encoders.texi b/doc/encoders.texi index 3d5b9fc2d2..7f9478fa9d 100644 --- a/doc/encoders.texi +++ b/doc/encoders.texi @@ -1767,6 +1767,10 @@ Set number of frames to look ahead for frametype and ratecontrol. @item error-resilient Enable error resiliency features. +@item sharpness @var{integer} +Codec control function to set higher sharpness at the expense of a lower PSNR. +The valid range is [0, 7]. Default is 0. + @item VP8-specific options @table @option @item ts-parameters diff --git a/libavcodec/libvpxenc.c b/libavcodec/libvpxenc.c index 39af586790..34d2624103 100644 --- a/libavcodec/libvpxenc.c +++ b/libavcodec/libvpxenc.c @@ -76,6 +76,7 @@ typedef struct VPxEncoderContext { struct FrameListData *coded_frame_list; int cpu_used; + int sharpness; /** * VP8 specific flags, see VP8F_* below. */ @@ -130,6 +131,7 @@ static const char *const ctlidstr[] = { [VP8E_SET_TUNING] = "VP8E_SET_TUNING", [VP8E_SET_CQ_LEVEL] = "VP8E_SET_CQ_LEVEL", [VP8E_SET_MAX_INTRA_BITRATE_PCT] = "VP8E_SET_MAX_INTRA_BITRATE_PCT", + [VP8E_SET_SHARPNESS] = "VP8E_SET_SHARPNESS", #if CONFIG_LIBVPX_VP9_ENCODER [VP9E_SET_LOSSLESS] = "VP9E_SET_LOSSLESS", [VP9E_SET_TILE_COLUMNS] = "VP9E_SET_TILE_COLUMNS", @@ -751,6 +753,9 @@ FF_ENABLE_DEPRECATION_WARNINGS return AVERROR(EINVAL); } + if (ctx->sharpness >= 0) + codecctl_int(avctx, VP8E_SET_SHARPNESS, ctx->sharpness); + if (CONFIG_LIBVPX_VP8_ENCODER && avctx->codec_id == AV_CODEC_ID_VP8) { #if FF_API_PRIVATE_OPT FF_DISABLE_DEPRECATION_WARNINGS @@ -1193,6 +1198,7 @@ static int vpx_encode(AVCodecContext *avctx, AVPacket *pkt, {"arnr_strength", "altref noise reduction filter strength", offsetof(VPxContext, arnr_strength), AV_OPT_TYPE_INT, {.i64 = 3}, 0, 6, VE}, \ {"arnr_type", "altref noise reduction filter type", offsetof(VPxContext, arnr_type), AV_OPT_TYPE_INT, {.i64 = 3}, 1, 3, VE}, \ {"rc_lookahead", "Number of frames to look ahead for alternate reference frame selection", offsetof(VPxContext, lag_in_frames), AV_OPT_TYPE_INT, {.i64 = 25}, 0, 25, VE}, \ + { "sharpness", "Sharpness", offsetof(VPxContext, sharpness), AV_OPT_TYPE_INT, {.i64 = -1}, -1, 7, VE}, #if CONFIG_LIBVPX_VP8_ENCODER static const AVOption vp8_options[] = {
This commit adds configuration options to libvpxenc.c that can be used to tune the sharpness parameter for VP8 and VP9. Signed-off-by: Rene Claus <rclaus@google.com> --- doc/encoders.texi | 4 ++++ libavcodec/libvpxenc.c | 6 ++++++ 2 files changed, 10 insertions(+)