[FFmpeg-devel] [PATCH V2] lavf/flvdec: Fix AMF NUMBER type to metadata lost precision

mypopy at gmail.com mypopy at gmail.com
Thu Apr 4 09:42:47 EEST 2019


On Thu, Apr 4, 2019 at 5:21 AM Michael Niedermayer
<michael at niedermayer.cc> wrote:
>
> On Thu, Mar 28, 2019 at 09:23:29PM +0800, Jun Zhao wrote:
> > From: Jun Zhao <barryjzhao at tencent.com>
> >
> > Use %.12g replace %.f when save AMF NUMBER(double) type to
> > metadata. And update fate ref.
> >
> > before this fix, we get FLV metadata like:
> >
> >  Metadata:
> >     lasttimestamp   : 113
> >     lastkeyframetimestamp: 112
> >
> > after this fix:
> >
> >  Metadata:
> >     lasttimestamp   : 113.005
> >     lastkeyframetimestamp: 111.678
> >
> > Signed-off-by: Jun Zhao <barryjzhao at tencent.com>
> > ---
> >  libavformat/flvdec.c                  |    2 +-
> >  tests/ref/fate/flv-add_keyframe_index |    2 +-
> >  2 files changed, 2 insertions(+), 2 deletions(-)
> >
> > diff --git a/libavformat/flvdec.c b/libavformat/flvdec.c
> > index 445d58d..12bfd4b 100644
> > --- a/libavformat/flvdec.c
> > +++ b/libavformat/flvdec.c
> > @@ -649,7 +649,7 @@ static int amf_parse_object(AVFormatContext *s, AVStream *astream,
> >                         sizeof(str_val));
> >              av_dict_set(&s->metadata, key, str_val, 0);
> >          } else if (amf_type == AMF_DATA_TYPE_NUMBER) {
> > -            snprintf(str_val, sizeof(str_val), "%.f", num_val);
> > +            snprintf(str_val, sizeof(str_val), "%.12g", num_val);
> >              av_dict_set(&s->metadata, key, str_val, 0);
> >          } else if (amf_type == AMF_DATA_TYPE_STRING) {
> >              av_dict_set(&s->metadata, key, str_val, 0);
> > diff --git a/tests/ref/fate/flv-add_keyframe_index b/tests/ref/fate/flv-add_keyframe_index
> > index 1c4da65..ce3809e 100644
> > --- a/tests/ref/fate/flv-add_keyframe_index
> > +++ b/tests/ref/fate/flv-add_keyframe_index
> > @@ -7,6 +7,6 @@ canSeekToEnd=true
> >  datasize=629776
> >  videosize=629381
> >  audiosize=0
> > -lasttimestamp=20
> > +lasttimestamp=19.8571428571
>
> does every platform we support produce the same number here ?
> if not then make fate would break
> its a lot of digits after the decimal point, floats are not exact ...

%g flag characters for snprintf is part of C 90 standand, so  I think
it's ok if the platform with C 90 standand suppoted.

For log digits after the decimal point, how about  change from %.12g
to %.6g? Any other suggestion?
-------------- next part --------------
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1

iEYEARECAAYFAlylI7AACgkQYR7HhwQLD6uA0gCgk2yOM8TwH8T6oLhoU+20CnRT
XbEAnAuIClxs4buySSU6USaIhAxeqNuV
=tDZ7
-----END PGP SIGNATURE-----


More information about the ffmpeg-devel mailing list