[05/11] lavfi/testsrc: set output framerate

Message ID 1446050917-7419-1-git-send-email-stebbins@jetheaddev.com
State New
Headers show

Commit Message

John Stebbins Oct. 28, 2015, 4:48 p.m.
From: Stefano Sabatini <stefasab@gmail.com>

(cherry picked from ffmpeg commit 7cd5fa35fecc2717223459d04822faed6bbd40fa)
---
 libavfilter/vsrc_testsrc.c | 15 +++++++--------
 1 file changed, 7 insertions(+), 8 deletions(-)

Comments

Anton Khirnov Oct. 29, 2015, 6:52 p.m. | #1
Quoting John Stebbins (2015-10-28 17:48:34)
> From: Stefano Sabatini <stefasab@gmail.com>
> 
> (cherry picked from ffmpeg commit 7cd5fa35fecc2717223459d04822faed6bbd40fa)
> ---
>  libavfilter/vsrc_testsrc.c | 15 +++++++--------
>  1 file changed, 7 insertions(+), 8 deletions(-)
> 
> diff --git a/libavfilter/vsrc_testsrc.c b/libavfilter/vsrc_testsrc.c
> index e41625e..cb13d7e 100644
> --- a/libavfilter/vsrc_testsrc.c
> +++ b/libavfilter/vsrc_testsrc.c
> @@ -46,7 +46,7 @@ typedef struct TestSourceContext {
>      const AVClass *class;
>      int h, w;
>      unsigned int nb_frame;
> -    AVRational time_base;
> +    AVRational time_base, frame_rate;
>      int64_t pts, max_pts;
>      char *size;                 ///< video frame size
>      char *rate;                 ///< video frame rate
> @@ -75,7 +75,6 @@ static const AVOption testsrc_options[] = {
>  static av_cold int init_common(AVFilterContext *ctx)
>  {
>      TestSourceContext *test = ctx->priv;
> -    AVRational frame_rate_q;
>      int64_t duration = -1;
>      int ret = 0;
>  
> @@ -84,8 +83,8 @@ static av_cold int init_common(AVFilterContext *ctx)
>          return ret;
>      }
>  
> -    if ((ret = av_parse_video_rate(&frame_rate_q, test->rate)) < 0 ||
> -        frame_rate_q.den <= 0 || frame_rate_q.num <= 0) {
> +    if ((ret = av_parse_video_rate(&test->frame_rate, test->rate)) < 0 ||
> +        test->frame_rate.den <= 0 || test->frame_rate.num <= 0) {

This looks unnecessary, av_parse_video_rate() already checks that the
value is a valid framerate.
John Stebbins Oct. 29, 2015, 8:28 p.m. | #2
On Thu, 2015-10-29 at 19:52 +0100, Anton Khirnov wrote:
> Quoting John Stebbins (2015-10-28 17:48:34)
> > From: Stefano Sabatini <stefasab@gmail.com>
> > 
> > (cherry picked from ffmpeg commit
> > 7cd5fa35fecc2717223459d04822faed6bbd40fa)
> > ---
> >  libavfilter/vsrc_testsrc.c | 15 +++++++--------
> >  1 file changed, 7 insertions(+), 8 deletions(-)
> > 
> > diff --git a/libavfilter/vsrc_testsrc.c b/libavfilter/vsrc_testsrc.c
> > index e41625e..cb13d7e 100644
> > --- a/libavfilter/vsrc_testsrc.c
> > +++ b/libavfilter/vsrc_testsrc.c
> > @@ -46,7 +46,7 @@ typedef struct TestSourceContext {
> >      const AVClass *class;
> >      int h, w;
> >      unsigned int nb_frame;
> > -    AVRational time_base;
> > +    AVRational time_base, frame_rate;
> >      int64_t pts, max_pts;
> >      char *size;                 ///< video frame size
> >      char *rate;                 ///< video frame rate
> > @@ -75,7 +75,6 @@ static const AVOption testsrc_options[] = {
> >  static av_cold int init_common(AVFilterContext *ctx)
> >  {
> >      TestSourceContext *test = ctx->priv;
> > -    AVRational frame_rate_q;
> >      int64_t duration = -1;
> >      int ret = 0;
> >  
> > @@ -84,8 +83,8 @@ static av_cold int init_common(AVFilterContext
> > *ctx)
> >          return ret;
> >      }
> >  
> > -    if ((ret = av_parse_video_rate(&frame_rate_q, test->rate)) < 0
> > ||
> > -        frame_rate_q.den <= 0 || frame_rate_q.num <= 0) {
> > +    if ((ret = av_parse_video_rate(&test->frame_rate, test->rate))
> > < 0 ||
> > +        test->frame_rate.den <= 0 || test->frame_rate.num <= 0) {
> 
> This looks unnecessary, av_parse_video_rate() already checks that the
> value is a valid framerate.
> 

Ok.  I was just making it consistent with the code it replaces.  I will
eliminate the redundant test.
Anton Khirnov Oct. 29, 2015, 8:33 p.m. | #3
Quoting John Stebbins (2015-10-29 21:28:47)
> On Thu, 2015-10-29 at 19:52 +0100, Anton Khirnov wrote:
> > Quoting John Stebbins (2015-10-28 17:48:34)
> > > From: Stefano Sabatini <stefasab@gmail.com>
> > > 
> > > (cherry picked from ffmpeg commit
> > > 7cd5fa35fecc2717223459d04822faed6bbd40fa)
> > > ---
> > >  libavfilter/vsrc_testsrc.c | 15 +++++++--------
> > >  1 file changed, 7 insertions(+), 8 deletions(-)
> > > 
> > > diff --git a/libavfilter/vsrc_testsrc.c b/libavfilter/vsrc_testsrc.c
> > > index e41625e..cb13d7e 100644
> > > --- a/libavfilter/vsrc_testsrc.c
> > > +++ b/libavfilter/vsrc_testsrc.c
> > > @@ -46,7 +46,7 @@ typedef struct TestSourceContext {
> > >      const AVClass *class;
> > >      int h, w;
> > >      unsigned int nb_frame;
> > > -    AVRational time_base;
> > > +    AVRational time_base, frame_rate;
> > >      int64_t pts, max_pts;
> > >      char *size;                 ///< video frame size
> > >      char *rate;                 ///< video frame rate
> > > @@ -75,7 +75,6 @@ static const AVOption testsrc_options[] = {
> > >  static av_cold int init_common(AVFilterContext *ctx)
> > >  {
> > >      TestSourceContext *test = ctx->priv;
> > > -    AVRational frame_rate_q;
> > >      int64_t duration = -1;
> > >      int ret = 0;
> > >  
> > > @@ -84,8 +83,8 @@ static av_cold int init_common(AVFilterContext
> > > *ctx)
> > >          return ret;
> > >      }
> > >  
> > > -    if ((ret = av_parse_video_rate(&frame_rate_q, test->rate)) < 0
> > > ||
> > > -        frame_rate_q.den <= 0 || frame_rate_q.num <= 0) {
> > > +    if ((ret = av_parse_video_rate(&test->frame_rate, test->rate))
> > > < 0 ||
> > > +        test->frame_rate.den <= 0 || test->frame_rate.num <= 0) {
> > 
> > This looks unnecessary, av_parse_video_rate() already checks that the
> > value is a valid framerate.
> > 
> 
> Ok.  I was just making it consistent with the code it replaces.  I will
> eliminate the redundant test.

Hmm, seems i failed a reading check and didn't notice that the check is
already there in current code. So feel free to keep it there (or remove,
as you prefer).

Patch

diff --git a/libavfilter/vsrc_testsrc.c b/libavfilter/vsrc_testsrc.c
index e41625e..cb13d7e 100644
--- a/libavfilter/vsrc_testsrc.c
+++ b/libavfilter/vsrc_testsrc.c
@@ -46,7 +46,7 @@  typedef struct TestSourceContext {
     const AVClass *class;
     int h, w;
     unsigned int nb_frame;
-    AVRational time_base;
+    AVRational time_base, frame_rate;
     int64_t pts, max_pts;
     char *size;                 ///< video frame size
     char *rate;                 ///< video frame rate
@@ -75,7 +75,6 @@  static const AVOption testsrc_options[] = {
 static av_cold int init_common(AVFilterContext *ctx)
 {
     TestSourceContext *test = ctx->priv;
-    AVRational frame_rate_q;
     int64_t duration = -1;
     int ret = 0;
 
@@ -84,8 +83,8 @@  static av_cold int init_common(AVFilterContext *ctx)
         return ret;
     }
 
-    if ((ret = av_parse_video_rate(&frame_rate_q, test->rate)) < 0 ||
-        frame_rate_q.den <= 0 || frame_rate_q.num <= 0) {
+    if ((ret = av_parse_video_rate(&test->frame_rate, test->rate)) < 0 ||
+        test->frame_rate.den <= 0 || test->frame_rate.num <= 0) {
         av_log(ctx, AV_LOG_ERROR, "Invalid frame rate: '%s'\n", test->rate);
         return ret;
     }
@@ -95,15 +94,14 @@  static av_cold int init_common(AVFilterContext *ctx)
         return ret;
     }
 
-    test->time_base.num = frame_rate_q.den;
-    test->time_base.den = frame_rate_q.num;
+    test->time_base = av_inv_q(test->frame_rate);
     test->max_pts = duration >= 0 ?
         av_rescale_q(duration, AV_TIME_BASE_Q, test->time_base) : -1;
     test->nb_frame = 0;
     test->pts = 0;
 
     av_log(ctx, AV_LOG_DEBUG, "size:%dx%d rate:%d/%d duration:%f sar:%d/%d\n",
-           test->w, test->h, frame_rate_q.num, frame_rate_q.den,
+           test->w, test->h, test->frame_rate.num, test->frame_rate.den,
            duration < 0 ? -1 : test->max_pts * av_q2d(test->time_base),
            test->sar.num, test->sar.den);
     return 0;
@@ -116,7 +114,8 @@  static int config_props(AVFilterLink *outlink)
     outlink->w = test->w;
     outlink->h = test->h;
     outlink->sample_aspect_ratio = test->sar;
-    outlink->time_base = test->time_base;
+    outlink->frame_rate = test->frame_rate;
+    outlink->time_base  = test->time_base;
 
     return 0;
 }