You've already forked FFmpeg
							
							
				mirror of
				https://github.com/FFmpeg/FFmpeg.git
				synced 2025-10-30 23:18:11 +02:00 
			
		
		
		
	avformat: Auto-detect mjpeg 2000 in mpeg-ts
This makes it possible to decode motion jpeg 2000 encoded in a transport stream without a correct PMT/PAT. Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
This commit is contained in:
		
				
					committed by
					
						 Michael Niedermayer
						Michael Niedermayer
					
				
			
			
				
	
			
			
			
						parent
						
							295601bba3
						
					
				
				
					commit
					d8b9bef1a0
				
			| @@ -274,6 +274,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 | ||||
|   | ||||
| @@ -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); | ||||
|   | ||||
							
								
								
									
										54
									
								
								libavformat/mj2kdec.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								libavformat/mj2kdec.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,54 @@ | ||||
| /* | ||||
|  * MJPEG 2000 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" | ||||
|  | ||||
| #if CONFIG_MJPEG_2000_DEMUXER | ||||
| static int mjpeg2000_probe(AVProbeData *p) | ||||
| { | ||||
|     const uint8_t *b = p->buf; | ||||
|     int i, marker, marker_size; | ||||
|     int frames = 0, invalid = 0; | ||||
|  | ||||
|     for (i = 0; i < p->buf_size - 5; i++) { | ||||
|         if (AV_RB32(b) == 0xff4fff51){ | ||||
|             marker_size = AV_RB16(b+4); | ||||
|             if (marker_size + i < p->buf_size - 4) { | ||||
|                 marker = AV_RB8(b+4+marker_size); | ||||
|                 if (marker == 0xff) | ||||
|                     frames++; | ||||
|                 else | ||||
|                     invalid++; | ||||
|             } | ||||
|         } | ||||
|         b += 1; | ||||
|     } | ||||
|     if (invalid*4 + 1 < frames) { | ||||
|         if (invalid == 0 && frames > 2) | ||||
|             return AVPROBE_SCORE_EXTENSION / 2; | ||||
|         return AVPROBE_SCORE_EXTENSION / 4; | ||||
|     } | ||||
|     return 0; | ||||
| } | ||||
| FF_DEF_RAWVIDEO_DEMUXER2(mjpeg_2000, "raw MJPEG 2000 video", mjpeg2000_probe, "j2k", AV_CODEC_ID_JPEG2000, AVFMT_GENERIC_INDEX|AVFMT_NOTIMESTAMPS) | ||||
| #endif | ||||
| @@ -328,6 +328,7 @@ static int set_codec_from_probe_data(AVFormatContext *s, AVStream *st, | ||||
|         { "hevc",      AV_CODEC_ID_HEVC,       AVMEDIA_TYPE_VIDEO }, | ||||
|         { "loas",      AV_CODEC_ID_AAC_LATM,   AVMEDIA_TYPE_AUDIO }, | ||||
|         { "m4v",       AV_CODEC_ID_MPEG4,      AVMEDIA_TYPE_VIDEO }, | ||||
|         { "mjpeg_2000",AV_CODEC_ID_JPEG2000,   AVMEDIA_TYPE_VIDEO }, | ||||
|         { "mp3",       AV_CODEC_ID_MP3,        AVMEDIA_TYPE_AUDIO }, | ||||
|         { "mpegvideo", AV_CODEC_ID_MPEG2VIDEO, AVMEDIA_TYPE_VIDEO }, | ||||
|         { "truehd",    AV_CODEC_ID_TRUEHD,     AVMEDIA_TYPE_AUDIO }, | ||||
|   | ||||
| @@ -32,7 +32,7 @@ | ||||
| // Major bumping may affect Ticket5467, 5421, 5451(compatibility with Chromium) | ||||
| // Also please add any ticket numbers that you believe might be affected here | ||||
| #define LIBAVFORMAT_VERSION_MAJOR  57 | ||||
| #define LIBAVFORMAT_VERSION_MINOR  60 | ||||
| #define LIBAVFORMAT_VERSION_MINOR  61 | ||||
| #define LIBAVFORMAT_VERSION_MICRO 100 | ||||
|  | ||||
| #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user