1/* 2 * RAW MPEG video demuxer 3 * Copyright (c) 2002-2003 Fabrice Bellard 4 * Copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at> 5 * 6 * This file is part of Libav. 7 * 8 * Libav is free software; you can redistribute it and/or 9 * modify it under the terms of the GNU Lesser General Public 10 * License as published by the Free Software Foundation; either 11 * version 2.1 of the License, or (at your option) any later version. 12 * 13 * Libav is distributed in the hope that it will be useful, 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 * Lesser General Public License for more details. 17 * 18 * You should have received a copy of the GNU Lesser General Public 19 * License along with Libav; if not, write to the Free Software 20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 21 */ 22 23#include "avformat.h" 24#include "rawdec.h" 25 26#define SEQ_START_CODE 0x000001b3 27#define GOP_START_CODE 0x000001b8 28#define PICTURE_START_CODE 0x00000100 29#define SLICE_START_CODE 0x00000101 30#define PACK_START_CODE 0x000001ba 31#define VIDEO_ID 0x000001e0 32#define AUDIO_ID 0x000001c0 33 34static int mpegvideo_probe(AVProbeData *p) 35{ 36 uint32_t code= -1; 37 int pic=0, seq=0, slice=0, pspack=0, pes=0; 38 int i; 39 40 for(i=0; i<p->buf_size; i++){ 41 code = (code<<8) + p->buf[i]; 42 if ((code & 0xffffff00) == 0x100) { 43 switch(code){ 44 case SEQ_START_CODE: seq++; break; 45 case PICTURE_START_CODE: pic++; break; 46 case SLICE_START_CODE: slice++; break; 47 case PACK_START_CODE: pspack++; break; 48 } 49 if ((code & 0x1f0) == VIDEO_ID) pes++; 50 else if((code & 0x1e0) == AUDIO_ID) pes++; 51 } 52 } 53 if(seq && seq*9<=pic*10 && pic*9<=slice*10 && !pspack && !pes) 54 return pic>1 ? AVPROBE_SCORE_MAX/2+1 : AVPROBE_SCORE_MAX/4; // +1 for .mpg 55 return 0; 56} 57 58FF_DEF_RAWVIDEO_DEMUXER(mpegvideo, "raw MPEG video", mpegvideo_probe, NULL, CODEC_ID_MPEG1VIDEO) 59