You've already forked FFmpeg
							
							
				mirror of
				https://github.com/FFmpeg/FFmpeg.git
				synced 2025-10-30 23:18:11 +02:00 
			
		
		
		
	ogg: Convert to the new bitstream reader
This commit is contained in:
		
				
					committed by
					
						 Diego Biurrun
						Diego Biurrun
					
				
			
			
				
	
			
			
			
						parent
						
							8d1997add6
						
					
				
				
					commit
					2cef81a87c
				
			| @@ -19,8 +19,10 @@ | ||||
|  */ | ||||
|  | ||||
| #include <stdlib.h> | ||||
| #include "libavcodec/get_bits.h" | ||||
|  | ||||
| #include "libavcodec/bitstream.h" | ||||
| #include "libavcodec/flac.h" | ||||
|  | ||||
| #include "avformat.h" | ||||
| #include "internal.h" | ||||
| #include "oggdec.h" | ||||
| @@ -33,28 +35,28 @@ flac_header (AVFormatContext * s, int idx) | ||||
|     struct ogg *ogg = s->priv_data; | ||||
|     struct ogg_stream *os = ogg->streams + idx; | ||||
|     AVStream *st = s->streams[idx]; | ||||
|     GetBitContext gb; | ||||
|     BitstreamContext bc; | ||||
|     int mdt; | ||||
|  | ||||
|     if (os->buf[os->pstart] == 0xff) | ||||
|         return 0; | ||||
|  | ||||
|     init_get_bits(&gb, os->buf + os->pstart, os->psize*8); | ||||
|     skip_bits1(&gb); /* metadata_last */ | ||||
|     mdt = get_bits(&gb, 7); | ||||
|     bitstream_init(&bc, os->buf + os->pstart, os->psize * 8); | ||||
|     bitstream_skip(&bc, 1); /* metadata_last */ | ||||
|     mdt = bitstream_read(&bc, 7); | ||||
|  | ||||
|     if (mdt == OGG_FLAC_METADATA_TYPE_STREAMINFO) { | ||||
|         uint8_t *streaminfo_start = os->buf + os->pstart + 5 + 4 + 4 + 4; | ||||
|         uint32_t samplerate; | ||||
|  | ||||
|         skip_bits_long(&gb, 4*8); /* "FLAC" */ | ||||
|         if(get_bits(&gb, 8) != 1) /* unsupported major version */ | ||||
|         bitstream_skip(&bc, 4 * 8); /* "FLAC" */ | ||||
|         if (bitstream_read(&bc, 8) != 1) /* unsupported major version */ | ||||
|             return -1; | ||||
|         skip_bits_long(&gb, 8 + 16); /* minor version + header count */ | ||||
|         skip_bits_long(&gb, 4*8); /* "fLaC" */ | ||||
|         bitstream_skip(&bc, 8 + 16); /* minor version + header count */ | ||||
|         bitstream_skip(&bc, 4 * 8); /* "fLaC" */ | ||||
|  | ||||
|         /* METADATA_BLOCK_HEADER */ | ||||
|         if (get_bits_long(&gb, 32) != FLAC_STREAMINFO_SIZE) | ||||
|         if (bitstream_read(&bc, 32) != FLAC_STREAMINFO_SIZE) | ||||
|             return -1; | ||||
|  | ||||
|         st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; | ||||
|   | ||||
| @@ -23,8 +23,11 @@ | ||||
|  **/ | ||||
|  | ||||
| #include <stdlib.h> | ||||
|  | ||||
| #include "libavutil/bswap.h" | ||||
| #include "libavcodec/get_bits.h" | ||||
|  | ||||
| #include "libavcodec/bitstream.h" | ||||
|  | ||||
| #include "avformat.h" | ||||
| #include "internal.h" | ||||
| #include "oggdec.h" | ||||
| @@ -57,41 +60,41 @@ static int theora_header(AVFormatContext *s, int idx) | ||||
|  | ||||
|     switch (os->buf[os->pstart]) { | ||||
|     case 0x80: { | ||||
|         GetBitContext gb; | ||||
|         BitstreamContext bc; | ||||
|         AVRational timebase; | ||||
|  | ||||
|         init_get_bits(&gb, os->buf + os->pstart, os->psize * 8); | ||||
|         bitstream_init(&bc, os->buf + os->pstart, os->psize * 8); | ||||
|  | ||||
|         /* 0x80"theora" */ | ||||
|         skip_bits_long(&gb, 7 * 8); | ||||
|         bitstream_skip(&bc, 7 * 8); | ||||
|  | ||||
|         thp->version = get_bits_long(&gb, 24); | ||||
|         thp->version = bitstream_read(&bc, 24); | ||||
|         if (thp->version < 0x030100) { | ||||
|             av_log(s, AV_LOG_ERROR, | ||||
|                    "Too old or unsupported Theora (%x)\n", thp->version); | ||||
|             return AVERROR(ENOSYS); | ||||
|         } | ||||
|  | ||||
|         st->codecpar->width  = get_bits(&gb, 16) << 4; | ||||
|         st->codecpar->height = get_bits(&gb, 16) << 4; | ||||
|         st->codecpar->width  = bitstream_read(&bc, 16) << 4; | ||||
|         st->codecpar->height = bitstream_read(&bc, 16) << 4; | ||||
|  | ||||
|         if (thp->version >= 0x030400) | ||||
|             skip_bits(&gb, 100); | ||||
|             bitstream_skip(&bc, 100); | ||||
|  | ||||
|         if (thp->version >= 0x030200) { | ||||
|             int width  = get_bits_long(&gb, 24); | ||||
|             int height = get_bits_long(&gb, 24); | ||||
|             int width  = bitstream_read(&bc, 24); | ||||
|             int height = bitstream_read(&bc, 24); | ||||
|             if (width  <= st->codecpar->width  && width  > st->codecpar->width  - 16 && | ||||
|                 height <= st->codecpar->height && height > st->codecpar->height - 16) { | ||||
|                 st->codecpar->width  = width; | ||||
|                 st->codecpar->height = height; | ||||
|             } | ||||
|  | ||||
|             skip_bits(&gb, 16); | ||||
|             bitstream_skip(&bc, 16); | ||||
|         } | ||||
|  | ||||
|         timebase.den = get_bits_long(&gb, 32); | ||||
|         timebase.num = get_bits_long(&gb, 32); | ||||
|         timebase.den = bitstream_read(&bc, 32); | ||||
|         timebase.num = bitstream_read(&bc, 32); | ||||
|         if (!(timebase.num > 0 && timebase.den > 0)) { | ||||
|             av_log(s, AV_LOG_WARNING, "Invalid time base in theora stream, assuming 25 FPS\n"); | ||||
|             timebase.num = 1; | ||||
| @@ -99,15 +102,15 @@ static int theora_header(AVFormatContext *s, int idx) | ||||
|         } | ||||
|         avpriv_set_pts_info(st, 64, timebase.num, timebase.den); | ||||
|  | ||||
|         st->sample_aspect_ratio.num = get_bits_long(&gb, 24); | ||||
|         st->sample_aspect_ratio.den = get_bits_long(&gb, 24); | ||||
|         st->sample_aspect_ratio.num = bitstream_read(&bc, 24); | ||||
|         st->sample_aspect_ratio.den = bitstream_read(&bc, 24); | ||||
|  | ||||
|         if (thp->version >= 0x030200) | ||||
|             skip_bits_long(&gb, 38); | ||||
|             bitstream_skip(&bc, 38); | ||||
|         if (thp->version >= 0x304000) | ||||
|             skip_bits(&gb, 2); | ||||
|             bitstream_skip(&bc, 2); | ||||
|  | ||||
|         thp->gpshift = get_bits(&gb, 5); | ||||
|         thp->gpshift = bitstream_read(&bc, 5); | ||||
|         thp->gpmask  = (1 << thp->gpshift) - 1; | ||||
|  | ||||
|         st->codecpar->codec_type = AVMEDIA_TYPE_VIDEO; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user