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?= <staal...@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 <staal...@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
signature.asc
Description: Digital signature
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel