[FFmpeg-devel] [PATCH] avformat/tty: add probe function

Carl Eugen Hoyos ceffmpeg at gmail.com
Mon Jan 27 23:32:27 EET 2020


Am Mo., 27. Jan. 2020 um 22:01 Uhr schrieb Paul B Mahol <onemda at gmail.com>:
>
> Signed-off-by: Paul B Mahol <onemda at gmail.com>
> ---
>  libavformat/tty.c | 13 +++++++++++++
>  1 file changed, 13 insertions(+)
>
> diff --git a/libavformat/tty.c b/libavformat/tty.c
> index 8d48f2c45c..acc6da27cc 100644
> --- a/libavformat/tty.c
> +++ b/libavformat/tty.c
> @@ -24,6 +24,8 @@
>   * Tele-typewriter demuxer
>   */
>
> +#include <ctype.h>
> +
>  #include "libavutil/intreadwrite.h"
>  #include "libavutil/avstring.h"
>  #include "libavutil/log.h"
> @@ -42,6 +44,16 @@ typedef struct TtyDemuxContext {
>      AVRational framerate; /**< Set by a private option. */
>  } TtyDemuxContext;
>
> +static int read_probe(const AVProbeData *p)
> +{
> +    int64_t cnt = 0;
> +
> +    for (int i = 0; i < p->buf_size; i++)
> +        cnt += !!isalnum(p->buf[i]);
> +
> +    return cnt * 100 / p->buf_size;

The function looks as if it could return scores
higher than SCORE_MAX and as if it would
return high scores for very small probe size.
Both are not good, normally we test for both
a minimum number of counts and a high
percentage of correct values.

> +}
> +
>  /**
>   * Parse EFI header
>   */
> @@ -153,6 +165,7 @@ AVInputFormat ff_tty_demuxer = {
>      .name           = "tty",
>      .long_name      = NULL_IF_CONFIG_SMALL("Tele-typewriter"),
>      .priv_data_size = sizeof(TtyDemuxContext),
> +    .read_probe     = read_probe,
>      .read_header    = read_header,
>      .read_packet    = read_packet,
>      .extensions     = "ans,art,asc,diz,ice,nfo,txt,vt",

You could add the extensions to above test.

Background: An mpv user uploaded a jpg sample to the mpv
bug tracker and renamed it to sample1.txt. Because of its high
resolution and because the jpg probe function tries to distinguish
from mjpeg (which only works by checking if EOI is at EOF) the
extension returns a higher score than the jpg probe (the probe
function works fine if I remove the filename suffix),

So another fix would be to merge the mjpeg demuxer with the
jpeg_pipe demuxer, I don't remember atm why I didn't do that.

Carl Eugen


More information about the ffmpeg-devel mailing list