Hi Stanimir, On Thu, 3 Oct 2019 at 12:15, Stanimir Varbanov <stanimir.varbanov@xxxxxxxxxx> wrote: > > I have tested this on db410c with following gst pipeline: > > gst-launch-1.0 -v videotestsrc ! > video/x-raw,format=NV12,width=1280,height=960,framerate=24/1 ! > v4l2h264enc > extra-controls="controls,h264_profile=4,h264_level="5",video_bitrate=10000000;" > ! filesink location=gstenc.h264 > > Loic, could you give it a try on db820c too? > > Here is the info on the bug which I try to fix with current patch: > > https://bugs.96boards.org/show_bug.cgi?id=513 > > On 10/3/19 1:10 PM, Stanimir Varbanov wrote: > > This fixes an issue when setting the encoder framerate because of > > missing precision. Now the frameinterval type is changed to > > TYPE_CONTINUOUS and step = 1. Also the math is changed when > > framerate property is called - the firmware side expects the > > framerate in Q16 values. > > > > Signed-off-by: Stanimir Varbanov <stanimir.varbanov@xxxxxxxxxx> > > --- > > > > Changes since v3: > > Keep min/max numerator one, and divide frate(max/min) to frame > > factor (returned framerate max/min capabilities are in range > > 1 to 120fps but in Q16 i.e. 65536 to 7864320). > > > > drivers/media/platform/qcom/venus/venc.c | 17 ++++++++++++----- > > 1 file changed, 12 insertions(+), 5 deletions(-) > > > > diff --git a/drivers/media/platform/qcom/venus/venc.c b/drivers/media/platform/qcom/venus/venc.c > > index 1b7fb2d5887c..133ff7eceb83 100644 > > --- a/drivers/media/platform/qcom/venus/venc.c > > +++ b/drivers/media/platform/qcom/venus/venc.c > > @@ -22,6 +22,7 @@ > > #include "venc.h" > > > > #define NUM_B_FRAMES_MAX 4 > > +#define FRAMERATE_FACTOR BIT(16) > > > > /* > > * Three resons to keep MPLANE formats (despite that the number of planes > > @@ -576,7 +577,7 @@ static int venc_enum_frameintervals(struct file *file, void *fh, > > struct venus_inst *inst = to_inst(file); > > const struct venus_format *fmt; > > > > - fival->type = V4L2_FRMIVAL_TYPE_STEPWISE; > > + fival->type = V4L2_FRMIVAL_TYPE_CONTINUOUS; > > > > fmt = find_format(inst, fival->pixel_format, > > V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE); > > @@ -600,11 +601,11 @@ static int venc_enum_frameintervals(struct file *file, void *fh, > > return -EINVAL; > > > > fival->stepwise.min.numerator = 1; > > - fival->stepwise.min.denominator = frate_max(inst); > > + fival->stepwise.min.denominator = frate_max(inst) / FRAMERATE_FACTOR; On 820c frate_max() returns 120 set denominator to 0, and causes gstreamer failure. Regards, Loic