Coverage Report

Created: 2024-09-06 07:53

/src/ffmpeg/libavformat/mj2kdec.c
Line
Count
Source
1
/*
2
 * MJPEG 2000 Demuxer
3
 * Copyright (c) 2016 Ståle Kristoffersen
4
 *
5
 * This file is part of FFmpeg.
6
 *
7
 * FFmpeg is free software; you can redistribute it and/or
8
 * modify it under the terms of the GNU Lesser General Public
9
 * License as published by the Free Software Foundation; either
10
 * version 2.1 of the License, or (at your option) any later version.
11
 *
12
 * FFmpeg is distributed in the hope that it will be useful,
13
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15
 * Lesser General Public License for more details.
16
 *
17
 * You should have received a copy of the GNU Lesser General Public
18
 * License along with FFmpeg; if not, write to the Free Software
19
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20
 */
21
22
#include "libavutil/intreadwrite.h"
23
#include "avformat.h"
24
#include "rawdec.h"
25
26
static int mjpeg2000_probe(const AVProbeData *p)
27
358k
{
28
358k
    const uint8_t *b = p->buf;
29
358k
    int i, marker, marker_size;
30
358k
    int frames = 0, invalid = 0;
31
32
1.41G
    for (i = 0; i < p->buf_size - 5; i++) {
33
1.41G
        if (AV_RB32(b) == 0xff4fff51){
34
50.4k
            marker_size = AV_RB16(b+4);
35
50.4k
            if (marker_size + i < p->buf_size - 4) {
36
35.7k
                marker = AV_RB8(b+4+marker_size);
37
35.7k
                if (marker == 0xff)
38
11.9k
                    frames++;
39
23.7k
                else
40
23.7k
                    invalid++;
41
35.7k
            }
42
50.4k
        }
43
1.41G
        b += 1;
44
1.41G
    }
45
358k
    if (invalid*4 + 1 < frames) {
46
991
        if (invalid == 0 && frames > 2)
47
461
            return AVPROBE_SCORE_EXTENSION / 2;
48
530
        return AVPROBE_SCORE_EXTENSION / 4;
49
991
    }
50
357k
    return 0;
51
358k
}
52
FF_DEF_RAWVIDEO_DEMUXER2(mjpeg_2000, "raw MJPEG 2000 video", mjpeg2000_probe, "j2k", AV_CODEC_ID_JPEG2000, AVFMT_GENERIC_INDEX|AVFMT_NOTIMESTAMPS)