[FFmpeg-devel] [PATCH] libavf: Auto-detect mjpeg 2000 in mpeg-ts
Michael Niedermayer
michael at niedermayer.cc
Tue Oct 11 17:27:12 EEST 2016
On Tue, Oct 11, 2016 at 03:52:33PM +0200, Ståle kristoffersen wrote:
> Hi,
> I have some transport streams with only one pid, containing MJPEG 2000
> video. Since the PMT/PAT is missing ffmpeg is unable to decode it.
>
> The attached patch makes ffmpeg able to guess that it does contain a
> stream of jpeg 2000, but I am not sure if this is the correct approach.
>
> Also, should LIBAVFORMAT_VERSION_MICRO and the Changelog be updated?
if a new demuxer needs to be added then, yes
>
> --
> Ståle Kristoffersen
> Makefile | 1
> allformats.c | 1
> mj2kdec.c | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> utils.c | 1
> 4 files changed, 65 insertions(+)
> 26d9e6512a4c62e17df622cb4cb0dac7eadfa790 0001-libavf-Auto-detect-mjpeg-2000-in-mpeg-ts.patch
> From 0d5594d4dfd1a9608ef55e90fb6a770b0f54cdaa Mon Sep 17 00:00:00 2001
> From: =?UTF-8?q?St=C3=A5le=20Kristoffersen?= <staalebk at ifi.uio.no>
> Date: Tue, 11 Oct 2016 15:36:40 +0200
> Subject: [PATCH] libavf: Auto-detect mjpeg 2000 in mpeg-ts
> MIME-Version: 1.0
> Content-Type: text/plain; charset=UTF-8
> Content-Transfer-Encoding: 8bit
>
> This makes it possible to decode motion jpeg 2000
> encoded in a transport stream without a correct PMT/PAT.
>
> Signed-off-by: Ståle Kristoffersen <staalebk at ifi.uio.no>
> ---
> libavformat/Makefile | 1 +
> libavformat/allformats.c | 1 +
> libavformat/mj2kdec.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++++
> libavformat/utils.c | 1 +
> 4 files changed, 65 insertions(+)
> create mode 100644 libavformat/mj2kdec.c
>
> diff --git a/libavformat/Makefile b/libavformat/Makefile
> index 5d827d31..4020b8d 100644
> --- a/libavformat/Makefile
> +++ b/libavformat/Makefile
> @@ -273,6 +273,7 @@ OBJS-$(CONFIG_MD5_MUXER) += hashenc.o
> OBJS-$(CONFIG_MGSTS_DEMUXER) += mgsts.o
> OBJS-$(CONFIG_MICRODVD_DEMUXER) += microdvddec.o subtitles.o
> OBJS-$(CONFIG_MICRODVD_MUXER) += microdvdenc.o
> +OBJS-$(CONFIG_MJPEG_2000_DEMUXER) += rawdec.o mj2kdec.o
> OBJS-$(CONFIG_MJPEG_DEMUXER) += rawdec.o
> OBJS-$(CONFIG_MJPEG_MUXER) += rawenc.o
> OBJS-$(CONFIG_MLP_DEMUXER) += rawdec.o mlpdec.o
> diff --git a/libavformat/allformats.c b/libavformat/allformats.c
> index 6a216ef..7db6c52 100644
> --- a/libavformat/allformats.c
> +++ b/libavformat/allformats.c
> @@ -183,6 +183,7 @@ void av_register_all(void)
> REGISTER_DEMUXER (MGSTS, mgsts);
> REGISTER_MUXDEMUX(MICRODVD, microdvd);
> REGISTER_MUXDEMUX(MJPEG, mjpeg);
> + REGISTER_DEMUXER (MJPEG_2000, mjpeg_2000);
> REGISTER_MUXDEMUX(MLP, mlp);
> REGISTER_DEMUXER (MLV, mlv);
> REGISTER_DEMUXER (MM, mm);
> diff --git a/libavformat/mj2kdec.c b/libavformat/mj2kdec.c
> new file mode 100644
> index 0000000..cf9e575
> --- /dev/null
> +++ b/libavformat/mj2kdec.c
> @@ -0,0 +1,62 @@
> +/*
> + * VC-1 demuxer
> + * Copyright (c) 2016 Ståle Kristoffersen
> + *
> + * This file is part of FFmpeg.
> + *
> + * FFmpeg is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU Lesser General Public
> + * License as published by the Free Software Foundation; either
> + * version 2.1 of the License, or (at your option) any later version.
> + *
> + * FFmpeg is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> + * Lesser General Public License for more details.
> + *
> + * You should have received a copy of the GNU Lesser General Public
> + * License along with FFmpeg; if not, write to the Free Software
> + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
> + */
> +
> +#include "libavutil/intreadwrite.h"
> +#include "avformat.h"
> +#include "rawdec.h"
> +#include "libavcodec/jpeg2000.h"
> +
> +
> +#if CONFIG_MJPEG_2000_DEMUXER
> +static int mjpeg2000_probe(AVProbeData *p)
> +{
> + int i;
> + int invalid = 0;
> + int frames = 0;
> + uint16_t soc, marker, marker_size;
> + uint8_t marker_marker;
> +
> + for (i=0; i<p->buf_size-5; i++) {
> + soc = AV_RB16(p->buf + i);
> + if (soc == JPEG2000_SOC ) {
> + marker = AV_RB16(p->buf + i + 2);
> + marker_size = AV_RB16(p->buf + i + 4);
> + if (marker == JPEG2000_SIZ) {
> + i += marker_size + 2;
> + marker_marker = AV_RB8(p->buf + i + 2);
missing overflow and out of array checks
also the img2 demuxer for mjpeg2000 from img2dec.c does not work
for this ?
[...]
--
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
During times of universal deceit, telling the truth becomes a
revolutionary act. -- George Orwell
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: Digital signature
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20161011/cd33ad7b/attachment.sig>
More information about the ffmpeg-devel
mailing list