You've already forked FFmpeg
							
							
				mirror of
				https://github.com/FFmpeg/FFmpeg.git
				synced 2025-10-30 23:18:11 +02:00 
			
		
		
		
	lavf/vc1dec: Autodetect raw vc-1 streams.
Move the demuxer into its own file.
This commit is contained in:
		| @@ -440,7 +440,7 @@ OBJS-$(CONFIG_TTA_DEMUXER)               += tta.o apetag.o img2.o | ||||
| OBJS-$(CONFIG_TTY_DEMUXER)               += tty.o sauce.o | ||||
| OBJS-$(CONFIG_TXD_DEMUXER)               += txd.o | ||||
| OBJS-$(CONFIG_UNCODEDFRAMECRC_MUXER)     += uncodedframecrcenc.o framehash.o | ||||
| OBJS-$(CONFIG_VC1_DEMUXER)               += rawdec.o | ||||
| OBJS-$(CONFIG_VC1_DEMUXER)               += rawdec.o vc1dec.o | ||||
| OBJS-$(CONFIG_VC1_MUXER)                 += rawenc.o | ||||
| OBJS-$(CONFIG_VC1T_DEMUXER)              += vc1test.o | ||||
| OBJS-$(CONFIG_VC1T_MUXER)                += vc1testenc.o | ||||
|   | ||||
| @@ -205,7 +205,3 @@ static int mjpeg_probe(AVProbeData *p) | ||||
|  | ||||
| FF_DEF_RAWVIDEO_DEMUXER2(mjpeg, "raw MJPEG video", mjpeg_probe, "mjpg,mjpeg,mpo", AV_CODEC_ID_MJPEG, AVFMT_GENERIC_INDEX|AVFMT_NOTIMESTAMPS) | ||||
| #endif | ||||
|  | ||||
| #if CONFIG_VC1_DEMUXER | ||||
| FF_DEF_RAWVIDEO_DEMUXER2(vc1, "raw VC-1", NULL, "vc1", AV_CODEC_ID_VC1, AVFMT_GENERIC_INDEX|AVFMT_NOTIMESTAMPS) | ||||
| #endif | ||||
|   | ||||
							
								
								
									
										81
									
								
								libavformat/vc1dec.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										81
									
								
								libavformat/vc1dec.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,81 @@ | ||||
| /* | ||||
|  * VC-1 demuxer | ||||
|  * Copyright (c) 2015 Carl Eugen Hoyos | ||||
|  * | ||||
|  * 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 "avformat.h" | ||||
| #include "rawdec.h" | ||||
| #include "libavutil/intreadwrite.h" | ||||
| #include "libavcodec/vc1_common.h" | ||||
|  | ||||
| static int vc1_probe(AVProbeData *p) | ||||
| { | ||||
|     int seq = 0, entry = 0, frame = 0, i; | ||||
|  | ||||
|     for (i = 0; i < p->buf_size + 5; i++) { | ||||
|         uint32_t code = AV_RB32(p->buf + i); | ||||
|         if ((code & 0xffffffe0) == 0x100) { | ||||
|             int type = code & 0x11f; | ||||
|             i += 4; | ||||
|             switch (type) { | ||||
|             case VC1_CODE_SEQHDR: { | ||||
|                 int profile, level, chromaformat; | ||||
|                 profile = (p->buf[i] & 0xc0) >> 6; | ||||
|                 if (profile != PROFILE_ADVANCED) { | ||||
|                     seq = 0; | ||||
|                     continue; | ||||
|                 } | ||||
|                 level = (p->buf[i] & 0x38) >> 3; | ||||
|                 if (level >= 5) { | ||||
|                     seq = 0; | ||||
|                     continue; | ||||
|                 } | ||||
|                 chromaformat = (p->buf[i] & 0x6) >> 1; | ||||
|                 if (chromaformat != 1) { | ||||
|                     seq = 0; | ||||
|                     continue; | ||||
|                 } | ||||
|                 seq++; | ||||
|                 i += 6; | ||||
|                 break; | ||||
|             } | ||||
|             case VC1_CODE_ENTRYPOINT: | ||||
|                 if (!seq) | ||||
|                     continue; | ||||
|                 entry++; | ||||
|                 i += 2; | ||||
|                 break; | ||||
|             case VC1_CODE_FRAME: | ||||
|             case VC1_CODE_FIELD: | ||||
|             case VC1_CODE_SLICE: | ||||
|                 if (seq && entry) | ||||
|                     frame++; | ||||
|                 break; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     if (frame > 1) | ||||
|         return AVPROBE_SCORE_EXTENSION / 2 + 1; | ||||
|     if (frame == 1) | ||||
|         return AVPROBE_SCORE_EXTENSION / 4; | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| FF_DEF_RAWVIDEO_DEMUXER2(vc1, "raw VC-1", vc1_probe, "vc1", AV_CODEC_ID_VC1, AVFMT_GENERIC_INDEX|AVFMT_NOTIMESTAMPS) | ||||
| @@ -31,7 +31,7 @@ | ||||
|  | ||||
| #define LIBAVFORMAT_VERSION_MAJOR  57 | ||||
| #define LIBAVFORMAT_VERSION_MINOR   3 | ||||
| #define LIBAVFORMAT_VERSION_MICRO 100 | ||||
| #define LIBAVFORMAT_VERSION_MICRO 101 | ||||
|  | ||||
| #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \ | ||||
|                                                LIBAVFORMAT_VERSION_MINOR, \ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user