On Tue, Mar 15, 2016 at 08:36:41AM -0500, Rodger Combs wrote:
> This allows avformat_find_stream_info to finish without opening a decoder in
> more cases.
>
> Since decoders still export some information that the corresponding parsers
> don't, this causes some fields to be unset in ffprobe output where the
> decoder would previously have only been called in avformat_find_stream_info.
> If this is a problem, the parsers should be updated to report that information
> as well.
> ---
> libavcodec/parser.c | 12 +++++++
> tests/ref/fate/concat-demuxer-extended-lavf-mxf | 2 +-
> .../ref/fate/concat-demuxer-extended-lavf-mxf_d10 | 2 +-
> tests/ref/fate/concat-demuxer-simple1-lavf-mxf | 2 +-
> tests/ref/fate/concat-demuxer-simple1-lavf-mxf_d10 | 2 +-
> tests/ref/fate/concat-demuxer-simple2-lavf-ts | 2 +-
> tests/ref/seek/vsynth_lena-mpeg1 | 38
> +++++++++++-----------
> 7 files changed, 36 insertions(+), 24 deletions(-)
>
> diff --git a/libavcodec/parser.c b/libavcodec/parser.c
> index d25d261..34b2c86 100644
> --- a/libavcodec/parser.c
> +++ b/libavcodec/parser.c
> @@ -180,6 +180,18 @@ int av_parser_parse2(AVCodecParserContext *s,
> AVCodecContext *avctx,
> index = s->parser->parser_parse(s, avctx, (const uint8_t **) poutbuf,
> poutbuf_size, buf, buf_size);
> av_assert0(index > -0x20000000); // The API does not allow returning
> AVERROR codes
> +#define FILL(name) if(s->name > 0 && avctx->name <= 0) avctx->name = s->name
> + if (avctx->codec_type == AVMEDIA_TYPE_VIDEO) {
> + FILL(coded_width);
> + FILL(coded_height);
> + FILL(width);
> + FILL(height);
> + if (s->format >= 0 && avctx->pix_fmt < 0)
> + avctx->pix_fmt = s->format;
> + } else if (avctx->codec_type == AVMEDIA_TYPE_AUDIO) {
> + if (s->format >= 0 && avctx->sample_fmt < 0)
> + avctx->sample_fmt = s->format;
> + }
> /* update the file pointer */
> if (*poutbuf_size) {
> /* fill the data for the current frame */
[...]
> --- a/tests/ref/seek/vsynth_lena-mpeg1
> +++ b/tests/ref/seek/vsynth_lena-mpeg1
> @@ -1,46 +1,46 @@
> ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size:
> 9779
> ret: 0 st:-1 flags:0 ts:-1.000000
> -ret: 0 st: 0 flags:1 dts: 0.000000 pts: NOPTS pos: 0 size:
> 9779
> +ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size:
> 9779
> ret: 0 st:-1 flags:1 ts: 1.894167
> -ret: 0 st: 0 flags:1 dts: 1.440000 pts: NOPTS pos: 124255 size:
> 11796
> +ret: 0 st: 0 flags:1 dts: 1.440000 pts: 1.440000 pos: 124255 size:
> 11796
> ret: 0 st: 0 flags:0 ts: 0.788334
> -ret: 0 st: 0 flags:1 dts: 0.960000 pts: NOPTS pos: 76706 size:
> 10792
> +ret: 0 st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos: 76706 size:
> 10792i suspect these pts values are wrong mpeg1/2 generally has dts != pts the parsers have to initialize at least the timestamp / timebase / delay related stuff in case of b frames this will result in timestamps being out of order before the libavformat core realizes it got a wrong values from the parser/decoder [...] 0, 0, 0, 48000, 9779, 0xf74ad5eb 0, 48000, 48000, 48000, 2676, 0x0ba8d970, F=0x0 0, 96000, 96000, 48000, 1098, 0x0a75192d, F=0x0 0, 144000, -9223372036854775808, 48000, 2920, 0xecf9526c, F=0x0 0, 192000, 192000, 48000, 1375, 0x65a69783, F=0x0 0, 240000, -9223372036854775808, 48000, 2952, 0x1110633b, F=0x0 - Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB Democracy is the form of government in which you can choose your dictator
signature.asc
Description: Digital signature
_______________________________________________ ffmpeg-devel mailing list [email protected] http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
