Merge branch 'release/0.8' into release/0.7
* release/0.8: (154 commits) vp6: partially propagate huffman tree building errors during coeff model parsing and fix misspelling Check for huffman tree building error in vp6 decoder. Release old pictures after a resolution change in vp5/6 decoder Check for missing reference in vp5/6 decoder. Check for invalid slices offsets in RV30/40 decoder. Check output buffer size in nellymoser decoder. Hack around gcc 4.6 breaking asm using call. Fix dxva2 decoding for some H264 samples. mp3demux: pass on error code on packet read. Check for invalid slice offsets in real decoder. rmdec: Reject invalid deinterleaving parameters Use deinterleavers for demangling audio packets in RealMedia. rv10: Reject slices that does not have the same type as the first one rmdec: use the deinterleaving mode and not the codec when creating audio packets. MAINTAINERS: add my GPG fingerprint. (cherry picked from commit7882dc10f8) Support 3IVD in isom, produced by 3ivx DivX Doctor. mpegpsdec: fix reading first mpegps packet (cherry picked from commitb2f230e23d) Avoid NULL dereference on corrupted bitstream with real decoder. Reject slices that does not have the same type than the first one in RV10/RV20 decoder. check all svq3_get_ue_golomb() returns. ... Conflicts: Doxyfile RELEASE VERSION libavcodec/rv34.c libavformat/utils.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
		
							
								
								
									
										4
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -7,6 +7,10 @@
 | 
				
			|||||||
*-example
 | 
					*-example
 | 
				
			||||||
*-test
 | 
					*-test
 | 
				
			||||||
*_g
 | 
					*_g
 | 
				
			||||||
 | 
					*.def
 | 
				
			||||||
 | 
					*.dll
 | 
				
			||||||
 | 
					*.lib
 | 
				
			||||||
 | 
					*.exp
 | 
				
			||||||
config.*
 | 
					config.*
 | 
				
			||||||
doc/*.1
 | 
					doc/*.1
 | 
				
			||||||
doc/*.html
 | 
					doc/*.html
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -373,6 +373,7 @@ Ben Littler                   3EE3 3723 E560 3214 A8CD 4DEB 2CDB FCE7 768C 8D2C
 | 
				
			|||||||
Benoit Fouet                  B22A 4F4F 43EF 636B BB66 FCDC 0023 AE1E 2985 49C8
 | 
					Benoit Fouet                  B22A 4F4F 43EF 636B BB66 FCDC 0023 AE1E 2985 49C8
 | 
				
			||||||
Daniel Verkamp                78A6 07ED 782C 653E C628 B8B9 F0EB 8DD8 2F0E 21C7
 | 
					Daniel Verkamp                78A6 07ED 782C 653E C628 B8B9 F0EB 8DD8 2F0E 21C7
 | 
				
			||||||
Diego Biurrun                 8227 1E31 B6D9 4994 7427 E220 9CAE D6CC 4757 FCC5
 | 
					Diego Biurrun                 8227 1E31 B6D9 4994 7427 E220 9CAE D6CC 4757 FCC5
 | 
				
			||||||
 | 
					Gwenole Beauchesne            2E63 B3A6 3E44 37E2 017D 2704 53C7 6266 B153 99C4
 | 
				
			||||||
Jaikrishnan Menon             61A1 F09F 01C9 2D45 78E1 C862 25DC 8831 AF70 D368
 | 
					Jaikrishnan Menon             61A1 F09F 01C9 2D45 78E1 C862 25DC 8831 AF70 D368
 | 
				
			||||||
Justin Ruggles                3136 ECC0 C10D 6C04 5F43 CA29 FCBE CD2A 3787 1EBF
 | 
					Justin Ruggles                3136 ECC0 C10D 6C04 5F43 CA29 FCBE CD2A 3787 1EBF
 | 
				
			||||||
Loren Merritt                 ABD9 08F4 C920 3F65 D8BE 35D7 1540 DAA7 060F 56DE
 | 
					Loren Merritt                 ABD9 08F4 C920 3F65 D8BE 35D7 1540 DAA7 060F 56DE
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										3
									
								
								configure
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								configure
									
									
									
									
										vendored
									
									
								
							@@ -177,7 +177,7 @@ External library support:
 | 
				
			|||||||
  --enable-libopenjpeg     enable JPEG 2000 decoding via OpenJPEG [no]
 | 
					  --enable-libopenjpeg     enable JPEG 2000 decoding via OpenJPEG [no]
 | 
				
			||||||
  --enable-librtmp         enable RTMP[E] support via librtmp [no]
 | 
					  --enable-librtmp         enable RTMP[E] support via librtmp [no]
 | 
				
			||||||
  --enable-libschroedinger enable Dirac support via libschroedinger [no]
 | 
					  --enable-libschroedinger enable Dirac support via libschroedinger [no]
 | 
				
			||||||
  --enable-libspeex        enable Speex decoding via libspeex [no]
 | 
					  --enable-libspeex        enable Speex encoding and decoding via libspeex [no]
 | 
				
			||||||
  --enable-libtheora       enable Theora encoding via libtheora [no]
 | 
					  --enable-libtheora       enable Theora encoding via libtheora [no]
 | 
				
			||||||
  --enable-libvo-aacenc    enable AAC encoding via libvo-aacenc [no]
 | 
					  --enable-libvo-aacenc    enable AAC encoding via libvo-aacenc [no]
 | 
				
			||||||
  --enable-libvo-amrwbenc  enable AMR-WB encoding via libvo-amrwbenc [no]
 | 
					  --enable-libvo-amrwbenc  enable AMR-WB encoding via libvo-amrwbenc [no]
 | 
				
			||||||
@@ -1417,6 +1417,7 @@ libopenjpeg_decoder_deps="libopenjpeg"
 | 
				
			|||||||
libschroedinger_decoder_deps="libschroedinger"
 | 
					libschroedinger_decoder_deps="libschroedinger"
 | 
				
			||||||
libschroedinger_encoder_deps="libschroedinger"
 | 
					libschroedinger_encoder_deps="libschroedinger"
 | 
				
			||||||
libspeex_decoder_deps="libspeex"
 | 
					libspeex_decoder_deps="libspeex"
 | 
				
			||||||
 | 
					libspeex_encoder_deps="libspeex"
 | 
				
			||||||
libtheora_encoder_deps="libtheora"
 | 
					libtheora_encoder_deps="libtheora"
 | 
				
			||||||
libvo_aacenc_encoder_deps="libvo_aacenc"
 | 
					libvo_aacenc_encoder_deps="libvo_aacenc"
 | 
				
			||||||
libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
 | 
					libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -447,6 +447,11 @@ encompassing your FFmpeg includes using @code{extern "C"}.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
See @url{http://www.parashift.com/c++-faq-lite/mixing-c-and-cpp.html#faq-32.3}
 | 
					See @url{http://www.parashift.com/c++-faq-lite/mixing-c-and-cpp.html#faq-32.3}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@section I'm using libavutil from within my C++ application but the compiler complains about 'UINT64_C' was not declared in this scope
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Libav is a pure C project using C99 math features, in order to enable C++
 | 
				
			||||||
 | 
					to use them you have to append -D__STDC_CONSTANT_MACROS to your CXXFLAGS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@section I have a file in memory / a API different from *open/*read/ libc how do I use it with libavformat?
 | 
					@section I have a file in memory / a API different from *open/*read/ libc how do I use it with libavformat?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
You have to implement a URLProtocol, see @file{libavformat/file.c} in
 | 
					You have to implement a URLProtocol, see @file{libavformat/file.c} in
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -713,8 +713,39 @@ ffmpeg -i in.ogg -map_metadata 0:0,s0 out.mp3
 | 
				
			|||||||
Copy chapters from @var{infile} to @var{outfile}. If no chapter mapping is specified,
 | 
					Copy chapters from @var{infile} to @var{outfile}. If no chapter mapping is specified,
 | 
				
			||||||
then chapters are copied from the first input file with at least one chapter to all
 | 
					then chapters are copied from the first input file with at least one chapter to all
 | 
				
			||||||
output files. Use a negative file index to disable any chapter copying.
 | 
					output files. Use a negative file index to disable any chapter copying.
 | 
				
			||||||
@item -debug
 | 
					@item -debug @var{category}
 | 
				
			||||||
Print specific debug info.
 | 
					Print specific debug info.
 | 
				
			||||||
 | 
					@var{category} is a number or a string containing one of the following values:
 | 
				
			||||||
 | 
					@table @samp
 | 
				
			||||||
 | 
					@item bitstream
 | 
				
			||||||
 | 
					@item buffers
 | 
				
			||||||
 | 
					picture buffer allocations
 | 
				
			||||||
 | 
					@item bugs
 | 
				
			||||||
 | 
					@item dct_coeff
 | 
				
			||||||
 | 
					@item er
 | 
				
			||||||
 | 
					error recognition
 | 
				
			||||||
 | 
					@item mb_type
 | 
				
			||||||
 | 
					macroblock (MB) type
 | 
				
			||||||
 | 
					@item mmco
 | 
				
			||||||
 | 
					memory management control operations (H.264)
 | 
				
			||||||
 | 
					@item mv
 | 
				
			||||||
 | 
					motion vector
 | 
				
			||||||
 | 
					@item pict
 | 
				
			||||||
 | 
					picture info
 | 
				
			||||||
 | 
					@item pts
 | 
				
			||||||
 | 
					@item qp
 | 
				
			||||||
 | 
					per-block quantization parameter (QP)
 | 
				
			||||||
 | 
					@item rc
 | 
				
			||||||
 | 
					rate control
 | 
				
			||||||
 | 
					@item skip
 | 
				
			||||||
 | 
					@item startcode
 | 
				
			||||||
 | 
					@item thread_ops
 | 
				
			||||||
 | 
					threading operations
 | 
				
			||||||
 | 
					@item vis_mb_type
 | 
				
			||||||
 | 
					visualize block types
 | 
				
			||||||
 | 
					@item vis_qp
 | 
				
			||||||
 | 
					visualize quantization parameter (QP), lower QP are tinted greener
 | 
				
			||||||
 | 
					@end table
 | 
				
			||||||
@item -benchmark
 | 
					@item -benchmark
 | 
				
			||||||
Show benchmarking information at the end of an encode.
 | 
					Show benchmarking information at the end of an encode.
 | 
				
			||||||
Shows CPU time used and maximum memory consumption.
 | 
					Shows CPU time used and maximum memory consumption.
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								ffmpeg.c
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								ffmpeg.c
									
									
									
									
									
								
							@@ -345,7 +345,7 @@ typedef struct AVInputFile {
 | 
				
			|||||||
    int eof_reached;      /* true if eof reached */
 | 
					    int eof_reached;      /* true if eof reached */
 | 
				
			||||||
    int ist_index;        /* index of first stream in ist_table */
 | 
					    int ist_index;        /* index of first stream in ist_table */
 | 
				
			||||||
    int buffer_size;      /* current total buffer size */
 | 
					    int buffer_size;      /* current total buffer size */
 | 
				
			||||||
    int nb_streams;
 | 
					    int nb_streams;       /* nb streams we are aware of */
 | 
				
			||||||
} AVInputFile;
 | 
					} AVInputFile;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if HAVE_TERMIOS_H
 | 
					#if HAVE_TERMIOS_H
 | 
				
			||||||
@@ -2055,7 +2055,7 @@ static int transcode(AVFormatContext **output_files,
 | 
				
			|||||||
        fi = stream_maps[i].sync_file_index;
 | 
					        fi = stream_maps[i].sync_file_index;
 | 
				
			||||||
        si = stream_maps[i].sync_stream_index;
 | 
					        si = stream_maps[i].sync_stream_index;
 | 
				
			||||||
        if (fi < 0 || fi > nb_input_files - 1 ||
 | 
					        if (fi < 0 || fi > nb_input_files - 1 ||
 | 
				
			||||||
            si < 0 || si > input_files[fi].ctx->nb_streams - 1) {
 | 
					            si < 0 || si > input_files[fi].nb_streams - 1) {
 | 
				
			||||||
            fprintf(stderr,"Could not find sync stream #%d.%d\n", fi, si);
 | 
					            fprintf(stderr,"Could not find sync stream #%d.%d\n", fi, si);
 | 
				
			||||||
            ret = AVERROR(EINVAL);
 | 
					            ret = AVERROR(EINVAL);
 | 
				
			||||||
            goto fail;
 | 
					            goto fail;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -588,6 +588,7 @@ OBJS-$(CONFIG_LIBSCHROEDINGER_ENCODER)    += libschroedingerenc.o \
 | 
				
			|||||||
                                             libschroedinger.o    \
 | 
					                                             libschroedinger.o    \
 | 
				
			||||||
                                             libdirac_libschro.o
 | 
					                                             libdirac_libschro.o
 | 
				
			||||||
OBJS-$(CONFIG_LIBSPEEX_DECODER)           += libspeexdec.o
 | 
					OBJS-$(CONFIG_LIBSPEEX_DECODER)           += libspeexdec.o
 | 
				
			||||||
 | 
					OBJS-$(CONFIG_LIBSPEEX_ENCODER)           += libspeexenc.o
 | 
				
			||||||
OBJS-$(CONFIG_LIBTHEORA_ENCODER)          += libtheoraenc.o
 | 
					OBJS-$(CONFIG_LIBTHEORA_ENCODER)          += libtheoraenc.o
 | 
				
			||||||
OBJS-$(CONFIG_LIBVO_AACENC_ENCODER)       += libvo-aacenc.o mpeg4audio.o
 | 
					OBJS-$(CONFIG_LIBVO_AACENC_ENCODER)       += libvo-aacenc.o mpeg4audio.o
 | 
				
			||||||
OBJS-$(CONFIG_LIBVO_AMRWBENC_ENCODER)     += libvo-amrwbenc.o
 | 
					OBJS-$(CONFIG_LIBVO_AMRWBENC_ENCODER)     += libvo-amrwbenc.o
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -72,7 +72,7 @@ static int aac_adtstoasc_filter(AVBitStreamFilterContext *bsfc,
 | 
				
			|||||||
        int            pce_size = 0;
 | 
					        int            pce_size = 0;
 | 
				
			||||||
        uint8_t        pce_data[MAX_PCE_SIZE];
 | 
					        uint8_t        pce_data[MAX_PCE_SIZE];
 | 
				
			||||||
        if (!hdr.chan_config) {
 | 
					        if (!hdr.chan_config) {
 | 
				
			||||||
            init_get_bits(&gb, buf, buf_size);
 | 
					            init_get_bits(&gb, buf, buf_size * 8);
 | 
				
			||||||
            if (get_bits(&gb, 3) != 5) {
 | 
					            if (get_bits(&gb, 3) != 5) {
 | 
				
			||||||
                av_log_missing_feature(avctx, "PCE based channel configuration, where the PCE is not the first syntax element is", 0);
 | 
					                av_log_missing_feature(avctx, "PCE based channel configuration, where the PCE is not the first syntax element is", 0);
 | 
				
			||||||
                return -1;
 | 
					                return -1;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1755,12 +1755,10 @@ static void windowing_and_mdct_ltp(AACContext *ac, float *out,
 | 
				
			|||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
        memset(in, 0, 448 * sizeof(float));
 | 
					        memset(in, 0, 448 * sizeof(float));
 | 
				
			||||||
        ac->dsp.vector_fmul(in + 448, in + 448, swindow_prev, 128);
 | 
					        ac->dsp.vector_fmul(in + 448, in + 448, swindow_prev, 128);
 | 
				
			||||||
        memcpy(in + 576, in + 576, 448 * sizeof(float));
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if (ics->window_sequence[0] != LONG_START_SEQUENCE) {
 | 
					    if (ics->window_sequence[0] != LONG_START_SEQUENCE) {
 | 
				
			||||||
        ac->dsp.vector_fmul_reverse(in + 1024, in + 1024, lwindow, 1024);
 | 
					        ac->dsp.vector_fmul_reverse(in + 1024, in + 1024, lwindow, 1024);
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
        memcpy(in + 1024, in + 1024, 448 * sizeof(float));
 | 
					 | 
				
			||||||
        ac->dsp.vector_fmul_reverse(in + 1024 + 448, in + 1024 + 448, swindow, 128);
 | 
					        ac->dsp.vector_fmul_reverse(in + 1024 + 448, in + 1024 + 448, swindow, 128);
 | 
				
			||||||
        memset(in + 1024 + 576, 0, 448 * sizeof(float));
 | 
					        memset(in + 1024 + 576, 0, 448 * sizeof(float));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -2078,7 +2076,7 @@ static int aac_decode_frame_int(AVCodecContext *avctx, void *data,
 | 
				
			|||||||
    ChannelElement *che = NULL, *che_prev = NULL;
 | 
					    ChannelElement *che = NULL, *che_prev = NULL;
 | 
				
			||||||
    enum RawDataBlockType elem_type, elem_type_prev = TYPE_END;
 | 
					    enum RawDataBlockType elem_type, elem_type_prev = TYPE_END;
 | 
				
			||||||
    int err, elem_id, data_size_tmp;
 | 
					    int err, elem_id, data_size_tmp;
 | 
				
			||||||
    int samples = 0, multiplier;
 | 
					    int samples = 0, multiplier, audio_found = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (show_bits(gb, 12) == 0xfff) {
 | 
					    if (show_bits(gb, 12) == 0xfff) {
 | 
				
			||||||
        if (parse_adts_frame_header(ac, gb) < 0) {
 | 
					        if (parse_adts_frame_header(ac, gb) < 0) {
 | 
				
			||||||
@@ -2109,10 +2107,12 @@ static int aac_decode_frame_int(AVCodecContext *avctx, void *data,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        case TYPE_SCE:
 | 
					        case TYPE_SCE:
 | 
				
			||||||
            err = decode_ics(ac, &che->ch[0], gb, 0, 0);
 | 
					            err = decode_ics(ac, &che->ch[0], gb, 0, 0);
 | 
				
			||||||
 | 
					            audio_found = 1;
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        case TYPE_CPE:
 | 
					        case TYPE_CPE:
 | 
				
			||||||
            err = decode_cpe(ac, gb, che);
 | 
					            err = decode_cpe(ac, gb, che);
 | 
				
			||||||
 | 
					            audio_found = 1;
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        case TYPE_CCE:
 | 
					        case TYPE_CCE:
 | 
				
			||||||
@@ -2121,6 +2121,7 @@ static int aac_decode_frame_int(AVCodecContext *avctx, void *data,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        case TYPE_LFE:
 | 
					        case TYPE_LFE:
 | 
				
			||||||
            err = decode_ics(ac, &che->ch[0], gb, 0, 0);
 | 
					            err = decode_ics(ac, &che->ch[0], gb, 0, 0);
 | 
				
			||||||
 | 
					            audio_found = 1;
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        case TYPE_DSE:
 | 
					        case TYPE_DSE:
 | 
				
			||||||
@@ -2197,7 +2198,7 @@ static int aac_decode_frame_int(AVCodecContext *avctx, void *data,
 | 
				
			|||||||
                                                   samples, avctx->channels);
 | 
					                                                   samples, avctx->channels);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (ac->output_configured)
 | 
					    if (ac->output_configured && audio_found)
 | 
				
			||||||
        ac->output_configured = OC_LOCKED;
 | 
					        ac->output_configured = OC_LOCKED;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -813,14 +813,17 @@ static void stereo_processing(PSContext *ps, float (*l)[32][2], float (*r)[32][2
 | 
				
			|||||||
    const float (*H_LUT)[8][4] = (PS_BASELINE || ps->icc_mode < 3) ? HA : HB;
 | 
					    const float (*H_LUT)[8][4] = (PS_BASELINE || ps->icc_mode < 3) ? HA : HB;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    //Remapping
 | 
					    //Remapping
 | 
				
			||||||
    memcpy(H11[0][0], H11[0][ps->num_env_old], PS_MAX_NR_IIDICC*sizeof(H11[0][0][0]));
 | 
					    if (ps->num_env_old) {
 | 
				
			||||||
    memcpy(H11[1][0], H11[1][ps->num_env_old], PS_MAX_NR_IIDICC*sizeof(H11[1][0][0]));
 | 
					        memcpy(H11[0][0], H11[0][ps->num_env_old], PS_MAX_NR_IIDICC*sizeof(H11[0][0][0]));
 | 
				
			||||||
    memcpy(H12[0][0], H12[0][ps->num_env_old], PS_MAX_NR_IIDICC*sizeof(H12[0][0][0]));
 | 
					        memcpy(H11[1][0], H11[1][ps->num_env_old], PS_MAX_NR_IIDICC*sizeof(H11[1][0][0]));
 | 
				
			||||||
    memcpy(H12[1][0], H12[1][ps->num_env_old], PS_MAX_NR_IIDICC*sizeof(H12[1][0][0]));
 | 
					        memcpy(H12[0][0], H12[0][ps->num_env_old], PS_MAX_NR_IIDICC*sizeof(H12[0][0][0]));
 | 
				
			||||||
    memcpy(H21[0][0], H21[0][ps->num_env_old], PS_MAX_NR_IIDICC*sizeof(H21[0][0][0]));
 | 
					        memcpy(H12[1][0], H12[1][ps->num_env_old], PS_MAX_NR_IIDICC*sizeof(H12[1][0][0]));
 | 
				
			||||||
    memcpy(H21[1][0], H21[1][ps->num_env_old], PS_MAX_NR_IIDICC*sizeof(H21[1][0][0]));
 | 
					        memcpy(H21[0][0], H21[0][ps->num_env_old], PS_MAX_NR_IIDICC*sizeof(H21[0][0][0]));
 | 
				
			||||||
    memcpy(H22[0][0], H22[0][ps->num_env_old], PS_MAX_NR_IIDICC*sizeof(H22[0][0][0]));
 | 
					        memcpy(H21[1][0], H21[1][ps->num_env_old], PS_MAX_NR_IIDICC*sizeof(H21[1][0][0]));
 | 
				
			||||||
    memcpy(H22[1][0], H22[1][ps->num_env_old], PS_MAX_NR_IIDICC*sizeof(H22[1][0][0]));
 | 
					        memcpy(H22[0][0], H22[0][ps->num_env_old], PS_MAX_NR_IIDICC*sizeof(H22[0][0][0]));
 | 
				
			||||||
 | 
					        memcpy(H22[1][0], H22[1][ps->num_env_old], PS_MAX_NR_IIDICC*sizeof(H22[1][0][0]));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (is34) {
 | 
					    if (is34) {
 | 
				
			||||||
        remap34(&iid_mapped, ps->iid_par, ps->nr_iid_par, ps->num_env, 1);
 | 
					        remap34(&iid_mapped, ps->iid_par, ps->nr_iid_par, ps->num_env, 1);
 | 
				
			||||||
        remap34(&icc_mapped, ps->icc_par, ps->nr_icc_par, ps->num_env, 1);
 | 
					        remap34(&icc_mapped, ps->icc_par, ps->nr_icc_par, ps->num_env, 1);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -380,7 +380,7 @@ void avcodec_register_all(void)
 | 
				
			|||||||
    REGISTER_DECODER (LIBOPENCORE_AMRWB, libopencore_amrwb);
 | 
					    REGISTER_DECODER (LIBOPENCORE_AMRWB, libopencore_amrwb);
 | 
				
			||||||
    REGISTER_DECODER (LIBOPENJPEG, libopenjpeg);
 | 
					    REGISTER_DECODER (LIBOPENJPEG, libopenjpeg);
 | 
				
			||||||
    REGISTER_ENCDEC  (LIBSCHROEDINGER, libschroedinger);
 | 
					    REGISTER_ENCDEC  (LIBSCHROEDINGER, libschroedinger);
 | 
				
			||||||
    REGISTER_DECODER (LIBSPEEX, libspeex);
 | 
					    REGISTER_ENCDEC  (LIBSPEEX, libspeex);
 | 
				
			||||||
    REGISTER_ENCODER (LIBTHEORA, libtheora);
 | 
					    REGISTER_ENCODER (LIBTHEORA, libtheora);
 | 
				
			||||||
    REGISTER_ENCODER (LIBVO_AACENC, libvo_aacenc);
 | 
					    REGISTER_ENCODER (LIBVO_AACENC, libvo_aacenc);
 | 
				
			||||||
    REGISTER_ENCODER (LIBVO_AMRWBENC, libvo_amrwbenc);
 | 
					    REGISTER_ENCODER (LIBVO_AMRWBENC, libvo_amrwbenc);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -56,7 +56,7 @@
 | 
				
			|||||||
        vhsub.s16       \r0, \d0, \d1           @ t3, t4, t8, t7
 | 
					        vhsub.s16       \r0, \d0, \d1           @ t3, t4, t8, t7
 | 
				
			||||||
        vhsub.s16       \r1, \d1, \d0
 | 
					        vhsub.s16       \r1, \d1, \d0
 | 
				
			||||||
        vhadd.s16       \d0, \d0, \d1           @ t1, t2, t6, t5
 | 
					        vhadd.s16       \d0, \d0, \d1           @ t1, t2, t6, t5
 | 
				
			||||||
        vmov.i64        \d1, #0xffff<<32
 | 
					        vmov.i64        \d1, #0xffff00000000
 | 
				
			||||||
        vbit            \r0, \r1, \d1
 | 
					        vbit            \r0, \r1, \d1
 | 
				
			||||||
        vrev64.16       \r1, \r0                @ t7, t8, t4, t3
 | 
					        vrev64.16       \r1, \r0                @ t7, t8, t4, t3
 | 
				
			||||||
        vtrn.32         \r0, \r1                @ t3, t4, t7, t8
 | 
					        vtrn.32         \r0, \r1                @ t3, t4, t7, t8
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2686,7 +2686,6 @@ typedef struct AVCodecContext {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Bits per sample/pixel of internal libavcodec pixel/sample format.
 | 
					     * Bits per sample/pixel of internal libavcodec pixel/sample format.
 | 
				
			||||||
     * This field is applicable only when sample_fmt is AV_SAMPLE_FMT_S32.
 | 
					 | 
				
			||||||
     * - encoding: set by user.
 | 
					     * - encoding: set by user.
 | 
				
			||||||
     * - decoding: set by libavcodec.
 | 
					     * - decoding: set by libavcodec.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -117,7 +117,7 @@ avs_decode_frame(AVCodecContext * avctx,
 | 
				
			|||||||
    table = buf + (256 * vect_w * vect_h);
 | 
					    table = buf + (256 * vect_w * vect_h);
 | 
				
			||||||
    if (sub_type != AVS_I_FRAME) {
 | 
					    if (sub_type != AVS_I_FRAME) {
 | 
				
			||||||
        int map_size = ((318 / vect_w + 7) / 8) * (198 / vect_h);
 | 
					        int map_size = ((318 / vect_w + 7) / 8) * (198 / vect_h);
 | 
				
			||||||
        init_get_bits(&change_map, table, map_size);
 | 
					        init_get_bits(&change_map, table, map_size * 8);
 | 
				
			||||||
        table += map_size;
 | 
					        table += map_size;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -161,10 +161,14 @@ void ff_init_cabac_states(CABACContext *c){
 | 
				
			|||||||
        ff_h264_mps_state[2*i+1]= 2*mps_state[i]+1;
 | 
					        ff_h264_mps_state[2*i+1]= 2*mps_state[i]+1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if( i ){
 | 
					        if( i ){
 | 
				
			||||||
 | 
					            ff_h264_lps_state[2*i+0]=
 | 
				
			||||||
            ff_h264_mlps_state[128-2*i-1]= 2*lps_state[i]+0;
 | 
					            ff_h264_mlps_state[128-2*i-1]= 2*lps_state[i]+0;
 | 
				
			||||||
 | 
					            ff_h264_lps_state[2*i+1]=
 | 
				
			||||||
            ff_h264_mlps_state[128-2*i-2]= 2*lps_state[i]+1;
 | 
					            ff_h264_mlps_state[128-2*i-2]= 2*lps_state[i]+1;
 | 
				
			||||||
        }else{
 | 
					        }else{
 | 
				
			||||||
 | 
					            ff_h264_lps_state[2*i+0]=
 | 
				
			||||||
            ff_h264_mlps_state[128-2*i-1]= 1;
 | 
					            ff_h264_mlps_state[128-2*i-1]= 1;
 | 
				
			||||||
 | 
					            ff_h264_lps_state[2*i+1]=
 | 
				
			||||||
            ff_h264_mlps_state[128-2*i-2]= 0;
 | 
					            ff_h264_mlps_state[128-2*i-2]= 0;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -190,7 +194,8 @@ int main(void){
 | 
				
			|||||||
    ff_init_cabac_states(&c);
 | 
					    ff_init_cabac_states(&c);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for(i=0; i<SIZE; i++){
 | 
					    for(i=0; i<SIZE; i++){
 | 
				
			||||||
        r[i] = av_lfg_get(&prng) % 7;
 | 
					        if(2*i<SIZE) r[i] = av_lfg_get(&prng) % 7;
 | 
				
			||||||
 | 
					        else         r[i] = (i>>8)&1;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for(i=0; i<SIZE; i++){
 | 
					    for(i=0; i<SIZE; i++){
 | 
				
			||||||
@@ -205,6 +210,7 @@ START_TIMER
 | 
				
			|||||||
STOP_TIMER("put_cabac")
 | 
					STOP_TIMER("put_cabac")
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if 0
 | 
				
			||||||
    for(i=0; i<SIZE; i++){
 | 
					    for(i=0; i<SIZE; i++){
 | 
				
			||||||
START_TIMER
 | 
					START_TIMER
 | 
				
			||||||
        put_cabac_u(&c, state, r[i], 6, 3, i&1);
 | 
					        put_cabac_u(&c, state, r[i], 6, 3, i&1);
 | 
				
			||||||
@@ -216,7 +222,7 @@ START_TIMER
 | 
				
			|||||||
        put_cabac_ueg(&c, state, r[i], 3, 0, 1, 2);
 | 
					        put_cabac_ueg(&c, state, r[i], 3, 0, 1, 2);
 | 
				
			||||||
STOP_TIMER("put_cabac_ueg")
 | 
					STOP_TIMER("put_cabac_ueg")
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
    put_cabac_terminate(&c, 1);
 | 
					    put_cabac_terminate(&c, 1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ff_init_cabac_decoder(&c, b, SIZE);
 | 
					    ff_init_cabac_decoder(&c, b, SIZE);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -335,7 +335,8 @@ static int cinepak_decode (CinepakContext *s)
 | 
				
			|||||||
             * If the frame header is followed by the bytes FE 00 00 06 00 00 then
 | 
					             * If the frame header is followed by the bytes FE 00 00 06 00 00 then
 | 
				
			||||||
             * this is probably one of the two known files that have 6 extra bytes
 | 
					             * this is probably one of the two known files that have 6 extra bytes
 | 
				
			||||||
             * after the frame header. Else, assume 2 extra bytes. */
 | 
					             * after the frame header. Else, assume 2 extra bytes. */
 | 
				
			||||||
            if ((s->data[10] == 0xFE) &&
 | 
					            if (s->size >= 16 &&
 | 
				
			||||||
 | 
					                (s->data[10] == 0xFE) &&
 | 
				
			||||||
                (s->data[11] == 0x00) &&
 | 
					                (s->data[11] == 0x00) &&
 | 
				
			||||||
                (s->data[12] == 0x00) &&
 | 
					                (s->data[12] == 0x00) &&
 | 
				
			||||||
                (s->data[13] == 0x06) &&
 | 
					                (s->data[13] == 0x06) &&
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -67,7 +67,7 @@ static int decode_frame(AVCodecContext *avctx,
 | 
				
			|||||||
    p->pict_type= AV_PICTURE_TYPE_I;
 | 
					    p->pict_type= AV_PICTURE_TYPE_I;
 | 
				
			||||||
    p->key_frame= 1;
 | 
					    p->key_frame= 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    init_get_bits(&a->gb, buf, buf_size);
 | 
					    init_get_bits(&a->gb, buf, buf_size * 8);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for(y=0; y<avctx->height; y++){
 | 
					    for(y=0; y<avctx->height; y++){
 | 
				
			||||||
        uint8_t *luma= &a->picture.data[0][ y*a->picture.linesize[0] ];
 | 
					        uint8_t *luma= &a->picture.data[0][ y*a->picture.linesize[0] ];
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1175,8 +1175,9 @@ static av_cold int cook_decode_init(AVCodecContext *avctx)
 | 
				
			|||||||
            return -1;
 | 
					            return -1;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if ((q->subpacket[s].js_vlc_bits > 6) || (q->subpacket[s].js_vlc_bits < 0)) {
 | 
					        if ((q->subpacket[s].js_vlc_bits > 6) || (q->subpacket[s].js_vlc_bits < 2*q->subpacket[s].joint_stereo)) {
 | 
				
			||||||
            av_log(avctx,AV_LOG_ERROR,"js_vlc_bits = %d, only >= 0 and <= 6 allowed!\n",q->subpacket[s].js_vlc_bits);
 | 
					            av_log(avctx,AV_LOG_ERROR,"js_vlc_bits = %d, only >= %d and <= 6 allowed!\n",
 | 
				
			||||||
 | 
					                   q->subpacket[s].js_vlc_bits, 2*q->subpacket[s].joint_stereo);
 | 
				
			||||||
            return -1;
 | 
					            return -1;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1650,6 +1650,7 @@ static int dca_decode_frame(AVCodecContext * avctx,
 | 
				
			|||||||
    //set AVCodec values with parsed data
 | 
					    //set AVCodec values with parsed data
 | 
				
			||||||
    avctx->sample_rate = s->sample_rate;
 | 
					    avctx->sample_rate = s->sample_rate;
 | 
				
			||||||
    avctx->bit_rate = s->bit_rate;
 | 
					    avctx->bit_rate = s->bit_rate;
 | 
				
			||||||
 | 
					    avctx->frame_size = s->sample_blocks * 32;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    s->profile = FF_PROFILE_DTS;
 | 
					    s->profile = FF_PROFILE_DTS;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -120,7 +120,7 @@ static int parse_source_parameters(AVCodecContext *avctx, GetBitContext *gb,
 | 
				
			|||||||
    // chroma subsampling
 | 
					    // chroma subsampling
 | 
				
			||||||
    if (get_bits1(gb))
 | 
					    if (get_bits1(gb))
 | 
				
			||||||
        source->chroma_format = svq3_get_ue_golomb(gb);
 | 
					        source->chroma_format = svq3_get_ue_golomb(gb);
 | 
				
			||||||
    if (source->chroma_format > 2) {
 | 
					    if (source->chroma_format > 2U) {
 | 
				
			||||||
        av_log(avctx, AV_LOG_ERROR, "Unknown chroma format %d\n",
 | 
					        av_log(avctx, AV_LOG_ERROR, "Unknown chroma format %d\n",
 | 
				
			||||||
               source->chroma_format);
 | 
					               source->chroma_format);
 | 
				
			||||||
        return -1;
 | 
					        return -1;
 | 
				
			||||||
@@ -128,14 +128,14 @@ static int parse_source_parameters(AVCodecContext *avctx, GetBitContext *gb,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    if (get_bits1(gb))
 | 
					    if (get_bits1(gb))
 | 
				
			||||||
        source->interlaced = svq3_get_ue_golomb(gb);
 | 
					        source->interlaced = svq3_get_ue_golomb(gb);
 | 
				
			||||||
    if (source->interlaced > 1)
 | 
					    if (source->interlaced > 1U)
 | 
				
			||||||
        return -1;
 | 
					        return -1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // frame rate
 | 
					    // frame rate
 | 
				
			||||||
    if (get_bits1(gb)) {
 | 
					    if (get_bits1(gb)) {
 | 
				
			||||||
        source->frame_rate_index = svq3_get_ue_golomb(gb);
 | 
					        source->frame_rate_index = svq3_get_ue_golomb(gb);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (source->frame_rate_index > 10)
 | 
					        if (source->frame_rate_index > 10U)
 | 
				
			||||||
            return -1;
 | 
					            return -1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (!source->frame_rate_index) {
 | 
					        if (!source->frame_rate_index) {
 | 
				
			||||||
@@ -156,7 +156,7 @@ static int parse_source_parameters(AVCodecContext *avctx, GetBitContext *gb,
 | 
				
			|||||||
    if (get_bits1(gb)) {
 | 
					    if (get_bits1(gb)) {
 | 
				
			||||||
        source->aspect_ratio_index = svq3_get_ue_golomb(gb);
 | 
					        source->aspect_ratio_index = svq3_get_ue_golomb(gb);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (source->aspect_ratio_index > 6)
 | 
					        if (source->aspect_ratio_index > 6U)
 | 
				
			||||||
            return -1;
 | 
					            return -1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (!source->aspect_ratio_index) {
 | 
					        if (!source->aspect_ratio_index) {
 | 
				
			||||||
@@ -179,7 +179,7 @@ static int parse_source_parameters(AVCodecContext *avctx, GetBitContext *gb,
 | 
				
			|||||||
    if (get_bits1(gb)) {
 | 
					    if (get_bits1(gb)) {
 | 
				
			||||||
        source->pixel_range_index = svq3_get_ue_golomb(gb);
 | 
					        source->pixel_range_index = svq3_get_ue_golomb(gb);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (source->pixel_range_index > 4)
 | 
					        if (source->pixel_range_index > 4U)
 | 
				
			||||||
            return -1;
 | 
					            return -1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // This assumes either fullrange or MPEG levels only
 | 
					        // This assumes either fullrange or MPEG levels only
 | 
				
			||||||
@@ -207,7 +207,7 @@ static int parse_source_parameters(AVCodecContext *avctx, GetBitContext *gb,
 | 
				
			|||||||
    if (get_bits1(gb)) {
 | 
					    if (get_bits1(gb)) {
 | 
				
			||||||
        idx = source->color_spec_index = svq3_get_ue_golomb(gb);
 | 
					        idx = source->color_spec_index = svq3_get_ue_golomb(gb);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (source->color_spec_index > 4)
 | 
					        if (source->color_spec_index > 4U)
 | 
				
			||||||
            return -1;
 | 
					            return -1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        avctx->color_primaries = dirac_color_presets[idx].color_primaries;
 | 
					        avctx->color_primaries = dirac_color_presets[idx].color_primaries;
 | 
				
			||||||
@@ -217,7 +217,7 @@ static int parse_source_parameters(AVCodecContext *avctx, GetBitContext *gb,
 | 
				
			|||||||
        if (!source->color_spec_index) {
 | 
					        if (!source->color_spec_index) {
 | 
				
			||||||
            if (get_bits1(gb)) {
 | 
					            if (get_bits1(gb)) {
 | 
				
			||||||
                idx = svq3_get_ue_golomb(gb);
 | 
					                idx = svq3_get_ue_golomb(gb);
 | 
				
			||||||
                if (idx < 3)
 | 
					                if (idx < 3U)
 | 
				
			||||||
                    avctx->color_primaries = dirac_primaries[idx];
 | 
					                    avctx->color_primaries = dirac_primaries[idx];
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -259,7 +259,7 @@ int ff_dirac_parse_sequence_header(AVCodecContext *avctx, GetBitContext *gb,
 | 
				
			|||||||
    else if (version_major > 2)
 | 
					    else if (version_major > 2)
 | 
				
			||||||
        av_log(avctx, AV_LOG_WARNING, "Stream may have unhandled features\n");
 | 
					        av_log(avctx, AV_LOG_WARNING, "Stream may have unhandled features\n");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (video_format > 20)
 | 
					    if (video_format > 20U)
 | 
				
			||||||
        return -1;
 | 
					        return -1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Fill in defaults for the source parameters.
 | 
					    // Fill in defaults for the source parameters.
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1360,7 +1360,7 @@ static int dvbsub_display_end_segment(AVCodecContext *avctx, const uint8_t *buf,
 | 
				
			|||||||
        rect->y = display->y_pos + offset_y;
 | 
					        rect->y = display->y_pos + offset_y;
 | 
				
			||||||
        rect->w = region->width;
 | 
					        rect->w = region->width;
 | 
				
			||||||
        rect->h = region->height;
 | 
					        rect->h = region->height;
 | 
				
			||||||
        rect->nb_colors = 16;
 | 
					        rect->nb_colors = (1 << region->depth);
 | 
				
			||||||
        rect->type      = SUBTITLE_BITMAP;
 | 
					        rect->type      = SUBTITLE_BITMAP;
 | 
				
			||||||
        rect->pict.linesize[0] = region->width;
 | 
					        rect->pict.linesize[0] = region->width;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1805,7 +1805,7 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *data_size, AVPac
 | 
				
			|||||||
        bytes_read = c->bytestream - c->bytestream_start - 1;
 | 
					        bytes_read = c->bytestream - c->bytestream_start - 1;
 | 
				
			||||||
        if(bytes_read ==0) av_log(avctx, AV_LOG_ERROR, "error at end of AC stream\n"); //FIXME
 | 
					        if(bytes_read ==0) av_log(avctx, AV_LOG_ERROR, "error at end of AC stream\n"); //FIXME
 | 
				
			||||||
//printf("pos=%d\n", bytes_read);
 | 
					//printf("pos=%d\n", bytes_read);
 | 
				
			||||||
        init_get_bits(&f->slice_context[0]->gb, buf + bytes_read, buf_size - bytes_read);
 | 
					        init_get_bits(&f->slice_context[0]->gb, buf + bytes_read, (buf_size - bytes_read) * 8);
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
        bytes_read = 0; /* avoid warning */
 | 
					        bytes_read = 0; /* avoid warning */
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -1822,7 +1822,7 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *data_size, AVPac
 | 
				
			|||||||
        if(fs->ac){
 | 
					        if(fs->ac){
 | 
				
			||||||
            ff_init_range_decoder(&fs->c, buf_p, v);
 | 
					            ff_init_range_decoder(&fs->c, buf_p, v);
 | 
				
			||||||
        }else{
 | 
					        }else{
 | 
				
			||||||
            init_get_bits(&fs->gb, buf_p, v);
 | 
					            init_get_bits(&fs->gb, buf_p, v * 8);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -183,20 +183,28 @@ const uint8_t *ff_h264_decode_nal(H264Context *h, const uint8_t *src, int *dst_l
 | 
				
			|||||||
        i-= RS;
 | 
					        i-= RS;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if(i>=length-1){ //no escaped 0
 | 
					 | 
				
			||||||
        *dst_length= length;
 | 
					 | 
				
			||||||
        *consumed= length+1; //+1 for the header
 | 
					 | 
				
			||||||
        return src;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    bufidx = h->nal_unit_type == NAL_DPC ? 1 : 0; // use second escape buffer for inter data
 | 
					    bufidx = h->nal_unit_type == NAL_DPC ? 1 : 0; // use second escape buffer for inter data
 | 
				
			||||||
    av_fast_malloc(&h->rbsp_buffer[bufidx], &h->rbsp_buffer_size[bufidx], length+FF_INPUT_BUFFER_PADDING_SIZE);
 | 
					    si=h->rbsp_buffer_size[bufidx];
 | 
				
			||||||
 | 
					    av_fast_malloc(&h->rbsp_buffer[bufidx], &h->rbsp_buffer_size[bufidx], length+FF_INPUT_BUFFER_PADDING_SIZE+MAX_MBPAIR_SIZE);
 | 
				
			||||||
    dst= h->rbsp_buffer[bufidx];
 | 
					    dst= h->rbsp_buffer[bufidx];
 | 
				
			||||||
 | 
					    if(si != h->rbsp_buffer_size[bufidx])
 | 
				
			||||||
 | 
					        memset(dst + length, 0, FF_INPUT_BUFFER_PADDING_SIZE+MAX_MBPAIR_SIZE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (dst == NULL){
 | 
					    if (dst == NULL){
 | 
				
			||||||
        return NULL;
 | 
					        return NULL;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if(i>=length-1){ //no escaped 0
 | 
				
			||||||
 | 
					        *dst_length= length;
 | 
				
			||||||
 | 
					        *consumed= length+1; //+1 for the header
 | 
				
			||||||
 | 
					        if(h->s.avctx->flags2 & CODEC_FLAG2_FAST){
 | 
				
			||||||
 | 
					            return src;
 | 
				
			||||||
 | 
					        }else{
 | 
				
			||||||
 | 
					            memcpy(dst, src, length);
 | 
				
			||||||
 | 
					            return dst;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//printf("decoding esc\n");
 | 
					//printf("decoding esc\n");
 | 
				
			||||||
    memcpy(dst, src, i);
 | 
					    memcpy(dst, src, i);
 | 
				
			||||||
    si=di=i;
 | 
					    si=di=i;
 | 
				
			||||||
@@ -1165,7 +1173,10 @@ static int decode_update_thread_context(AVCodecContext *dst, const AVCodecContex
 | 
				
			|||||||
        memcpy(&h->s + 1, &h1->s + 1, sizeof(H264Context) - sizeof(MpegEncContext)); //copy all fields after MpegEnc
 | 
					        memcpy(&h->s + 1, &h1->s + 1, sizeof(H264Context) - sizeof(MpegEncContext)); //copy all fields after MpegEnc
 | 
				
			||||||
        memset(h->sps_buffers, 0, sizeof(h->sps_buffers));
 | 
					        memset(h->sps_buffers, 0, sizeof(h->sps_buffers));
 | 
				
			||||||
        memset(h->pps_buffers, 0, sizeof(h->pps_buffers));
 | 
					        memset(h->pps_buffers, 0, sizeof(h->pps_buffers));
 | 
				
			||||||
        ff_h264_alloc_tables(h);
 | 
					        if (ff_h264_alloc_tables(h) < 0) {
 | 
				
			||||||
 | 
					            av_log(dst, AV_LOG_ERROR, "Could not allocate memory for h264\n");
 | 
				
			||||||
 | 
					            return AVERROR(ENOMEM);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
        context_init(h);
 | 
					        context_init(h);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        for(i=0; i<2; i++){
 | 
					        for(i=0; i<2; i++){
 | 
				
			||||||
@@ -1403,7 +1414,7 @@ static void decode_postinit(H264Context *h, int setup_finished){
 | 
				
			|||||||
    pics = 0;
 | 
					    pics = 0;
 | 
				
			||||||
    while(h->delayed_pic[pics]) pics++;
 | 
					    while(h->delayed_pic[pics]) pics++;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    assert(pics <= MAX_DELAYED_PIC_COUNT);
 | 
					    av_assert0(pics <= MAX_DELAYED_PIC_COUNT);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    h->delayed_pic[pics++] = cur;
 | 
					    h->delayed_pic[pics++] = cur;
 | 
				
			||||||
    if(cur->reference == 0)
 | 
					    if(cur->reference == 0)
 | 
				
			||||||
@@ -1848,15 +1859,30 @@ static av_always_inline void hl_decode_mb_internal(H264Context *h, int simple, i
 | 
				
			|||||||
                    tmp_y[j] = get_bits(&gb, bit_depth);
 | 
					                    tmp_y[j] = get_bits(&gb, bit_depth);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            if(simple || !CONFIG_GRAY || !(s->flags&CODEC_FLAG_GRAY)){
 | 
					            if(simple || !CONFIG_GRAY || !(s->flags&CODEC_FLAG_GRAY)){
 | 
				
			||||||
                for (i = 0; i < 8; i++) {
 | 
					                if (!h->sps.chroma_format_idc) {
 | 
				
			||||||
                    uint16_t *tmp_cb = (uint16_t*)(dest_cb + i*uvlinesize);
 | 
					                    for (i = 0; i < 8; i++) {
 | 
				
			||||||
                    for (j = 0; j < 8; j++)
 | 
					                        uint16_t *tmp_cb = (uint16_t*)(dest_cb + i*uvlinesize);
 | 
				
			||||||
                        tmp_cb[j] = get_bits(&gb, bit_depth);
 | 
					                        for (j = 0; j < 8; j++) {
 | 
				
			||||||
                }
 | 
					                            tmp_cb[j] = 1 << (bit_depth - 1);
 | 
				
			||||||
                for (i = 0; i < 8; i++) {
 | 
					                        }
 | 
				
			||||||
                    uint16_t *tmp_cr = (uint16_t*)(dest_cr + i*uvlinesize);
 | 
					                    }
 | 
				
			||||||
                    for (j = 0; j < 8; j++)
 | 
					                    for (i = 0; i < 8; i++) {
 | 
				
			||||||
                        tmp_cr[j] = get_bits(&gb, bit_depth);
 | 
					                        uint16_t *tmp_cr = (uint16_t*)(dest_cr + i*uvlinesize);
 | 
				
			||||||
 | 
					                        for (j = 0; j < 8; j++) {
 | 
				
			||||||
 | 
					                            tmp_cr[j] = 1 << (bit_depth - 1);
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                } else {
 | 
				
			||||||
 | 
					                    for (i = 0; i < 8; i++) {
 | 
				
			||||||
 | 
					                        uint16_t *tmp_cb = (uint16_t*)(dest_cb + i*uvlinesize);
 | 
				
			||||||
 | 
					                        for (j = 0; j < 8; j++)
 | 
				
			||||||
 | 
					                            tmp_cb[j] = get_bits(&gb, bit_depth);
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                    for (i = 0; i < 8; i++) {
 | 
				
			||||||
 | 
					                        uint16_t *tmp_cr = (uint16_t*)(dest_cr + i*uvlinesize);
 | 
				
			||||||
 | 
					                        for (j = 0; j < 8; j++)
 | 
				
			||||||
 | 
					                            tmp_cr[j] = get_bits(&gb, bit_depth);
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
@@ -1864,9 +1890,16 @@ static av_always_inline void hl_decode_mb_internal(H264Context *h, int simple, i
 | 
				
			|||||||
                memcpy(dest_y + i*  linesize, h->mb       + i*8, 16);
 | 
					                memcpy(dest_y + i*  linesize, h->mb       + i*8, 16);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            if(simple || !CONFIG_GRAY || !(s->flags&CODEC_FLAG_GRAY)){
 | 
					            if(simple || !CONFIG_GRAY || !(s->flags&CODEC_FLAG_GRAY)){
 | 
				
			||||||
                for (i=0; i<8; i++) {
 | 
					                if (!h->sps.chroma_format_idc) {
 | 
				
			||||||
                    memcpy(dest_cb+ i*uvlinesize, h->mb + 128 + i*4,  8);
 | 
					                    for (i = 0; i < 8; i++) {
 | 
				
			||||||
                    memcpy(dest_cr+ i*uvlinesize, h->mb + 160 + i*4,  8);
 | 
					                        memset(dest_cb + i*uvlinesize, 128, 8);
 | 
				
			||||||
 | 
					                        memset(dest_cr + i*uvlinesize, 128, 8);
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                } else {
 | 
				
			||||||
 | 
					                    for (i = 0; i < 8; i++) {
 | 
				
			||||||
 | 
					                        memcpy(dest_cb + i*uvlinesize, h->mb + 128 + i*4,  8);
 | 
				
			||||||
 | 
					                        memcpy(dest_cr + i*uvlinesize, h->mb + 160 + i*4,  8);
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@@ -2198,15 +2231,17 @@ static void implicit_weight_table(H264Context *h, int field){
 | 
				
			|||||||
    for(ref0=ref_start; ref0 < ref_count0; ref0++){
 | 
					    for(ref0=ref_start; ref0 < ref_count0; ref0++){
 | 
				
			||||||
        int poc0 = h->ref_list[0][ref0].poc;
 | 
					        int poc0 = h->ref_list[0][ref0].poc;
 | 
				
			||||||
        for(ref1=ref_start; ref1 < ref_count1; ref1++){
 | 
					        for(ref1=ref_start; ref1 < ref_count1; ref1++){
 | 
				
			||||||
            int poc1 = h->ref_list[1][ref1].poc;
 | 
					            int w = 32;
 | 
				
			||||||
            int td = av_clip(poc1 - poc0, -128, 127);
 | 
					            if (!h->ref_list[0][ref0].long_ref && !h->ref_list[1][ref1].long_ref) {
 | 
				
			||||||
            int w= 32;
 | 
					                int poc1 = h->ref_list[1][ref1].poc;
 | 
				
			||||||
            if(td){
 | 
					                int td = av_clip(poc1 - poc0, -128, 127);
 | 
				
			||||||
                int tb = av_clip(cur_poc - poc0, -128, 127);
 | 
					                if(td){
 | 
				
			||||||
                int tx = (16384 + (FFABS(td) >> 1)) / td;
 | 
					                    int tb = av_clip(cur_poc - poc0, -128, 127);
 | 
				
			||||||
                int dist_scale_factor = (tb*tx + 32) >> 8;
 | 
					                    int tx = (16384 + (FFABS(td) >> 1)) / td;
 | 
				
			||||||
                if(dist_scale_factor >= -64 && dist_scale_factor <= 128)
 | 
					                    int dist_scale_factor = (tb*tx + 32) >> 8;
 | 
				
			||||||
                    w = 64 - dist_scale_factor;
 | 
					                    if(dist_scale_factor >= -64 && dist_scale_factor <= 128)
 | 
				
			||||||
 | 
					                        w = 64 - dist_scale_factor;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            if(field<0){
 | 
					            if(field<0){
 | 
				
			||||||
                h->implicit_weight[ref0][ref1][0]=
 | 
					                h->implicit_weight[ref0][ref1][0]=
 | 
				
			||||||
@@ -2233,7 +2268,7 @@ static void idr(H264Context *h){
 | 
				
			|||||||
static void flush_dpb(AVCodecContext *avctx){
 | 
					static void flush_dpb(AVCodecContext *avctx){
 | 
				
			||||||
    H264Context *h= avctx->priv_data;
 | 
					    H264Context *h= avctx->priv_data;
 | 
				
			||||||
    int i;
 | 
					    int i;
 | 
				
			||||||
    for(i=0; i<MAX_DELAYED_PIC_COUNT; i++) {
 | 
					    for(i=0; i<=MAX_DELAYED_PIC_COUNT; i++) {
 | 
				
			||||||
        if(h->delayed_pic[i])
 | 
					        if(h->delayed_pic[i])
 | 
				
			||||||
            h->delayed_pic[i]->reference= 0;
 | 
					            h->delayed_pic[i]->reference= 0;
 | 
				
			||||||
        h->delayed_pic[i]= NULL;
 | 
					        h->delayed_pic[i]= NULL;
 | 
				
			||||||
@@ -2638,7 +2673,10 @@ static int decode_slice_header(H264Context *h, H264Context *h0){
 | 
				
			|||||||
        h->prev_interlaced_frame = 1;
 | 
					        h->prev_interlaced_frame = 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        init_scan_tables(h);
 | 
					        init_scan_tables(h);
 | 
				
			||||||
        ff_h264_alloc_tables(h);
 | 
					        if (ff_h264_alloc_tables(h) < 0) {
 | 
				
			||||||
 | 
					            av_log(h->s.avctx, AV_LOG_ERROR, "Could not allocate memory for h264\n");
 | 
				
			||||||
 | 
					            return AVERROR(ENOMEM);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (!HAVE_THREADS || !(s->avctx->active_thread_type&FF_THREAD_SLICE)) {
 | 
					        if (!HAVE_THREADS || !(s->avctx->active_thread_type&FF_THREAD_SLICE)) {
 | 
				
			||||||
            if (context_init(h) < 0) {
 | 
					            if (context_init(h) < 0) {
 | 
				
			||||||
@@ -3668,7 +3706,7 @@ static int decode_nal_units(H264Context *h, const uint8_t *buf, int buf_size){
 | 
				
			|||||||
            s->workaround_bugs |= FF_BUG_TRUNCATED;
 | 
					            s->workaround_bugs |= FF_BUG_TRUNCATED;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if(!(s->workaround_bugs & FF_BUG_TRUNCATED)){
 | 
					        if(!(s->workaround_bugs & FF_BUG_TRUNCATED)){
 | 
				
			||||||
        while(ptr[dst_length - 1] == 0 && dst_length > 0)
 | 
					        while(dst_length > 0 && ptr[dst_length - 1] == 0)
 | 
				
			||||||
            dst_length--;
 | 
					            dst_length--;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        bit_length= !dst_length ? 0 : (8*dst_length - ff_h264_decode_rbsp_trailing(h, ptr + dst_length - 1));
 | 
					        bit_length= !dst_length ? 0 : (8*dst_length - ff_h264_decode_rbsp_trailing(h, ptr + dst_length - 1));
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -53,6 +53,8 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#define MAX_DELAYED_PIC_COUNT 16
 | 
					#define MAX_DELAYED_PIC_COUNT 16
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define MAX_MBPAIR_SIZE (256*1024) // a tighter bound could be calculated if someone cares about a few bytes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Compiling in interlaced support reduces the speed
 | 
					/* Compiling in interlaced support reduces the speed
 | 
				
			||||||
 * of progressive decoding by about 2%. */
 | 
					 * of progressive decoding by about 2%. */
 | 
				
			||||||
#define ALLOW_INTERLACE
 | 
					#define ALLOW_INTERLACE
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -678,7 +678,7 @@ int ff_h264_decode_ref_pic_marking(H264Context *h, GetBitContext *gb){
 | 
				
			|||||||
                }
 | 
					                }
 | 
				
			||||||
                if(opcode==MMCO_SHORT2LONG || opcode==MMCO_LONG2UNUSED || opcode==MMCO_LONG || opcode==MMCO_SET_MAX_LONG){
 | 
					                if(opcode==MMCO_SHORT2LONG || opcode==MMCO_LONG2UNUSED || opcode==MMCO_LONG || opcode==MMCO_SET_MAX_LONG){
 | 
				
			||||||
                    unsigned int long_arg= get_ue_golomb_31(gb);
 | 
					                    unsigned int long_arg= get_ue_golomb_31(gb);
 | 
				
			||||||
                    if(long_arg >= 32 || (long_arg >= 16 && !(opcode == MMCO_LONG2UNUSED && FIELD_PICTURE))){
 | 
					                    if(long_arg >= 32 || (long_arg >= 16 && !(opcode == MMCO_SET_MAX_LONG && long_arg == 16) && !(opcode == MMCO_LONG2UNUSED && FIELD_PICTURE))){
 | 
				
			||||||
                        av_log(h->s.avctx, AV_LOG_ERROR, "illegal long ref in memory management control operation %d\n", opcode);
 | 
					                        av_log(h->s.avctx, AV_LOG_ERROR, "illegal long ref in memory management control operation %d\n", opcode);
 | 
				
			||||||
                        return -1;
 | 
					                        return -1;
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -153,6 +153,13 @@ static int ir2_decode_frame(AVCodecContext *avctx,
 | 
				
			|||||||
        return -1;
 | 
					        return -1;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    start = 48; /* hardcoded for now */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (start >= buf_size) {
 | 
				
			||||||
 | 
					        av_log(s->avctx, AV_LOG_ERROR, "input buffer size too small (%d)\n", buf_size);
 | 
				
			||||||
 | 
					        return AVERROR_INVALIDDATA;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    s->decode_delta = buf[18];
 | 
					    s->decode_delta = buf[18];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* decide whether frame uses deltas or not */
 | 
					    /* decide whether frame uses deltas or not */
 | 
				
			||||||
@@ -160,9 +167,8 @@ static int ir2_decode_frame(AVCodecContext *avctx,
 | 
				
			|||||||
    for (i = 0; i < buf_size; i++)
 | 
					    for (i = 0; i < buf_size; i++)
 | 
				
			||||||
        buf[i] = av_reverse[buf[i]];
 | 
					        buf[i] = av_reverse[buf[i]];
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
    start = 48; /* hardcoded for now */
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    init_get_bits(&s->gb, buf + start, buf_size - start);
 | 
					    init_get_bits(&s->gb, buf + start, (buf_size - start) * 8);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (s->decode_delta) { /* intraframe */
 | 
					    if (s->decode_delta) { /* intraframe */
 | 
				
			||||||
        ir2_decode_plane(s, avctx->width, avctx->height,
 | 
					        ir2_decode_plane(s, avctx->width, avctx->height,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -86,6 +86,8 @@ static inline void ff_jpegls_downscale_state(JLSState *state, int Q){
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static inline int ff_jpegls_update_state_regular(JLSState *state, int Q, int err){
 | 
					static inline int ff_jpegls_update_state_regular(JLSState *state, int Q, int err){
 | 
				
			||||||
 | 
					    if(FFABS(err) > 0xFFFF)
 | 
				
			||||||
 | 
					        return -0x10000;
 | 
				
			||||||
    state->A[Q] += FFABS(err);
 | 
					    state->A[Q] += FFABS(err);
 | 
				
			||||||
    err *= state->twonear;
 | 
					    err *= state->twonear;
 | 
				
			||||||
    state->B[Q] += err;
 | 
					    state->B[Q] += err;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -150,7 +150,7 @@ static int decode_frame(AVCodecContext *avctx,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        if (video_type == 0 || video_type == 1) {
 | 
					        if (video_type == 0 || video_type == 1) {
 | 
				
			||||||
            GetBitContext gb;
 | 
					            GetBitContext gb;
 | 
				
			||||||
            init_get_bits(&gb, buf, FFMIN(video_size, buf_end - buf));
 | 
					            init_get_bits(&gb, buf, FFMIN(video_size, (buf_end - buf) * 8));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            for (j = 0; j < avctx->height; j += 8)
 | 
					            for (j = 0; j < avctx->height; j += 8)
 | 
				
			||||||
                for (i = 0; i < avctx->width; i += 8)
 | 
					                for (i = 0; i < avctx->width; i += 8)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -174,6 +174,5 @@ AVCodec ff_kgv1_decoder = {
 | 
				
			|||||||
    NULL,
 | 
					    NULL,
 | 
				
			||||||
    decode_end,
 | 
					    decode_end,
 | 
				
			||||||
    decode_frame,
 | 
					    decode_frame,
 | 
				
			||||||
    .max_lowres = 1,
 | 
					 | 
				
			||||||
    .long_name = NULL_IF_CONFIG_SMALL("Kega Game Video"),
 | 
					    .long_name = NULL_IF_CONFIG_SMALL("Kega Game Video"),
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										178
									
								
								libavcodec/libspeexenc.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										178
									
								
								libavcodec/libspeexenc.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,178 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Copyright (c) 2009 by Xuggle Incorporated.  All rights reserved.
 | 
				
			||||||
 | 
					 * 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 <libavcodec/avcodec.h>
 | 
				
			||||||
 | 
					#include <speex/speex.h>
 | 
				
			||||||
 | 
					#include <speex/speex_header.h>
 | 
				
			||||||
 | 
					#include <speex/speex_stereo.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					typedef struct {
 | 
				
			||||||
 | 
					    SpeexBits bits;
 | 
				
			||||||
 | 
					    void *enc_state;
 | 
				
			||||||
 | 
					    SpeexHeader header;
 | 
				
			||||||
 | 
					} LibSpeexEncContext;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static av_cold int libspeex_encode_init(AVCodecContext *avctx)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    LibSpeexEncContext *s = (LibSpeexEncContext*)avctx->priv_data;
 | 
				
			||||||
 | 
					    const SpeexMode *mode;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if ((avctx->sample_fmt != SAMPLE_FMT_S16 && avctx->sample_fmt != SAMPLE_FMT_FLT) ||
 | 
				
			||||||
 | 
					            avctx->sample_rate <= 0 ||
 | 
				
			||||||
 | 
					            avctx->channels <= 0 ||
 | 
				
			||||||
 | 
					            avctx->channels > 2)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        av_log(avctx, AV_LOG_ERROR, "Unsupported sample format, rate, or channels for speex");
 | 
				
			||||||
 | 
					        return -1;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (avctx->sample_rate <= 8000)
 | 
				
			||||||
 | 
					        mode = &speex_nb_mode;
 | 
				
			||||||
 | 
					    else if (avctx->sample_rate <= 16000)
 | 
				
			||||||
 | 
					        mode = &speex_wb_mode;
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					        mode = &speex_uwb_mode;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    speex_bits_init(&s->bits);
 | 
				
			||||||
 | 
					    s->enc_state = speex_encoder_init(mode);
 | 
				
			||||||
 | 
					    if (!s->enc_state)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        av_log(avctx, AV_LOG_ERROR, "could not initialize speex encoder");
 | 
				
			||||||
 | 
					        return -1;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // initialize the header
 | 
				
			||||||
 | 
					    speex_init_header(&s->header, avctx->sample_rate,
 | 
				
			||||||
 | 
					            avctx->channels, mode);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // TODO: It'd be nice to support VBR here, but
 | 
				
			||||||
 | 
					    // I'm uncertain what AVCodecContext options to use
 | 
				
			||||||
 | 
					    // to signal whether to turn it on.
 | 
				
			||||||
 | 
					    if (avctx->flags & CODEC_FLAG_QSCALE) {
 | 
				
			||||||
 | 
					        spx_int32_t quality = 0;
 | 
				
			||||||
 | 
					        // Map global_quality's mpeg 1/2/4 scale into Speex's 0-10 scale
 | 
				
			||||||
 | 
					        if (avctx->global_quality > FF_LAMBDA_MAX)
 | 
				
			||||||
 | 
					            quality = 0; // lowest possible quality
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					            quality = (spx_int32_t)((FF_LAMBDA_MAX-avctx->global_quality)*10.0/FF_LAMBDA_MAX);
 | 
				
			||||||
 | 
					        speex_encoder_ctl(s->enc_state, SPEEX_SET_QUALITY, &quality);
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        // default to CBR
 | 
				
			||||||
 | 
					        if (avctx->bit_rate > 0)
 | 
				
			||||||
 | 
					            speex_encoder_ctl(s->enc_state, SPEEX_SET_BITRATE, &avctx->bit_rate);
 | 
				
			||||||
 | 
					        // otherwise just take the default quality setting
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    // reset the bit-rate to the actual bit rate speex will use
 | 
				
			||||||
 | 
					    speex_encoder_ctl(s->enc_state, SPEEX_GET_BITRATE, &s->header.bitrate);
 | 
				
			||||||
 | 
					    avctx->bit_rate = s->header.bitrate;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // get the actual sample rate
 | 
				
			||||||
 | 
					    speex_encoder_ctl(s->enc_state, SPEEX_GET_SAMPLING_RATE, &s->header.rate);
 | 
				
			||||||
 | 
					    avctx->sample_rate = s->header.rate;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // get the frame-size.  To align with FLV, we're going to put 2 frames
 | 
				
			||||||
 | 
					    // per packet.  If someone can tell me how to make this configurable
 | 
				
			||||||
 | 
					    // from the avcodec contents, I'll mod this so it's not hard-coded.
 | 
				
			||||||
 | 
					    // but without this, FLV files with speex data won't play correctly
 | 
				
			||||||
 | 
					    // in flash player 10.
 | 
				
			||||||
 | 
					    speex_encoder_ctl(s->enc_state, SPEEX_GET_FRAME_SIZE, &s->header.frame_size);
 | 
				
			||||||
 | 
					    s->header.frames_per_packet = 2; // Need for FLV container support
 | 
				
			||||||
 | 
					    avctx->frame_size = s->header.frame_size*s->header.frames_per_packet;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // and we'll put a speex header packet into extradata so that muxers
 | 
				
			||||||
 | 
					    // can use it.
 | 
				
			||||||
 | 
					    avctx->extradata = speex_header_to_packet(&s->header, &avctx->extradata_size);
 | 
				
			||||||
 | 
					    return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static av_cold int libspeex_encode_frame(
 | 
				
			||||||
 | 
					        AVCodecContext *avctx, uint8_t *frame,
 | 
				
			||||||
 | 
					        int buf_size, void *data)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    LibSpeexEncContext *s = (LibSpeexEncContext*)avctx->priv_data;
 | 
				
			||||||
 | 
					    int i = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (!data)
 | 
				
			||||||
 | 
					        // nothing to flush
 | 
				
			||||||
 | 
					        return 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    speex_bits_reset(&s->bits);
 | 
				
			||||||
 | 
					    for(i = 0; i < s->header.frames_per_packet; i++)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        if (avctx->sample_fmt == SAMPLE_FMT_FLT)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if (avctx->channels == 2) {
 | 
				
			||||||
 | 
					                speex_encode_stereo(
 | 
				
			||||||
 | 
					                        (float*)data+i*s->header.frame_size,
 | 
				
			||||||
 | 
					                        s->header.frame_size,
 | 
				
			||||||
 | 
					                        &s->bits);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            speex_encode(s->enc_state,
 | 
				
			||||||
 | 
					                    (float*)data+i*s->header.frame_size, &s->bits);
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            if (avctx->channels == 2) {
 | 
				
			||||||
 | 
					                speex_encode_stereo_int(
 | 
				
			||||||
 | 
					                        (spx_int16_t*)data+i*s->header.frame_size,
 | 
				
			||||||
 | 
					                        s->header.frame_size,
 | 
				
			||||||
 | 
					                        &s->bits);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            speex_encode_int(s->enc_state,
 | 
				
			||||||
 | 
					                    (spx_int16_t*)data+i*s->header.frame_size, &s->bits);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    // put in a terminator so this will fit in a OGG or FLV packet
 | 
				
			||||||
 | 
					    speex_bits_insert_terminator(&s->bits);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (buf_size >= speex_bits_nbytes(&s->bits)) {
 | 
				
			||||||
 | 
					        return speex_bits_write(&s->bits, frame, buf_size);
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        av_log(avctx, AV_LOG_ERROR, "output buffer too small");
 | 
				
			||||||
 | 
					        return -1;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static av_cold int libspeex_encode_close(AVCodecContext *avctx)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    LibSpeexEncContext *s = (LibSpeexEncContext*)avctx->priv_data;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    speex_bits_destroy(&s->bits);
 | 
				
			||||||
 | 
					    speex_encoder_destroy(s->enc_state);
 | 
				
			||||||
 | 
					    s->enc_state = 0;
 | 
				
			||||||
 | 
					    if (avctx->extradata)
 | 
				
			||||||
 | 
					        speex_header_free(avctx->extradata);
 | 
				
			||||||
 | 
					    avctx->extradata = 0;
 | 
				
			||||||
 | 
					    avctx->extradata_size = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					AVCodec ff_libspeex_encoder = {
 | 
				
			||||||
 | 
					    "libspeex",
 | 
				
			||||||
 | 
					    AVMEDIA_TYPE_AUDIO,
 | 
				
			||||||
 | 
					    CODEC_ID_SPEEX,
 | 
				
			||||||
 | 
					    sizeof(LibSpeexEncContext),
 | 
				
			||||||
 | 
					    libspeex_encode_init,
 | 
				
			||||||
 | 
					    libspeex_encode_frame,
 | 
				
			||||||
 | 
					    libspeex_encode_close,
 | 
				
			||||||
 | 
					    0,
 | 
				
			||||||
 | 
					    .capabilities = CODEC_CAP_DELAY,
 | 
				
			||||||
 | 
					    .supported_samplerates = (const int[]){8000, 16000, 32000, 0},
 | 
				
			||||||
 | 
					    .sample_fmts = (enum SampleFormat[]){SAMPLE_FMT_S16,SAMPLE_FMT_FLT,SAMPLE_FMT_NONE},
 | 
				
			||||||
 | 
					    .long_name = NULL_IF_CONFIG_SMALL("libspeex Speex Encoder"),
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
@@ -318,8 +318,10 @@ int ff_mjpeg_decode_sof(MJpegDecodeContext *s)
 | 
				
			|||||||
    case 0x11111100:
 | 
					    case 0x11111100:
 | 
				
			||||||
        if(s->rgb){
 | 
					        if(s->rgb){
 | 
				
			||||||
            s->avctx->pix_fmt = PIX_FMT_BGRA;
 | 
					            s->avctx->pix_fmt = PIX_FMT_BGRA;
 | 
				
			||||||
        }else
 | 
					        }else{
 | 
				
			||||||
            s->avctx->pix_fmt = s->cs_itu601 ? PIX_FMT_YUV444P : PIX_FMT_YUVJ444P;
 | 
					            s->avctx->pix_fmt = s->cs_itu601 ? PIX_FMT_YUV444P : PIX_FMT_YUVJ444P;
 | 
				
			||||||
 | 
					            s->avctx->color_range = s->cs_itu601 ? AVCOL_RANGE_MPEG : AVCOL_RANGE_JPEG;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
        assert(s->nb_components==3);
 | 
					        assert(s->nb_components==3);
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
    case 0x11000000:
 | 
					    case 0x11000000:
 | 
				
			||||||
@@ -327,12 +329,15 @@ int ff_mjpeg_decode_sof(MJpegDecodeContext *s)
 | 
				
			|||||||
        break;
 | 
					        break;
 | 
				
			||||||
    case 0x12111100:
 | 
					    case 0x12111100:
 | 
				
			||||||
        s->avctx->pix_fmt = s->cs_itu601 ? PIX_FMT_YUV440P : PIX_FMT_YUVJ440P;
 | 
					        s->avctx->pix_fmt = s->cs_itu601 ? PIX_FMT_YUV440P : PIX_FMT_YUVJ440P;
 | 
				
			||||||
 | 
					        s->avctx->color_range = s->cs_itu601 ? AVCOL_RANGE_MPEG : AVCOL_RANGE_JPEG;
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
    case 0x21111100:
 | 
					    case 0x21111100:
 | 
				
			||||||
        s->avctx->pix_fmt = s->cs_itu601 ? PIX_FMT_YUV422P : PIX_FMT_YUVJ422P;
 | 
					        s->avctx->pix_fmt = s->cs_itu601 ? PIX_FMT_YUV422P : PIX_FMT_YUVJ422P;
 | 
				
			||||||
 | 
					        s->avctx->color_range = s->cs_itu601 ? AVCOL_RANGE_MPEG : AVCOL_RANGE_JPEG;
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
    case 0x22111100:
 | 
					    case 0x22111100:
 | 
				
			||||||
        s->avctx->pix_fmt = s->cs_itu601 ? PIX_FMT_YUV420P : PIX_FMT_YUVJ420P;
 | 
					        s->avctx->pix_fmt = s->cs_itu601 ? PIX_FMT_YUV420P : PIX_FMT_YUVJ420P;
 | 
				
			||||||
 | 
					        s->avctx->color_range = s->cs_itu601 ? AVCOL_RANGE_MPEG : AVCOL_RANGE_JPEG;
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
    default:
 | 
					    default:
 | 
				
			||||||
        av_log(s->avctx, AV_LOG_ERROR, "Unhandled pixel format 0x%x\n", pix_fmt_id);
 | 
					        av_log(s->avctx, AV_LOG_ERROR, "Unhandled pixel format 0x%x\n", pix_fmt_id);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -279,7 +279,8 @@ static int mp_decode_frame(AVCodecContext *avctx,
 | 
				
			|||||||
    if (sz == 0)
 | 
					    if (sz == 0)
 | 
				
			||||||
        goto end;
 | 
					        goto end;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    init_vlc(&mp->vlc, mp->max_codes_bits, mp->codes_count, &mp->codes[0].size, sizeof(HuffCode), 1, &mp->codes[0].code, sizeof(HuffCode), 4, 0);
 | 
					    if (init_vlc(&mp->vlc, mp->max_codes_bits, mp->codes_count, &mp->codes[0].size, sizeof(HuffCode), 1, &mp->codes[0].code, sizeof(HuffCode), 4, 0))
 | 
				
			||||||
 | 
					        goto end;
 | 
				
			||||||
    mp_decode_frame_helper(mp, &gb);
 | 
					    mp_decode_frame_helper(mp, &gb);
 | 
				
			||||||
    free_vlc(&mp->vlc);
 | 
					    free_vlc(&mp->vlc);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -898,8 +898,8 @@ static void mpeg4_encode_gop_header(MpegEncContext * s){
 | 
				
			|||||||
    s->last_time_base= FFUDIV(time, s->avctx->time_base.den);
 | 
					    s->last_time_base= FFUDIV(time, s->avctx->time_base.den);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    seconds= FFUDIV(time, s->avctx->time_base.den);
 | 
					    seconds= FFUDIV(time, s->avctx->time_base.den);
 | 
				
			||||||
    minutes= FFUDIV(seconds, 60); FFUMOD(seconds, 60);
 | 
					    minutes= FFUDIV(seconds, 60); seconds = FFUMOD(seconds, 60);
 | 
				
			||||||
    hours  = FFUDIV(minutes, 60); FFUMOD(minutes, 60);
 | 
					    hours  = FFUDIV(minutes, 60); minutes = FFUMOD(minutes, 60);
 | 
				
			||||||
    hours  = FFUMOD(hours  , 24);
 | 
					    hours  = FFUMOD(hours  , 24);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    put_bits(&s->pb, 5, hours);
 | 
					    put_bits(&s->pb, 5, hours);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -285,9 +285,10 @@ int ff_alloc_picture(MpegEncContext *s, Picture *pic, int shared){
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        FF_ALLOCZ_OR_GOTO(s->avctx, pic->mbskip_table , mb_array_size * sizeof(uint8_t)+2, fail) //the +2 is for the slice end check
 | 
					        FF_ALLOCZ_OR_GOTO(s->avctx, pic->mbskip_table , mb_array_size * sizeof(uint8_t)+2, fail) //the +2 is for the slice end check
 | 
				
			||||||
        FF_ALLOCZ_OR_GOTO(s->avctx, pic->qscale_table , mb_array_size * sizeof(uint8_t)  , fail)
 | 
					        FF_ALLOCZ_OR_GOTO(s->avctx, pic->qscale_table_base , (big_mb_num + s->mb_stride) * sizeof(uint8_t)  , fail)
 | 
				
			||||||
        FF_ALLOCZ_OR_GOTO(s->avctx, pic->mb_type_base , (big_mb_num + s->mb_stride) * sizeof(uint32_t), fail)
 | 
					        FF_ALLOCZ_OR_GOTO(s->avctx, pic->mb_type_base , (big_mb_num + s->mb_stride) * sizeof(uint32_t), fail)
 | 
				
			||||||
        pic->mb_type= pic->mb_type_base + 2*s->mb_stride+1;
 | 
					        pic->mb_type= pic->mb_type_base + 2*s->mb_stride+1;
 | 
				
			||||||
 | 
					        pic->qscale_table = pic->qscale_table_base + 2*s->mb_stride + 1;
 | 
				
			||||||
        if(s->out_format == FMT_H264){
 | 
					        if(s->out_format == FMT_H264){
 | 
				
			||||||
            for(i=0; i<2; i++){
 | 
					            for(i=0; i<2; i++){
 | 
				
			||||||
                FF_ALLOCZ_OR_GOTO(s->avctx, pic->motion_val_base[i], 2 * (b4_array_size+4)  * sizeof(int16_t), fail)
 | 
					                FF_ALLOCZ_OR_GOTO(s->avctx, pic->motion_val_base[i], 2 * (b4_array_size+4)  * sizeof(int16_t), fail)
 | 
				
			||||||
@@ -339,7 +340,7 @@ static void free_picture(MpegEncContext *s, Picture *pic){
 | 
				
			|||||||
    av_freep(&pic->mc_mb_var);
 | 
					    av_freep(&pic->mc_mb_var);
 | 
				
			||||||
    av_freep(&pic->mb_mean);
 | 
					    av_freep(&pic->mb_mean);
 | 
				
			||||||
    av_freep(&pic->mbskip_table);
 | 
					    av_freep(&pic->mbskip_table);
 | 
				
			||||||
    av_freep(&pic->qscale_table);
 | 
					    av_freep(&pic->qscale_table_base);
 | 
				
			||||||
    av_freep(&pic->mb_type_base);
 | 
					    av_freep(&pic->mb_type_base);
 | 
				
			||||||
    av_freep(&pic->dct_coeff);
 | 
					    av_freep(&pic->dct_coeff);
 | 
				
			||||||
    av_freep(&pic->pan_scan);
 | 
					    av_freep(&pic->pan_scan);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -88,6 +88,7 @@ typedef struct Picture{
 | 
				
			|||||||
     * halfpel luma planes.
 | 
					     * halfpel luma planes.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    uint8_t *interpolated[3];
 | 
					    uint8_t *interpolated[3];
 | 
				
			||||||
 | 
					    int8_t *qscale_table_base;
 | 
				
			||||||
    int16_t (*motion_val_base[2])[2];
 | 
					    int16_t (*motion_val_base[2])[2];
 | 
				
			||||||
    uint32_t *mb_type_base;
 | 
					    uint32_t *mb_type_base;
 | 
				
			||||||
#define MB_TYPE_INTRA MB_TYPE_INTRA4x4 //default mb_type if there is just one type
 | 
					#define MB_TYPE_INTRA MB_TYPE_INTRA4x4 //default mb_type if there is just one type
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -156,6 +156,7 @@ static int decode_tag(AVCodecContext * avctx,
 | 
				
			|||||||
    const uint8_t *buf = avpkt->data;
 | 
					    const uint8_t *buf = avpkt->data;
 | 
				
			||||||
    int buf_size = avpkt->size;
 | 
					    int buf_size = avpkt->size;
 | 
				
			||||||
    NellyMoserDecodeContext *s = avctx->priv_data;
 | 
					    NellyMoserDecodeContext *s = avctx->priv_data;
 | 
				
			||||||
 | 
					    int data_max = *data_size;
 | 
				
			||||||
    int blocks, i;
 | 
					    int blocks, i;
 | 
				
			||||||
    int16_t* samples;
 | 
					    int16_t* samples;
 | 
				
			||||||
    *data_size = 0;
 | 
					    *data_size = 0;
 | 
				
			||||||
@@ -178,6 +179,8 @@ static int decode_tag(AVCodecContext * avctx,
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for (i=0 ; i<blocks ; i++) {
 | 
					    for (i=0 ; i<blocks ; i++) {
 | 
				
			||||||
 | 
					        if ((i + 1) * NELLY_SAMPLES * sizeof(int16_t) > data_max)
 | 
				
			||||||
 | 
					            return i > 0 ? i * NELLY_BLOCK_LEN : -1;
 | 
				
			||||||
        nelly_decode_block(s, &buf[i*NELLY_BLOCK_LEN], s->float_buf);
 | 
					        nelly_decode_block(s, &buf[i*NELLY_BLOCK_LEN], s->float_buf);
 | 
				
			||||||
        s->fmt_conv.float_to_int16(&samples[i*NELLY_SAMPLES], s->float_buf, NELLY_SAMPLES);
 | 
					        s->fmt_conv.float_to_int16(&samples[i*NELLY_SAMPLES], s->float_buf, NELLY_SAMPLES);
 | 
				
			||||||
        *data_size += NELLY_SAMPLES*sizeof(int16_t);
 | 
					        *data_size += NELLY_SAMPLES*sizeof(int16_t);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -447,10 +447,9 @@ static const AVOption options[]={
 | 
				
			|||||||
{"lpc_passes", "deprecated, use flac-specific options", OFFSET(lpc_passes), FF_OPT_TYPE_INT, {.dbl = -1 }, INT_MIN, INT_MAX, A|E},
 | 
					{"lpc_passes", "deprecated, use flac-specific options", OFFSET(lpc_passes), FF_OPT_TYPE_INT, {.dbl = -1 }, INT_MIN, INT_MAX, A|E},
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
{"slices", "number of slices, used in parallelized decoding", OFFSET(slices), FF_OPT_TYPE_INT, {.dbl = 0 }, 0, INT_MAX, V|E},
 | 
					{"slices", "number of slices, used in parallelized decoding", OFFSET(slices), FF_OPT_TYPE_INT, {.dbl = 0 }, 0, INT_MAX, V|E},
 | 
				
			||||||
{"thread_type", "select multithreading type", OFFSET(thread_type), FF_OPT_TYPE_INT, {.dbl = FF_THREAD_SLICE|FF_THREAD_FRAME }, 0, INT_MAX, V|E|D, "thread_type"},
 | 
					{"thread_type", "select multithreading type", OFFSET(thread_type), FF_OPT_TYPE_FLAGS, {.dbl = FF_THREAD_SLICE|FF_THREAD_FRAME }, 0, INT_MAX, V|E|D, "thread_type"},
 | 
				
			||||||
{"slice", NULL, 0, FF_OPT_TYPE_CONST, {.dbl = FF_THREAD_SLICE }, INT_MIN, INT_MAX, V|E|D, "thread_type"},
 | 
					{"slice", NULL, 0, FF_OPT_TYPE_CONST, {.dbl = FF_THREAD_SLICE }, INT_MIN, INT_MAX, V|E|D, "thread_type"},
 | 
				
			||||||
{"frame", NULL, 0, FF_OPT_TYPE_CONST, {.dbl = FF_THREAD_FRAME }, INT_MIN, INT_MAX, V|E|D, "thread_type"},
 | 
					{"frame", NULL, 0, FF_OPT_TYPE_CONST, {.dbl = FF_THREAD_FRAME }, INT_MIN, INT_MAX, V|E|D, "thread_type"},
 | 
				
			||||||
{"vbv_delay", "initial buffer fill time in periods of 27Mhz clock", 0, FF_OPT_TYPE_INT64, {.dbl = 0 }, 0, INT64_MAX},
 | 
					 | 
				
			||||||
{"audio_service_type", "audio service type", OFFSET(audio_service_type), FF_OPT_TYPE_INT, {.dbl = AV_AUDIO_SERVICE_TYPE_MAIN }, 0, AV_AUDIO_SERVICE_TYPE_NB-1, A|E, "audio_service_type"},
 | 
					{"audio_service_type", "audio service type", OFFSET(audio_service_type), FF_OPT_TYPE_INT, {.dbl = AV_AUDIO_SERVICE_TYPE_MAIN }, 0, AV_AUDIO_SERVICE_TYPE_NB-1, A|E, "audio_service_type"},
 | 
				
			||||||
{"ma", "Main Audio Service", 0, FF_OPT_TYPE_CONST, {.dbl = AV_AUDIO_SERVICE_TYPE_MAIN },              INT_MIN, INT_MAX, A|E, "audio_service_type"},
 | 
					{"ma", "Main Audio Service", 0, FF_OPT_TYPE_CONST, {.dbl = AV_AUDIO_SERVICE_TYPE_MAIN },              INT_MIN, INT_MAX, A|E, "audio_service_type"},
 | 
				
			||||||
{"ef", "Effects",            0, FF_OPT_TYPE_CONST, {.dbl = AV_AUDIO_SERVICE_TYPE_EFFECTS },           INT_MIN, INT_MAX, A|E, "audio_service_type"},
 | 
					{"ef", "Effects",            0, FF_OPT_TYPE_CONST, {.dbl = AV_AUDIO_SERVICE_TYPE_EFFECTS },           INT_MIN, INT_MAX, A|E, "audio_service_type"},
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -839,7 +839,7 @@ erasure:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    *data_size = 160 * sizeof(*outbuffer);
 | 
					    *data_size = 160 * sizeof(*outbuffer);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return *data_size;
 | 
					    return buf_size;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
AVCodec ff_qcelp_decoder =
 | 
					AVCodec ff_qcelp_decoder =
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -866,6 +866,12 @@ static int init_pass2(MpegEncContext *s)
 | 
				
			|||||||
        assert(filter_size%2==1);
 | 
					        assert(filter_size%2==1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /* fixed I/B QP relative to P mode */
 | 
					        /* fixed I/B QP relative to P mode */
 | 
				
			||||||
 | 
					        for(i=FFMAX(0, rcc->num_entries-300); i<rcc->num_entries; i++){
 | 
				
			||||||
 | 
					            RateControlEntry *rce= &rcc->entry[i];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            qscale[i]= get_diff_limited_q(s, rce, qscale[i]);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        for(i=rcc->num_entries-1; i>=0; i--){
 | 
					        for(i=rcc->num_entries-1; i>=0; i--){
 | 
				
			||||||
            RateControlEntry *rce= &rcc->entry[i];
 | 
					            RateControlEntry *rce= &rcc->entry[i];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -559,8 +559,14 @@ static int rv10_decode_packet(AVCodecContext *avctx,
 | 
				
			|||||||
        if(MPV_frame_start(s, avctx) < 0)
 | 
					        if(MPV_frame_start(s, avctx) < 0)
 | 
				
			||||||
            return -1;
 | 
					            return -1;
 | 
				
			||||||
        ff_er_frame_start(s);
 | 
					        ff_er_frame_start(s);
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        if (s->current_picture_ptr->pict_type != s->pict_type) {
 | 
				
			||||||
 | 
					            av_log(s->avctx, AV_LOG_ERROR, "Slice type mismatch\n");
 | 
				
			||||||
 | 
					            return -1;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    av_dlog(avctx, "qscale=%d\n", s->qscale);
 | 
					    av_dlog(avctx, "qscale=%d\n", s->qscale);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* default quantization values */
 | 
					    /* default quantization values */
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -51,6 +51,11 @@ static int rv30_parse_slice_header(RV34DecContext *r, GetBitContext *gb, SliceIn
 | 
				
			|||||||
    skip_bits1(gb);
 | 
					    skip_bits1(gb);
 | 
				
			||||||
    si->pts = get_bits(gb, 13);
 | 
					    si->pts = get_bits(gb, 13);
 | 
				
			||||||
    rpr = get_bits(gb, r->rpr);
 | 
					    rpr = get_bits(gb, r->rpr);
 | 
				
			||||||
 | 
					    if (r->s.avctx->extradata_size < 8 + rpr*2) {
 | 
				
			||||||
 | 
					        av_log(r->s.avctx, AV_LOG_WARNING,
 | 
				
			||||||
 | 
					               "Extradata does not contain selected resolution\n");
 | 
				
			||||||
 | 
					        rpr = 0;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
    if(rpr){
 | 
					    if(rpr){
 | 
				
			||||||
        w = r->s.avctx->extradata[6 + rpr*2] << 2;
 | 
					        w = r->s.avctx->extradata[6 + rpr*2] << 2;
 | 
				
			||||||
        h = r->s.avctx->extradata[7 + rpr*2] << 2;
 | 
					        h = r->s.avctx->extradata[7 + rpr*2] << 2;
 | 
				
			||||||
@@ -74,7 +79,7 @@ static int rv30_decode_intra_types(RV34DecContext *r, GetBitContext *gb, int8_t
 | 
				
			|||||||
    for(i = 0; i < 4; i++, dst += r->intra_types_stride - 4){
 | 
					    for(i = 0; i < 4; i++, dst += r->intra_types_stride - 4){
 | 
				
			||||||
        for(j = 0; j < 4; j+= 2){
 | 
					        for(j = 0; j < 4; j+= 2){
 | 
				
			||||||
            int code = svq3_get_ue_golomb(gb) << 1;
 | 
					            int code = svq3_get_ue_golomb(gb) << 1;
 | 
				
			||||||
            if(code >= 81*2){
 | 
					            if(code >= 81U*2U){
 | 
				
			||||||
                av_log(r->s.avctx, AV_LOG_ERROR, "Incorrect intra prediction code\n");
 | 
					                av_log(r->s.avctx, AV_LOG_ERROR, "Incorrect intra prediction code\n");
 | 
				
			||||||
                return -1;
 | 
					                return -1;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
@@ -103,7 +108,7 @@ static int rv30_decode_mb_info(RV34DecContext *r)
 | 
				
			|||||||
    GetBitContext *gb = &s->gb;
 | 
					    GetBitContext *gb = &s->gb;
 | 
				
			||||||
    int code = svq3_get_ue_golomb(gb);
 | 
					    int code = svq3_get_ue_golomb(gb);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if(code > 11){
 | 
					    if(code > 11U){
 | 
				
			||||||
        av_log(s->avctx, AV_LOG_ERROR, "Incorrect MB type code\n");
 | 
					        av_log(s->avctx, AV_LOG_ERROR, "Incorrect MB type code\n");
 | 
				
			||||||
        return -1;
 | 
					        return -1;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -256,6 +261,7 @@ static av_cold int rv30_decode_init(AVCodecContext *avctx)
 | 
				
			|||||||
    if(avctx->extradata_size - 8 < (r->rpr - 1) * 2){
 | 
					    if(avctx->extradata_size - 8 < (r->rpr - 1) * 2){
 | 
				
			||||||
        av_log(avctx, AV_LOG_ERROR, "Insufficient extradata - need at least %d bytes, got %d\n",
 | 
					        av_log(avctx, AV_LOG_ERROR, "Insufficient extradata - need at least %d bytes, got %d\n",
 | 
				
			||||||
               6 + r->rpr * 2, avctx->extradata_size);
 | 
					               6 + r->rpr * 2, avctx->extradata_size);
 | 
				
			||||||
 | 
					        return AVERROR(EINVAL);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    r->parse_slice_header = rv30_parse_slice_header;
 | 
					    r->parse_slice_header = rv30_parse_slice_header;
 | 
				
			||||||
    r->decode_intra_types = rv30_decode_intra_types;
 | 
					    r->decode_intra_types = rv30_decode_intra_types;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1305,6 +1305,17 @@ static int rv34_decode_slice(RV34DecContext *r, int end, const uint8_t* buf, int
 | 
				
			|||||||
            r->next_pts = r->cur_pts;
 | 
					            r->next_pts = r->cur_pts;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        s->mb_x = s->mb_y = 0;
 | 
					        s->mb_x = s->mb_y = 0;
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        int slice_type = r->si.type ? r->si.type : AV_PICTURE_TYPE_I;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (slice_type != s->pict_type) {
 | 
				
			||||||
 | 
					            av_log(s->avctx, AV_LOG_ERROR, "Slice type mismatch\n");
 | 
				
			||||||
 | 
					            return AVERROR_INVALIDDATA;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (s->width != r->si.width || s->height != r->si.height) {
 | 
				
			||||||
 | 
					            av_log(s->avctx, AV_LOG_ERROR, "Size mismatch\n");
 | 
				
			||||||
 | 
					            return AVERROR_INVALIDDATA;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    r->si.end = end;
 | 
					    r->si.end = end;
 | 
				
			||||||
@@ -1436,15 +1447,17 @@ int ff_rv34_decode_frame(AVCodecContext *avctx,
 | 
				
			|||||||
        slice_count = (*buf++) + 1;
 | 
					        slice_count = (*buf++) + 1;
 | 
				
			||||||
        slices_hdr = buf + 4;
 | 
					        slices_hdr = buf + 4;
 | 
				
			||||||
        buf += 8 * slice_count;
 | 
					        buf += 8 * slice_count;
 | 
				
			||||||
 | 
					        buf_size -= 1 + 8 * slice_count;
 | 
				
			||||||
    }else
 | 
					    }else
 | 
				
			||||||
        slice_count = avctx->slice_count;
 | 
					        slice_count = avctx->slice_count;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    //parse first slice header to check whether this frame can be decoded
 | 
					    //parse first slice header to check whether this frame can be decoded
 | 
				
			||||||
    if(get_slice_offset(avctx, slices_hdr, 0) > buf_size){
 | 
					    if(get_slice_offset(avctx, slices_hdr, 0) < 0 ||
 | 
				
			||||||
        av_log(avctx, AV_LOG_ERROR, "Slice offset is greater than frame size\n");
 | 
					       get_slice_offset(avctx, slices_hdr, 0) > buf_size){
 | 
				
			||||||
 | 
					        av_log(avctx, AV_LOG_ERROR, "Slice offset is invalid\n");
 | 
				
			||||||
        return -1;
 | 
					        return -1;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    init_get_bits(&s->gb, buf+get_slice_offset(avctx, slices_hdr, 0), buf_size-get_slice_offset(avctx, slices_hdr, 0));
 | 
					    init_get_bits(&s->gb, buf+get_slice_offset(avctx, slices_hdr, 0), (buf_size-get_slice_offset(avctx, slices_hdr, 0))*8);
 | 
				
			||||||
    if(r->parse_slice_header(r, &r->s.gb, &si) < 0 || si.start){
 | 
					    if(r->parse_slice_header(r, &r->s.gb, &si) < 0 || si.start){
 | 
				
			||||||
        av_log(avctx, AV_LOG_ERROR, "First slice header is incorrect\n");
 | 
					        av_log(avctx, AV_LOG_ERROR, "First slice header is incorrect\n");
 | 
				
			||||||
        return -1;
 | 
					        return -1;
 | 
				
			||||||
@@ -1457,8 +1470,7 @@ int ff_rv34_decode_frame(AVCodecContext *avctx,
 | 
				
			|||||||
#endif
 | 
					#endif
 | 
				
			||||||
    if(   (avctx->skip_frame >= AVDISCARD_NONREF && si.type==AV_PICTURE_TYPE_B)
 | 
					    if(   (avctx->skip_frame >= AVDISCARD_NONREF && si.type==AV_PICTURE_TYPE_B)
 | 
				
			||||||
       || (avctx->skip_frame >= AVDISCARD_NONKEY && si.type!=AV_PICTURE_TYPE_I)
 | 
					       || (avctx->skip_frame >= AVDISCARD_NONKEY && si.type!=AV_PICTURE_TYPE_I)
 | 
				
			||||||
       ||  avctx->skip_frame >= AVDISCARD_ALL)
 | 
					       ||  avctx->skip_frame >= AVDISCARD_ALL)        return avpkt->size;
 | 
				
			||||||
        return buf_size;
 | 
					 | 
				
			||||||
#if FF_API_HURRY_UP
 | 
					#if FF_API_HURRY_UP
 | 
				
			||||||
    /* skip everything if we are in a hurry>=5 */
 | 
					    /* skip everything if we are in a hurry>=5 */
 | 
				
			||||||
    if(avctx->hurry_up>=5)
 | 
					    if(avctx->hurry_up>=5)
 | 
				
			||||||
@@ -1473,13 +1485,18 @@ int ff_rv34_decode_frame(AVCodecContext *avctx,
 | 
				
			|||||||
        else
 | 
					        else
 | 
				
			||||||
            size= get_slice_offset(avctx, slices_hdr, i+1) - offset;
 | 
					            size= get_slice_offset(avctx, slices_hdr, i+1) - offset;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if(offset > buf_size){
 | 
					        if(offset < 0 || offset > buf_size){
 | 
				
			||||||
            av_log(avctx, AV_LOG_ERROR, "Slice offset is greater than frame size\n");
 | 
					            av_log(avctx, AV_LOG_ERROR, "Slice offset is invalid\n");
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        r->si.end = s->mb_width * s->mb_height;
 | 
					        r->si.end = s->mb_width * s->mb_height;
 | 
				
			||||||
        if(i+1 < slice_count){
 | 
					        if(i+1 < slice_count){
 | 
				
			||||||
 | 
					            if (get_slice_offset(avctx, slices_hdr, i+1) < 0 ||
 | 
				
			||||||
 | 
					                get_slice_offset(avctx, slices_hdr, i+1) > buf_size) {
 | 
				
			||||||
 | 
					                av_log(avctx, AV_LOG_ERROR, "Slice offset is invalid\n");
 | 
				
			||||||
 | 
					                break;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
            init_get_bits(&s->gb, buf+get_slice_offset(avctx, slices_hdr, i+1), (buf_size-get_slice_offset(avctx, slices_hdr, i+1))*8);
 | 
					            init_get_bits(&s->gb, buf+get_slice_offset(avctx, slices_hdr, i+1), (buf_size-get_slice_offset(avctx, slices_hdr, i+1))*8);
 | 
				
			||||||
            if(r->parse_slice_header(r, &r->s.gb, &si) < 0){
 | 
					            if(r->parse_slice_header(r, &r->s.gb, &si) < 0){
 | 
				
			||||||
                if(i+2 < slice_count)
 | 
					                if(i+2 < slice_count)
 | 
				
			||||||
@@ -1489,13 +1506,17 @@ int ff_rv34_decode_frame(AVCodecContext *avctx,
 | 
				
			|||||||
            }else
 | 
					            }else
 | 
				
			||||||
                r->si.end = si.start;
 | 
					                r->si.end = si.start;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        if (size < 0 || size > buf_size - offset) {
 | 
				
			||||||
 | 
					            av_log(avctx, AV_LOG_ERROR, "Slice size is invalid\n");
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
        last = rv34_decode_slice(r, r->si.end, buf + offset, size);
 | 
					        last = rv34_decode_slice(r, r->si.end, buf + offset, size);
 | 
				
			||||||
        s->mb_num_left = r->s.mb_x + r->s.mb_y*r->s.mb_width - r->si.start;
 | 
					        s->mb_num_left = r->s.mb_x + r->s.mb_y*r->s.mb_width - r->si.start;
 | 
				
			||||||
        if(last)
 | 
					        if(last)
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if(last){
 | 
					    if(last && s->current_picture_ptr){
 | 
				
			||||||
        if(r->loop_filter)
 | 
					        if(r->loop_filter)
 | 
				
			||||||
            r->loop_filter(r, s->mb_height - 1);
 | 
					            r->loop_filter(r, s->mb_height - 1);
 | 
				
			||||||
        ff_er_frame_end(s);
 | 
					        ff_er_frame_end(s);
 | 
				
			||||||
@@ -1512,7 +1533,7 @@ int ff_rv34_decode_frame(AVCodecContext *avctx,
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
        s->current_picture_ptr= NULL; //so we can detect if frame_end wasnt called (find some nicer solution...)
 | 
					        s->current_picture_ptr= NULL; //so we can detect if frame_end wasnt called (find some nicer solution...)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    return buf_size;
 | 
					    return avpkt->size;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
av_cold int ff_rv34_decode_end(AVCodecContext *avctx)
 | 
					av_cold int ff_rv34_decode_end(AVCodecContext *avctx)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -231,8 +231,11 @@ static int rv40_decode_mb_info(RV34DecContext *r)
 | 
				
			|||||||
    int blocks[RV34_MB_TYPES] = {0};
 | 
					    int blocks[RV34_MB_TYPES] = {0};
 | 
				
			||||||
    int count = 0;
 | 
					    int count = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if(!r->s.mb_skip_run)
 | 
					    if(!r->s.mb_skip_run) {
 | 
				
			||||||
        r->s.mb_skip_run = svq3_get_ue_golomb(gb) + 1;
 | 
					        r->s.mb_skip_run = svq3_get_ue_golomb(gb) + 1;
 | 
				
			||||||
 | 
					        if(r->s.mb_skip_run > (unsigned)s->mb_num)
 | 
				
			||||||
 | 
					            return -1;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if(--r->s.mb_skip_run)
 | 
					    if(--r->s.mb_skip_run)
 | 
				
			||||||
         return RV34_MB_SKIP;
 | 
					         return RV34_MB_SKIP;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -134,11 +134,13 @@ static int smacker_decode_bigtree(GetBitContext *gb, HuffContext *hc, DBCtx *ctx
 | 
				
			|||||||
            return -1;
 | 
					            return -1;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        b1 = get_bits_count(gb);
 | 
					        b1 = get_bits_count(gb);
 | 
				
			||||||
        i1 = get_vlc2(gb, ctx->v1->table, SMKTREE_BITS, 3);
 | 
					        i1 = ctx->v1->table ? get_vlc2(gb, ctx->v1->table, SMKTREE_BITS, 3) : 0;
 | 
				
			||||||
        b1 = get_bits_count(gb) - b1;
 | 
					        b1 = get_bits_count(gb) - b1;
 | 
				
			||||||
        b2 = get_bits_count(gb);
 | 
					        b2 = get_bits_count(gb);
 | 
				
			||||||
        i2 = get_vlc2(gb, ctx->v2->table, SMKTREE_BITS, 3);
 | 
					        i2 = ctx->v2->table ? get_vlc2(gb, ctx->v2->table, SMKTREE_BITS, 3) : 0;
 | 
				
			||||||
        b2 = get_bits_count(gb) - b2;
 | 
					        b2 = get_bits_count(gb) - b2;
 | 
				
			||||||
 | 
					        if (i1 < 0 || i2 < 0)
 | 
				
			||||||
 | 
					            return -1;
 | 
				
			||||||
        val = ctx->recode1[i1] | (ctx->recode2[i2] << 8);
 | 
					        val = ctx->recode1[i1] | (ctx->recode2[i2] << 8);
 | 
				
			||||||
        if(val == ctx->escapes[0]) {
 | 
					        if(val == ctx->escapes[0]) {
 | 
				
			||||||
            ctx->last[0] = hc->current;
 | 
					            ctx->last[0] = hc->current;
 | 
				
			||||||
@@ -290,7 +292,8 @@ static int decode_header_trees(SmackVContext *smk) {
 | 
				
			|||||||
        smk->mmap_tbl[0] = 0;
 | 
					        smk->mmap_tbl[0] = 0;
 | 
				
			||||||
        smk->mmap_last[0] = smk->mmap_last[1] = smk->mmap_last[2] = 1;
 | 
					        smk->mmap_last[0] = smk->mmap_last[1] = smk->mmap_last[2] = 1;
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
        smacker_decode_header_tree(smk, &gb, &smk->mmap_tbl, smk->mmap_last, mmap_size);
 | 
					        if (smacker_decode_header_tree(smk, &gb, &smk->mmap_tbl, smk->mmap_last, mmap_size))
 | 
				
			||||||
 | 
					            return -1;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if(!get_bits1(&gb)) {
 | 
					    if(!get_bits1(&gb)) {
 | 
				
			||||||
        av_log(smk->avctx, AV_LOG_INFO, "Skipping MCLR tree\n");
 | 
					        av_log(smk->avctx, AV_LOG_INFO, "Skipping MCLR tree\n");
 | 
				
			||||||
@@ -298,7 +301,8 @@ static int decode_header_trees(SmackVContext *smk) {
 | 
				
			|||||||
        smk->mclr_tbl[0] = 0;
 | 
					        smk->mclr_tbl[0] = 0;
 | 
				
			||||||
        smk->mclr_last[0] = smk->mclr_last[1] = smk->mclr_last[2] = 1;
 | 
					        smk->mclr_last[0] = smk->mclr_last[1] = smk->mclr_last[2] = 1;
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
        smacker_decode_header_tree(smk, &gb, &smk->mclr_tbl, smk->mclr_last, mclr_size);
 | 
					        if (smacker_decode_header_tree(smk, &gb, &smk->mclr_tbl, smk->mclr_last, mclr_size))
 | 
				
			||||||
 | 
					            return -1;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if(!get_bits1(&gb)) {
 | 
					    if(!get_bits1(&gb)) {
 | 
				
			||||||
        av_log(smk->avctx, AV_LOG_INFO, "Skipping FULL tree\n");
 | 
					        av_log(smk->avctx, AV_LOG_INFO, "Skipping FULL tree\n");
 | 
				
			||||||
@@ -306,7 +310,8 @@ static int decode_header_trees(SmackVContext *smk) {
 | 
				
			|||||||
        smk->full_tbl[0] = 0;
 | 
					        smk->full_tbl[0] = 0;
 | 
				
			||||||
        smk->full_last[0] = smk->full_last[1] = smk->full_last[2] = 1;
 | 
					        smk->full_last[0] = smk->full_last[1] = smk->full_last[2] = 1;
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
        smacker_decode_header_tree(smk, &gb, &smk->full_tbl, smk->full_last, full_size);
 | 
					        if (smacker_decode_header_tree(smk, &gb, &smk->full_tbl, smk->full_last, full_size))
 | 
				
			||||||
 | 
					            return -1;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if(!get_bits1(&gb)) {
 | 
					    if(!get_bits1(&gb)) {
 | 
				
			||||||
        av_log(smk->avctx, AV_LOG_INFO, "Skipping TYPE tree\n");
 | 
					        av_log(smk->avctx, AV_LOG_INFO, "Skipping TYPE tree\n");
 | 
				
			||||||
@@ -314,7 +319,8 @@ static int decode_header_trees(SmackVContext *smk) {
 | 
				
			|||||||
        smk->type_tbl[0] = 0;
 | 
					        smk->type_tbl[0] = 0;
 | 
				
			||||||
        smk->type_last[0] = smk->type_last[1] = smk->type_last[2] = 1;
 | 
					        smk->type_last[0] = smk->type_last[1] = smk->type_last[2] = 1;
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
        smacker_decode_header_tree(smk, &gb, &smk->type_tbl, smk->type_last, type_size);
 | 
					        if (smacker_decode_header_tree(smk, &gb, &smk->type_tbl, smk->type_last, type_size))
 | 
				
			||||||
 | 
					            return -1;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
@@ -523,8 +529,8 @@ static av_cold int decode_init(AVCodecContext *avctx)
 | 
				
			|||||||
        return -1;
 | 
					        return -1;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    decode_header_trees(c);
 | 
					    if (decode_header_trees(c))
 | 
				
			||||||
 | 
					        return -1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -619,9 +625,9 @@ static int smka_decode_frame(AVCodecContext *avctx, void *data, int *data_size,
 | 
				
			|||||||
    if(bits) { //decode 16-bit data
 | 
					    if(bits) { //decode 16-bit data
 | 
				
			||||||
        for(i = stereo; i >= 0; i--)
 | 
					        for(i = stereo; i >= 0; i--)
 | 
				
			||||||
            pred[i] = av_bswap16(get_bits(&gb, 16));
 | 
					            pred[i] = av_bswap16(get_bits(&gb, 16));
 | 
				
			||||||
        for(i = 0; i < stereo; i++)
 | 
					        for(i = 0; i <= stereo; i++)
 | 
				
			||||||
            *samples++ = pred[i];
 | 
					            *samples++ = pred[i];
 | 
				
			||||||
        for(i = 0; i < unp_size / 2; i++) {
 | 
					        for(; i < unp_size / 2; i++) {
 | 
				
			||||||
            if(i & stereo) {
 | 
					            if(i & stereo) {
 | 
				
			||||||
                if(vlc[2].table)
 | 
					                if(vlc[2].table)
 | 
				
			||||||
                    res = get_vlc2(&gb, vlc[2].table, SMKTREE_BITS, 3);
 | 
					                    res = get_vlc2(&gb, vlc[2].table, SMKTREE_BITS, 3);
 | 
				
			||||||
@@ -653,9 +659,9 @@ static int smka_decode_frame(AVCodecContext *avctx, void *data, int *data_size,
 | 
				
			|||||||
    } else { //8-bit data
 | 
					    } else { //8-bit data
 | 
				
			||||||
        for(i = stereo; i >= 0; i--)
 | 
					        for(i = stereo; i >= 0; i--)
 | 
				
			||||||
            pred[i] = get_bits(&gb, 8);
 | 
					            pred[i] = get_bits(&gb, 8);
 | 
				
			||||||
        for(i = 0; i < stereo; i++)
 | 
					        for(i = 0; i <= stereo; i++)
 | 
				
			||||||
            *samples8++ = pred[i];
 | 
					            *samples8++ = pred[i];
 | 
				
			||||||
        for(i = 0; i < unp_size; i++) {
 | 
					        for(; i < unp_size; i++) {
 | 
				
			||||||
            if(i & stereo){
 | 
					            if(i & stereo){
 | 
				
			||||||
                if(vlc[1].table)
 | 
					                if(vlc[1].table)
 | 
				
			||||||
                    res = get_vlc2(&gb, vlc[1].table, SMKTREE_BITS, 3);
 | 
					                    res = get_vlc2(&gb, vlc[1].table, SMKTREE_BITS, 3);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -221,7 +221,7 @@ static inline int svq3_decode_block(GetBitContext *gb, DCTELEM *block,
 | 
				
			|||||||
    for (limit = (16 >> intra); index < 16; index = limit, limit += 8) {
 | 
					    for (limit = (16 >> intra); index < 16; index = limit, limit += 8) {
 | 
				
			||||||
        for (; (vlc = svq3_get_ue_golomb(gb)) != 0; index++) {
 | 
					        for (; (vlc = svq3_get_ue_golomb(gb)) != 0; index++) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
          if (vlc == INVALID_VLC)
 | 
					          if (vlc < 0)
 | 
				
			||||||
              return -1;
 | 
					              return -1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
          sign = (vlc & 0x1) - 1;
 | 
					          sign = (vlc & 0x1) - 1;
 | 
				
			||||||
@@ -239,7 +239,7 @@ static inline int svq3_decode_block(GetBitContext *gb, DCTELEM *block,
 | 
				
			|||||||
                  level = ((vlc + 9) >> 2) - run;
 | 
					                  level = ((vlc + 9) >> 2) - run;
 | 
				
			||||||
              }
 | 
					              }
 | 
				
			||||||
          } else {
 | 
					          } else {
 | 
				
			||||||
              if (vlc < 16) {
 | 
					              if (vlc < 16U) {
 | 
				
			||||||
                  run   = svq3_dct_tables[intra][vlc].run;
 | 
					                  run   = svq3_dct_tables[intra][vlc].run;
 | 
				
			||||||
                  level = svq3_dct_tables[intra][vlc].level;
 | 
					                  level = svq3_dct_tables[intra][vlc].level;
 | 
				
			||||||
              } else if (intra) {
 | 
					              } else if (intra) {
 | 
				
			||||||
@@ -569,7 +569,7 @@ static int svq3_decode_mb(SVQ3Context *svq3, unsigned int mb_type)
 | 
				
			|||||||
            for (i = 0; i < 16; i+=2) {
 | 
					            for (i = 0; i < 16; i+=2) {
 | 
				
			||||||
                vlc = svq3_get_ue_golomb(&s->gb);
 | 
					                vlc = svq3_get_ue_golomb(&s->gb);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if (vlc >= 25){
 | 
					                if (vlc >= 25U){
 | 
				
			||||||
                    av_log(h->s.avctx, AV_LOG_ERROR, "luma prediction:%d\n", vlc);
 | 
					                    av_log(h->s.avctx, AV_LOG_ERROR, "luma prediction:%d\n", vlc);
 | 
				
			||||||
                    return -1;
 | 
					                    return -1;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
@@ -641,7 +641,7 @@ static int svq3_decode_mb(SVQ3Context *svq3, unsigned int mb_type)
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (!IS_INTRA16x16(mb_type) && (!IS_SKIP(mb_type) || s->pict_type == AV_PICTURE_TYPE_B)) {
 | 
					    if (!IS_INTRA16x16(mb_type) && (!IS_SKIP(mb_type) || s->pict_type == AV_PICTURE_TYPE_B)) {
 | 
				
			||||||
        if ((vlc = svq3_get_ue_golomb(&s->gb)) >= 48){
 | 
					        if ((vlc = svq3_get_ue_golomb(&s->gb)) >= 48U){
 | 
				
			||||||
            av_log(h->s.avctx, AV_LOG_ERROR, "cbp_vlc=%d\n", vlc);
 | 
					            av_log(h->s.avctx, AV_LOG_ERROR, "cbp_vlc=%d\n", vlc);
 | 
				
			||||||
            return -1;
 | 
					            return -1;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@@ -651,7 +651,7 @@ static int svq3_decode_mb(SVQ3Context *svq3, unsigned int mb_type)
 | 
				
			|||||||
    if (IS_INTRA16x16(mb_type) || (s->pict_type != AV_PICTURE_TYPE_I && s->adaptive_quant && cbp)) {
 | 
					    if (IS_INTRA16x16(mb_type) || (s->pict_type != AV_PICTURE_TYPE_I && s->adaptive_quant && cbp)) {
 | 
				
			||||||
        s->qscale += svq3_get_se_golomb(&s->gb);
 | 
					        s->qscale += svq3_get_se_golomb(&s->gb);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (s->qscale > 31){
 | 
					        if (s->qscale > 31U){
 | 
				
			||||||
            av_log(h->s.avctx, AV_LOG_ERROR, "qscale:%d\n", s->qscale);
 | 
					            av_log(h->s.avctx, AV_LOG_ERROR, "qscale:%d\n", s->qscale);
 | 
				
			||||||
            return -1;
 | 
					            return -1;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@@ -755,7 +755,7 @@ static int svq3_decode_slice_header(AVCodecContext *avctx)
 | 
				
			|||||||
        skip_bits_long(&s->gb, 0);
 | 
					        skip_bits_long(&s->gb, 0);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if ((i = svq3_get_ue_golomb(&s->gb)) == INVALID_VLC || i >= 3){
 | 
					    if ((i = svq3_get_ue_golomb(&s->gb)) >= 3U){
 | 
				
			||||||
        av_log(h->s.avctx, AV_LOG_ERROR, "illegal slice type %d \n", i);
 | 
					        av_log(h->s.avctx, AV_LOG_ERROR, "illegal slice type %d \n", i);
 | 
				
			||||||
        return -1;
 | 
					        return -1;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -226,7 +226,7 @@ static av_cold int tta_decode_init(AVCodecContext * avctx)
 | 
				
			|||||||
    if (avctx->extradata_size < 30)
 | 
					    if (avctx->extradata_size < 30)
 | 
				
			||||||
        return -1;
 | 
					        return -1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    init_get_bits(&s->gb, avctx->extradata, avctx->extradata_size);
 | 
					    init_get_bits(&s->gb, avctx->extradata, avctx->extradata_size * 8);
 | 
				
			||||||
    if (show_bits_long(&s->gb, 32) == AV_RL32("TTA1"))
 | 
					    if (show_bits_long(&s->gb, 32) == AV_RL32("TTA1"))
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        /* signature */
 | 
					        /* signature */
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -485,8 +485,8 @@ static int decode_sequence_header_adv(VC1Context *v, GetBitContext *gb)
 | 
				
			|||||||
        if(ar && ar < 14){
 | 
					        if(ar && ar < 14){
 | 
				
			||||||
            v->s.avctx->sample_aspect_ratio = ff_vc1_pixel_aspect[ar];
 | 
					            v->s.avctx->sample_aspect_ratio = ff_vc1_pixel_aspect[ar];
 | 
				
			||||||
        }else if(ar == 15){
 | 
					        }else if(ar == 15){
 | 
				
			||||||
            w = get_bits(gb, 8);
 | 
					            w = get_bits(gb, 8) + 1;
 | 
				
			||||||
            h = get_bits(gb, 8);
 | 
					            h = get_bits(gb, 8) + 1;
 | 
				
			||||||
            v->s.avctx->sample_aspect_ratio = (AVRational){w, h};
 | 
					            v->s.avctx->sample_aspect_ratio = (AVRational){w, h};
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        av_log(v->s.avctx, AV_LOG_DEBUG, "Aspect: %i:%i\n", v->s.avctx->sample_aspect_ratio.num, v->s.avctx->sample_aspect_ratio.den);
 | 
					        av_log(v->s.avctx, AV_LOG_DEBUG, "Aspect: %i:%i\n", v->s.avctx->sample_aspect_ratio.num, v->s.avctx->sample_aspect_ratio.den);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -243,7 +243,7 @@ static void vc1_loop_filter_iblk(VC1Context *v, int pq)
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
    v->vc1dsp.vc1_v_loop_filter16(s->dest[0] + 8*s->linesize, s->linesize, pq);
 | 
					    v->vc1dsp.vc1_v_loop_filter16(s->dest[0] + 8*s->linesize, s->linesize, pq);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (s->mb_y == s->mb_height-1) {
 | 
					    if (s->mb_y == s->end_mb_y-1) {
 | 
				
			||||||
        if (s->mb_x) {
 | 
					        if (s->mb_x) {
 | 
				
			||||||
            v->vc1dsp.vc1_h_loop_filter16(s->dest[0], s->linesize, pq);
 | 
					            v->vc1dsp.vc1_h_loop_filter16(s->dest[0], s->linesize, pq);
 | 
				
			||||||
            v->vc1dsp.vc1_h_loop_filter8(s->dest[1], s->uvlinesize, pq);
 | 
					            v->vc1dsp.vc1_h_loop_filter8(s->dest[1], s->uvlinesize, pq);
 | 
				
			||||||
@@ -295,7 +295,7 @@ static void vc1_loop_filter_iblk_delayed(VC1Context *v, int pq)
 | 
				
			|||||||
            v->vc1dsp.vc1_v_loop_filter16(s->dest[0] - 8 * s->linesize, s->linesize, pq);
 | 
					            v->vc1dsp.vc1_v_loop_filter16(s->dest[0] - 8 * s->linesize, s->linesize, pq);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (s->mb_y == s->mb_height) {
 | 
					        if (s->mb_y == s->end_mb_y) {
 | 
				
			||||||
            if (s->mb_x) {
 | 
					            if (s->mb_x) {
 | 
				
			||||||
                if (s->mb_x >= 2)
 | 
					                if (s->mb_x >= 2)
 | 
				
			||||||
                    v->vc1dsp.vc1_h_loop_filter16(s->dest[0] - 16 * s->linesize - 16, s->linesize, pq);
 | 
					                    v->vc1dsp.vc1_h_loop_filter16(s->dest[0] - 16 * s->linesize - 16, s->linesize, pq);
 | 
				
			||||||
@@ -2330,7 +2330,7 @@ static av_always_inline void vc1_apply_p_v_loop_filter(VC1Context *v, int block_
 | 
				
			|||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
        dst      = s->dest[0] + (block_num & 1) * 8 + ((block_num & 2) * 4 - 8) * linesize;
 | 
					        dst      = s->dest[0] + (block_num & 1) * 8 + ((block_num & 2) * 4 - 8) * linesize;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if (s->mb_y != s->mb_height || block_num < 2) {
 | 
					    if (s->mb_y != s->end_mb_y || block_num < 2) {
 | 
				
			||||||
        int16_t (*mv)[2];
 | 
					        int16_t (*mv)[2];
 | 
				
			||||||
        int mv_stride;
 | 
					        int mv_stride;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -3020,7 +3020,7 @@ static void vc1_decode_i_blocks_adv(VC1Context *v)
 | 
				
			|||||||
        s->mb_x = 0;
 | 
					        s->mb_x = 0;
 | 
				
			||||||
        ff_init_block_index(s);
 | 
					        ff_init_block_index(s);
 | 
				
			||||||
        memset(&s->coded_block[s->block_index[0]-s->b8_stride], 0,
 | 
					        memset(&s->coded_block[s->block_index[0]-s->b8_stride], 0,
 | 
				
			||||||
               s->b8_stride * sizeof(*s->coded_block));
 | 
					               (1 + s->b8_stride) * sizeof(*s->coded_block));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    for(; s->mb_y < s->end_mb_y; s->mb_y++) {
 | 
					    for(; s->mb_y < s->end_mb_y; s->mb_y++) {
 | 
				
			||||||
        s->mb_x = 0;
 | 
					        s->mb_x = 0;
 | 
				
			||||||
@@ -3096,7 +3096,7 @@ static void vc1_decode_i_blocks_adv(VC1Context *v)
 | 
				
			|||||||
        if(v->s.loop_filter) vc1_loop_filter_iblk_delayed(v, v->pq);
 | 
					        if(v->s.loop_filter) vc1_loop_filter_iblk_delayed(v, v->pq);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if (v->s.loop_filter)
 | 
					    if (v->s.loop_filter)
 | 
				
			||||||
        ff_draw_horiz_band(s, (s->mb_height-1)*16, 16);
 | 
					        ff_draw_horiz_band(s, (s->end_mb_y-1)*16, 16);
 | 
				
			||||||
    ff_er_add_slice(s, 0, s->start_mb_y, s->mb_width - 1, s->end_mb_y - 1, (AC_END|DC_END|MV_END));
 | 
					    ff_er_add_slice(s, 0, s->start_mb_y, s->mb_width - 1, s->end_mb_y - 1, (AC_END|DC_END|MV_END));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -3219,7 +3219,7 @@ static void vc1_decode_b_blocks(VC1Context *v)
 | 
				
			|||||||
        s->first_slice_line = 0;
 | 
					        s->first_slice_line = 0;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if (v->s.loop_filter)
 | 
					    if (v->s.loop_filter)
 | 
				
			||||||
        ff_draw_horiz_band(s, (s->mb_height-1)*16, 16);
 | 
					        ff_draw_horiz_band(s, (s->end_mb_y-1)*16, 16);
 | 
				
			||||||
    ff_er_add_slice(s, 0, s->start_mb_y, s->mb_width - 1, s->end_mb_y - 1, (AC_END|DC_END|MV_END));
 | 
					    ff_er_add_slice(s, 0, s->start_mb_y, s->mb_width - 1, s->end_mb_y - 1, (AC_END|DC_END|MV_END));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -3227,9 +3227,9 @@ static void vc1_decode_skip_blocks(VC1Context *v)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    MpegEncContext *s = &v->s;
 | 
					    MpegEncContext *s = &v->s;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ff_er_add_slice(s, 0, 0, s->mb_width - 1, s->mb_height - 1, (AC_END|DC_END|MV_END));
 | 
					    ff_er_add_slice(s, 0, s->start_mb_y, s->mb_width - 1, s->end_mb_y - 1, (AC_END|DC_END|MV_END));
 | 
				
			||||||
    s->first_slice_line = 1;
 | 
					    s->first_slice_line = 1;
 | 
				
			||||||
    for(s->mb_y = 0; s->mb_y < s->mb_height; s->mb_y++) {
 | 
					    for(s->mb_y = s->start_mb_y; s->mb_y < s->end_mb_y; s->mb_y++) {
 | 
				
			||||||
        s->mb_x = 0;
 | 
					        s->mb_x = 0;
 | 
				
			||||||
        ff_init_block_index(s);
 | 
					        ff_init_block_index(s);
 | 
				
			||||||
        ff_update_block_index(s);
 | 
					        ff_update_block_index(s);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2321,6 +2321,26 @@ static av_cold int theora_decode_init(AVCodecContext *avctx)
 | 
				
			|||||||
    return vp3_decode_init(avctx);
 | 
					    return vp3_decode_init(avctx);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void vp3_decode_flush(AVCodecContext *avctx)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    Vp3DecodeContext *s = avctx->priv_data;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (s->golden_frame.data[0]) {
 | 
				
			||||||
 | 
					        if (s->golden_frame.data[0] == s->last_frame.data[0])
 | 
				
			||||||
 | 
					            memset(&s->last_frame, 0, sizeof(AVFrame));
 | 
				
			||||||
 | 
					        if (s->current_frame.data[0] == s->golden_frame.data[0])
 | 
				
			||||||
 | 
					            memset(&s->current_frame, 0, sizeof(AVFrame));
 | 
				
			||||||
 | 
					        ff_thread_release_buffer(avctx, &s->golden_frame);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if (s->last_frame.data[0]) {
 | 
				
			||||||
 | 
					        if (s->current_frame.data[0] == s->last_frame.data[0])
 | 
				
			||||||
 | 
					            memset(&s->current_frame, 0, sizeof(AVFrame));
 | 
				
			||||||
 | 
					        ff_thread_release_buffer(avctx, &s->last_frame);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if (s->current_frame.data[0])
 | 
				
			||||||
 | 
					        ff_thread_release_buffer(avctx, &s->current_frame);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
AVCodec ff_theora_decoder = {
 | 
					AVCodec ff_theora_decoder = {
 | 
				
			||||||
    "theora",
 | 
					    "theora",
 | 
				
			||||||
    AVMEDIA_TYPE_VIDEO,
 | 
					    AVMEDIA_TYPE_VIDEO,
 | 
				
			||||||
@@ -2332,6 +2352,7 @@ AVCodec ff_theora_decoder = {
 | 
				
			|||||||
    vp3_decode_frame,
 | 
					    vp3_decode_frame,
 | 
				
			||||||
    CODEC_CAP_DR1 | CODEC_CAP_DRAW_HORIZ_BAND | CODEC_CAP_FRAME_THREADS,
 | 
					    CODEC_CAP_DR1 | CODEC_CAP_DRAW_HORIZ_BAND | CODEC_CAP_FRAME_THREADS,
 | 
				
			||||||
    NULL,
 | 
					    NULL,
 | 
				
			||||||
 | 
					    .flush = vp3_decode_flush,
 | 
				
			||||||
    .long_name = NULL_IF_CONFIG_SMALL("Theora"),
 | 
					    .long_name = NULL_IF_CONFIG_SMALL("Theora"),
 | 
				
			||||||
    .update_thread_context = ONLY_IF_THREADS_ENABLED(vp3_update_thread_context)
 | 
					    .update_thread_context = ONLY_IF_THREADS_ENABLED(vp3_update_thread_context)
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
@@ -2348,6 +2369,7 @@ AVCodec ff_vp3_decoder = {
 | 
				
			|||||||
    vp3_decode_frame,
 | 
					    vp3_decode_frame,
 | 
				
			||||||
    CODEC_CAP_DR1 | CODEC_CAP_DRAW_HORIZ_BAND | CODEC_CAP_FRAME_THREADS,
 | 
					    CODEC_CAP_DR1 | CODEC_CAP_DRAW_HORIZ_BAND | CODEC_CAP_FRAME_THREADS,
 | 
				
			||||||
    NULL,
 | 
					    NULL,
 | 
				
			||||||
 | 
					    .flush = vp3_decode_flush,
 | 
				
			||||||
    .long_name = NULL_IF_CONFIG_SMALL("On2 VP3"),
 | 
					    .long_name = NULL_IF_CONFIG_SMALL("On2 VP3"),
 | 
				
			||||||
    .update_thread_context = ONLY_IF_THREADS_ENABLED(vp3_update_thread_context)
 | 
					    .update_thread_context = ONLY_IF_THREADS_ENABLED(vp3_update_thread_context)
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -116,7 +116,7 @@ static void vp5_parse_vector_models(VP56Context *s)
 | 
				
			|||||||
                model->vector_pdv[comp][node] = vp56_rac_gets_nn(c, 7);
 | 
					                model->vector_pdv[comp][node] = vp56_rac_gets_nn(c, 7);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void vp5_parse_coeff_models(VP56Context *s)
 | 
					static int vp5_parse_coeff_models(VP56Context *s)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    VP56RangeCoder *c = &s->c;
 | 
					    VP56RangeCoder *c = &s->c;
 | 
				
			||||||
    VP56Model *model = s->modelp;
 | 
					    VP56Model *model = s->modelp;
 | 
				
			||||||
@@ -160,6 +160,7 @@ static void vp5_parse_coeff_models(VP56Context *s)
 | 
				
			|||||||
                for (ctx=0; ctx<6; ctx++)
 | 
					                for (ctx=0; ctx<6; ctx++)
 | 
				
			||||||
                    for (node=0; node<5; node++)
 | 
					                    for (node=0; node<5; node++)
 | 
				
			||||||
                        model->coeff_acct[pt][ct][cg][ctx][node] = av_clip(((model->coeff_ract[pt][ct][cg][node] * vp5_ract_lc[ct][cg][node][ctx][0] + 128) >> 8) + vp5_ract_lc[ct][cg][node][ctx][1], 1, 254);
 | 
					                        model->coeff_acct[pt][ct][cg][ctx][node] = av_clip(((model->coeff_ract[pt][ct][cg][node] * vp5_ract_lc[ct][cg][node][ctx][0] + 128) >> 8) + vp5_ract_lc[ct][cg][node][ctx][1], 1, 254);
 | 
				
			||||||
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void vp5_parse_coeff(VP56Context *s)
 | 
					static void vp5_parse_coeff(VP56Context *s)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -399,6 +399,8 @@ static void vp56_decode_mb(VP56Context *s, int row, int col, int is_alpha)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    frame_current = s->framep[VP56_FRAME_CURRENT];
 | 
					    frame_current = s->framep[VP56_FRAME_CURRENT];
 | 
				
			||||||
    frame_ref = s->framep[ref_frame];
 | 
					    frame_ref = s->framep[ref_frame];
 | 
				
			||||||
 | 
					    if (mb_type != VP56_MB_INTRA && !frame_ref->data[0])
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ab = 6*is_alpha;
 | 
					    ab = 6*is_alpha;
 | 
				
			||||||
    b_max = 6 - 2*is_alpha;
 | 
					    b_max = 6 - 2*is_alpha;
 | 
				
			||||||
@@ -511,6 +513,16 @@ int ff_vp56_decode_frame(AVCodecContext *avctx, void *data, int *data_size,
 | 
				
			|||||||
        if (!res)
 | 
					        if (!res)
 | 
				
			||||||
            return -1;
 | 
					            return -1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (res == 2) {
 | 
				
			||||||
 | 
					            int i;
 | 
				
			||||||
 | 
					            for (i = 0; i < 4; i++) {
 | 
				
			||||||
 | 
					                if (s->frames[i].data[0])
 | 
				
			||||||
 | 
					                    avctx->release_buffer(avctx, &s->frames[i]);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            if (is_alpha)
 | 
				
			||||||
 | 
					                return -1;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (!is_alpha) {
 | 
					        if (!is_alpha) {
 | 
				
			||||||
            p->reference = 1;
 | 
					            p->reference = 1;
 | 
				
			||||||
            if (avctx->get_buffer(avctx, p) < 0) {
 | 
					            if (avctx->get_buffer(avctx, p) < 0) {
 | 
				
			||||||
@@ -537,7 +549,8 @@ int ff_vp56_decode_frame(AVCodecContext *avctx, void *data, int *data_size,
 | 
				
			|||||||
            s->mb_type = VP56_MB_INTER_NOVEC_PF;
 | 
					            s->mb_type = VP56_MB_INTER_NOVEC_PF;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        s->parse_coeff_models(s);
 | 
					        if (s->parse_coeff_models(s))
 | 
				
			||||||
 | 
					            goto next;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        memset(s->prev_dc, 0, sizeof(s->prev_dc));
 | 
					        memset(s->prev_dc, 0, sizeof(s->prev_dc));
 | 
				
			||||||
        s->prev_dc[1][VP56_FRAME_CURRENT] = 128;
 | 
					        s->prev_dc[1][VP56_FRAME_CURRENT] = 128;
 | 
				
			||||||
@@ -601,6 +614,7 @@ int ff_vp56_decode_frame(AVCodecContext *avctx, void *data, int *data_size,
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    next:
 | 
				
			||||||
        if (p->key_frame || golden_frame) {
 | 
					        if (p->key_frame || golden_frame) {
 | 
				
			||||||
            if (s->framep[VP56_FRAME_GOLDEN]->data[0] &&
 | 
					            if (s->framep[VP56_FRAME_GOLDEN]->data[0] &&
 | 
				
			||||||
                s->framep[VP56_FRAME_GOLDEN] != s->framep[VP56_FRAME_GOLDEN2])
 | 
					                s->framep[VP56_FRAME_GOLDEN] != s->framep[VP56_FRAME_GOLDEN2])
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -46,7 +46,7 @@ typedef void (*VP56Filter)(VP56Context *s, uint8_t *dst, uint8_t *src,
 | 
				
			|||||||
typedef void (*VP56ParseCoeff)(VP56Context *s);
 | 
					typedef void (*VP56ParseCoeff)(VP56Context *s);
 | 
				
			||||||
typedef void (*VP56DefaultModelsInit)(VP56Context *s);
 | 
					typedef void (*VP56DefaultModelsInit)(VP56Context *s);
 | 
				
			||||||
typedef void (*VP56ParseVectorModels)(VP56Context *s);
 | 
					typedef void (*VP56ParseVectorModels)(VP56Context *s);
 | 
				
			||||||
typedef void (*VP56ParseCoeffModels)(VP56Context *s);
 | 
					typedef int  (*VP56ParseCoeffModels)(VP56Context *s);
 | 
				
			||||||
typedef int  (*VP56ParseHeader)(VP56Context *s, const uint8_t *buf,
 | 
					typedef int  (*VP56ParseHeader)(VP56Context *s, const uint8_t *buf,
 | 
				
			||||||
                                int buf_size, int *golden_frame);
 | 
					                                int buf_size, int *golden_frame);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -213,8 +213,8 @@ static int vp6_huff_cmp(const void *va, const void *vb)
 | 
				
			|||||||
    return (a->count - b->count)*16 + (b->sym - a->sym);
 | 
					    return (a->count - b->count)*16 + (b->sym - a->sym);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void vp6_build_huff_tree(VP56Context *s, uint8_t coeff_model[],
 | 
					static int vp6_build_huff_tree(VP56Context *s, uint8_t coeff_model[],
 | 
				
			||||||
                                const uint8_t *map, unsigned size, VLC *vlc)
 | 
					                               const uint8_t *map, unsigned size, VLC *vlc)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    Node nodes[2*VP6_MAX_HUFF_SIZE], *tmp = &nodes[size];
 | 
					    Node nodes[2*VP6_MAX_HUFF_SIZE], *tmp = &nodes[size];
 | 
				
			||||||
    int a, b, i;
 | 
					    int a, b, i;
 | 
				
			||||||
@@ -229,12 +229,12 @@ static void vp6_build_huff_tree(VP56Context *s, uint8_t coeff_model[],
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    free_vlc(vlc);
 | 
					    free_vlc(vlc);
 | 
				
			||||||
    /* then build the huffman tree accodring to probabilities */
 | 
					    /* then build the huffman tree according to probabilities */
 | 
				
			||||||
    ff_huff_build_tree(s->avctx, vlc, size, nodes, vp6_huff_cmp,
 | 
					    return ff_huff_build_tree(s->avctx, vlc, size, nodes, vp6_huff_cmp,
 | 
				
			||||||
                       FF_HUFFMAN_FLAG_HNODE_FIRST);
 | 
					                              FF_HUFFMAN_FLAG_HNODE_FIRST);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void vp6_parse_coeff_models(VP56Context *s)
 | 
					static int vp6_parse_coeff_models(VP56Context *s)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    VP56RangeCoder *c = &s->c;
 | 
					    VP56RangeCoder *c = &s->c;
 | 
				
			||||||
    VP56Model *model = s->modelp;
 | 
					    VP56Model *model = s->modelp;
 | 
				
			||||||
@@ -279,15 +279,18 @@ static void vp6_parse_coeff_models(VP56Context *s)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    if (s->use_huffman) {
 | 
					    if (s->use_huffman) {
 | 
				
			||||||
        for (pt=0; pt<2; pt++) {
 | 
					        for (pt=0; pt<2; pt++) {
 | 
				
			||||||
            vp6_build_huff_tree(s, model->coeff_dccv[pt],
 | 
					            if (vp6_build_huff_tree(s, model->coeff_dccv[pt],
 | 
				
			||||||
                                vp6_huff_coeff_map, 12, &s->dccv_vlc[pt]);
 | 
					                                    vp6_huff_coeff_map, 12, &s->dccv_vlc[pt]))
 | 
				
			||||||
            vp6_build_huff_tree(s, model->coeff_runv[pt],
 | 
					                return -1;
 | 
				
			||||||
                                vp6_huff_run_map, 9, &s->runv_vlc[pt]);
 | 
					            if (vp6_build_huff_tree(s, model->coeff_runv[pt],
 | 
				
			||||||
 | 
					                                    vp6_huff_run_map, 9, &s->runv_vlc[pt]))
 | 
				
			||||||
 | 
					                return -1;
 | 
				
			||||||
            for (ct=0; ct<3; ct++)
 | 
					            for (ct=0; ct<3; ct++)
 | 
				
			||||||
                for (cg = 0; cg < 6; cg++)
 | 
					                for (cg = 0; cg < 6; cg++)
 | 
				
			||||||
                    vp6_build_huff_tree(s, model->coeff_ract[pt][ct][cg],
 | 
					                    if (vp6_build_huff_tree(s, model->coeff_ract[pt][ct][cg],
 | 
				
			||||||
                                        vp6_huff_coeff_map, 12,
 | 
					                                            vp6_huff_coeff_map, 12,
 | 
				
			||||||
                                        &s->ract_vlc[pt][ct][cg]);
 | 
					                                            &s->ract_vlc[pt][ct][cg]))
 | 
				
			||||||
 | 
					                        return -1;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        memset(s->nb_null, 0, sizeof(s->nb_null));
 | 
					        memset(s->nb_null, 0, sizeof(s->nb_null));
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
@@ -297,6 +300,7 @@ static void vp6_parse_coeff_models(VP56Context *s)
 | 
				
			|||||||
            for (node=0; node<5; node++)
 | 
					            for (node=0; node<5; node++)
 | 
				
			||||||
                model->coeff_dcct[pt][ctx][node] = av_clip(((model->coeff_dccv[pt][node] * vp6_dccv_lc[ctx][node][0] + 128) >> 8) + vp6_dccv_lc[ctx][node][1], 1, 255);
 | 
					                model->coeff_dcct[pt][ctx][node] = av_clip(((model->coeff_dccv[pt][node] * vp6_dccv_lc[ctx][node][0] + 128) >> 8) + vp6_dccv_lc[ctx][node][1], 1, 255);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void vp6_parse_vector_adjustment(VP56Context *s, VP56mv *vect)
 | 
					static void vp6_parse_vector_adjustment(VP56Context *s, VP56mv *vect)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -292,7 +292,14 @@ static int wv_get_value(WavpackFrameContext *ctx, GetBitContext *gb, int channel
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
        }else{
 | 
					        }else{
 | 
				
			||||||
            t = get_unary_0_33(gb);
 | 
					            t = get_unary_0_33(gb);
 | 
				
			||||||
            if(t >= 2) t = get_bits(gb, t - 1) | (1 << (t-1));
 | 
					            if(t >= 2){
 | 
				
			||||||
 | 
					                if(get_bits_left(gb) < t-1)
 | 
				
			||||||
 | 
					                    goto error;
 | 
				
			||||||
 | 
					                t = get_bits(gb, t - 1) | (1 << (t-1));
 | 
				
			||||||
 | 
					            }else{
 | 
				
			||||||
 | 
					                if(get_bits_left(gb) < 0)
 | 
				
			||||||
 | 
					                    goto error;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
            ctx->zeroes = t;
 | 
					            ctx->zeroes = t;
 | 
				
			||||||
            if(ctx->zeroes){
 | 
					            if(ctx->zeroes){
 | 
				
			||||||
                memset(ctx->ch[0].median, 0, sizeof(ctx->ch[0].median));
 | 
					                memset(ctx->ch[0].median, 0, sizeof(ctx->ch[0].median));
 | 
				
			||||||
@@ -303,24 +310,24 @@ static int wv_get_value(WavpackFrameContext *ctx, GetBitContext *gb, int channel
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if(get_bits_count(gb) >= ctx->data_size){
 | 
					 | 
				
			||||||
        *last = 1;
 | 
					 | 
				
			||||||
        return 0;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if(ctx->zero){
 | 
					    if(ctx->zero){
 | 
				
			||||||
        t = 0;
 | 
					        t = 0;
 | 
				
			||||||
        ctx->zero = 0;
 | 
					        ctx->zero = 0;
 | 
				
			||||||
    }else{
 | 
					    }else{
 | 
				
			||||||
        t = get_unary_0_33(gb);
 | 
					        t = get_unary_0_33(gb);
 | 
				
			||||||
        if(get_bits_count(gb) >= ctx->data_size){
 | 
					        if(get_bits_left(gb) < 0)
 | 
				
			||||||
            *last = 1;
 | 
					            goto error;
 | 
				
			||||||
            return 0;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        if(t == 16) {
 | 
					        if(t == 16) {
 | 
				
			||||||
            t2 = get_unary_0_33(gb);
 | 
					            t2 = get_unary_0_33(gb);
 | 
				
			||||||
            if(t2 < 2) t += t2;
 | 
					            if(t2 < 2){
 | 
				
			||||||
            else t += get_bits(gb, t2 - 1) | (1 << (t2 - 1));
 | 
					                if(get_bits_left(gb) < 0)
 | 
				
			||||||
 | 
					                    goto error;
 | 
				
			||||||
 | 
					                t += t2;
 | 
				
			||||||
 | 
					            }else{
 | 
				
			||||||
 | 
					                if(get_bits_left(gb) < t2 - 1)
 | 
				
			||||||
 | 
					                    goto error;
 | 
				
			||||||
 | 
					                t += get_bits(gb, t2 - 1) | (1 << (t2 - 1));
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if(ctx->one){
 | 
					        if(ctx->one){
 | 
				
			||||||
@@ -360,9 +367,13 @@ static int wv_get_value(WavpackFrameContext *ctx, GetBitContext *gb, int channel
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
    if(!c->error_limit){
 | 
					    if(!c->error_limit){
 | 
				
			||||||
        ret = base + get_tail(gb, add);
 | 
					        ret = base + get_tail(gb, add);
 | 
				
			||||||
 | 
					        if (get_bits_left(gb) <= 0)
 | 
				
			||||||
 | 
					            goto error;
 | 
				
			||||||
    }else{
 | 
					    }else{
 | 
				
			||||||
        int mid = (base*2 + add + 1) >> 1;
 | 
					        int mid = (base*2 + add + 1) >> 1;
 | 
				
			||||||
        while(add > c->error_limit){
 | 
					        while(add > c->error_limit){
 | 
				
			||||||
 | 
					            if(get_bits_left(gb) <= 0)
 | 
				
			||||||
 | 
					                goto error;
 | 
				
			||||||
            if(get_bits1(gb)){
 | 
					            if(get_bits1(gb)){
 | 
				
			||||||
                add -= (mid - base);
 | 
					                add -= (mid - base);
 | 
				
			||||||
                base = mid;
 | 
					                base = mid;
 | 
				
			||||||
@@ -376,6 +387,10 @@ static int wv_get_value(WavpackFrameContext *ctx, GetBitContext *gb, int channel
 | 
				
			|||||||
    if(ctx->hybrid_bitrate)
 | 
					    if(ctx->hybrid_bitrate)
 | 
				
			||||||
        c->slow_level += wp_log2(ret) - LEVEL_DECAY(c->slow_level);
 | 
					        c->slow_level += wp_log2(ret) - LEVEL_DECAY(c->slow_level);
 | 
				
			||||||
    return sign ? ~ret : ret;
 | 
					    return sign ? ~ret : ret;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					error:
 | 
				
			||||||
 | 
					    *last = 1;
 | 
				
			||||||
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static inline int wv_get_value_integer(WavpackFrameContext *s, uint32_t *crc, int S)
 | 
					static inline int wv_get_value_integer(WavpackFrameContext *s, uint32_t *crc, int S)
 | 
				
			||||||
@@ -385,7 +400,7 @@ static inline int wv_get_value_integer(WavpackFrameContext *s, uint32_t *crc, in
 | 
				
			|||||||
    if(s->extra_bits){
 | 
					    if(s->extra_bits){
 | 
				
			||||||
        S <<= s->extra_bits;
 | 
					        S <<= s->extra_bits;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if(s->got_extra_bits){
 | 
					        if(s->got_extra_bits && get_bits_left(&s->gb_extra_bits) >= s->extra_bits){
 | 
				
			||||||
            S |= get_bits(&s->gb_extra_bits, s->extra_bits);
 | 
					            S |= get_bits(&s->gb_extra_bits, s->extra_bits);
 | 
				
			||||||
            *crc = *crc * 9 + (S&0xffff) * 3 + ((unsigned)S>>16);
 | 
					            *crc = *crc * 9 + (S&0xffff) * 3 + ((unsigned)S>>16);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@@ -580,7 +595,10 @@ static inline int wv_unpack_stereo(WavpackFrameContext *s, GetBitContext *gb, vo
 | 
				
			|||||||
        count++;
 | 
					        count++;
 | 
				
			||||||
    }while(!last && count < s->max_samples);
 | 
					    }while(!last && count < s->max_samples);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    s->samples_left -= count;
 | 
					    if (last)
 | 
				
			||||||
 | 
					        s->samples_left = 0;
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					        s->samples_left -= count;
 | 
				
			||||||
    if(!s->samples_left){
 | 
					    if(!s->samples_left){
 | 
				
			||||||
        if(crc != s->CRC){
 | 
					        if(crc != s->CRC){
 | 
				
			||||||
            av_log(s->avctx, AV_LOG_ERROR, "CRC error\n");
 | 
					            av_log(s->avctx, AV_LOG_ERROR, "CRC error\n");
 | 
				
			||||||
@@ -658,7 +676,10 @@ static inline int wv_unpack_mono(WavpackFrameContext *s, GetBitContext *gb, void
 | 
				
			|||||||
        count++;
 | 
					        count++;
 | 
				
			||||||
    }while(!last && count < s->max_samples);
 | 
					    }while(!last && count < s->max_samples);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    s->samples_left -= count;
 | 
					    if (last)
 | 
				
			||||||
 | 
					        s->samples_left = 0;
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					        s->samples_left -= count;
 | 
				
			||||||
    if(!s->samples_left){
 | 
					    if(!s->samples_left){
 | 
				
			||||||
        if(crc != s->CRC){
 | 
					        if(crc != s->CRC){
 | 
				
			||||||
            av_log(s->avctx, AV_LOG_ERROR, "CRC error\n");
 | 
					            av_log(s->avctx, AV_LOG_ERROR, "CRC error\n");
 | 
				
			||||||
@@ -779,7 +800,7 @@ static int wavpack_decode_block(AVCodecContext *avctx, int block_no,
 | 
				
			|||||||
        s->samples = AV_RL32(buf); buf += 4;
 | 
					        s->samples = AV_RL32(buf); buf += 4;
 | 
				
			||||||
        if(!s->samples){
 | 
					        if(!s->samples){
 | 
				
			||||||
            *data_size = 0;
 | 
					            *data_size = 0;
 | 
				
			||||||
            return buf_size;
 | 
					            return 0;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }else{
 | 
					    }else{
 | 
				
			||||||
        s->samples = wc->samples;
 | 
					        s->samples = wc->samples;
 | 
				
			||||||
@@ -841,12 +862,13 @@ static int wavpack_decode_block(AVCodecContext *avctx, int block_no,
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
        switch(id & WP_IDF_MASK){
 | 
					        switch(id & WP_IDF_MASK){
 | 
				
			||||||
        case WP_ID_DECTERMS:
 | 
					        case WP_ID_DECTERMS:
 | 
				
			||||||
            s->terms = size;
 | 
					            if(size > MAX_TERMS){
 | 
				
			||||||
            if(s->terms > MAX_TERMS){
 | 
					 | 
				
			||||||
                av_log(avctx, AV_LOG_ERROR, "Too many decorrelation terms\n");
 | 
					                av_log(avctx, AV_LOG_ERROR, "Too many decorrelation terms\n");
 | 
				
			||||||
 | 
					                s->terms = 0;
 | 
				
			||||||
                buf += ssize;
 | 
					                buf += ssize;
 | 
				
			||||||
                continue;
 | 
					                continue;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					            s->terms = size;
 | 
				
			||||||
            for(i = 0; i < s->terms; i++) {
 | 
					            for(i = 0; i < s->terms; i++) {
 | 
				
			||||||
                s->decorr[s->terms - i - 1].value = (*buf & 0x1F) - 5;
 | 
					                s->decorr[s->terms - i - 1].value = (*buf & 0x1F) - 5;
 | 
				
			||||||
                s->decorr[s->terms - i - 1].delta = *buf >> 5;
 | 
					                s->decorr[s->terms - i - 1].delta = *buf >> 5;
 | 
				
			||||||
@@ -1098,6 +1120,10 @@ static int wavpack_decode_block(AVCodecContext *avctx, int block_no,
 | 
				
			|||||||
            samplecount = wv_unpack_stereo(s, &s->gb, samples, AV_SAMPLE_FMT_S32);
 | 
					            samplecount = wv_unpack_stereo(s, &s->gb, samples, AV_SAMPLE_FMT_S32);
 | 
				
			||||||
        else
 | 
					        else
 | 
				
			||||||
            samplecount = wv_unpack_stereo(s, &s->gb, samples, AV_SAMPLE_FMT_FLT);
 | 
					            samplecount = wv_unpack_stereo(s, &s->gb, samples, AV_SAMPLE_FMT_FLT);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (samplecount < 0)
 | 
				
			||||||
 | 
					            return -1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        samplecount >>= 1;
 | 
					        samplecount >>= 1;
 | 
				
			||||||
    }else{
 | 
					    }else{
 | 
				
			||||||
        const int channel_stride = avctx->channels;
 | 
					        const int channel_stride = avctx->channels;
 | 
				
			||||||
@@ -1109,6 +1135,9 @@ static int wavpack_decode_block(AVCodecContext *avctx, int block_no,
 | 
				
			|||||||
        else
 | 
					        else
 | 
				
			||||||
            samplecount = wv_unpack_mono(s, &s->gb, samples, AV_SAMPLE_FMT_FLT);
 | 
					            samplecount = wv_unpack_mono(s, &s->gb, samples, AV_SAMPLE_FMT_FLT);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (samplecount < 0)
 | 
				
			||||||
 | 
					            return -1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if(s->stereo && avctx->sample_fmt == AV_SAMPLE_FMT_S16){
 | 
					        if(s->stereo && avctx->sample_fmt == AV_SAMPLE_FMT_S16){
 | 
				
			||||||
            int16_t *dst = (int16_t*)samples + 1;
 | 
					            int16_t *dst = (int16_t*)samples + 1;
 | 
				
			||||||
            int16_t *src = (int16_t*)samples;
 | 
					            int16_t *src = (int16_t*)samples;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -97,17 +97,21 @@ static av_cold int xan_decode_init(AVCodecContext *avctx)
 | 
				
			|||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int xan_huffman_decode(unsigned char *dest, const unsigned char *src,
 | 
					static int xan_huffman_decode(unsigned char *dest, int dest_len,
 | 
				
			||||||
    int dest_len)
 | 
					                              const unsigned char *src, int src_len)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    unsigned char byte = *src++;
 | 
					    unsigned char byte = *src++;
 | 
				
			||||||
    unsigned char ival = byte + 0x16;
 | 
					    unsigned char ival = byte + 0x16;
 | 
				
			||||||
    const unsigned char * ptr = src + byte*2;
 | 
					    const unsigned char * ptr = src + byte*2;
 | 
				
			||||||
 | 
					    int ptr_len = src_len - 1 - byte*2;
 | 
				
			||||||
    unsigned char val = ival;
 | 
					    unsigned char val = ival;
 | 
				
			||||||
    unsigned char *dest_end = dest + dest_len;
 | 
					    unsigned char *dest_end = dest + dest_len;
 | 
				
			||||||
    GetBitContext gb;
 | 
					    GetBitContext gb;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    init_get_bits(&gb, ptr, 0); // FIXME: no src size available
 | 
					    if (ptr_len < 0)
 | 
				
			||||||
 | 
					        return AVERROR_INVALIDDATA;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    init_get_bits(&gb, ptr, ptr_len * 8);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    while ( val != 0x16 ) {
 | 
					    while ( val != 0x16 ) {
 | 
				
			||||||
        val = src[val - 0x17 + get_bits1(&gb) * byte];
 | 
					        val = src[val - 0x17 + get_bits1(&gb) * byte];
 | 
				
			||||||
@@ -246,7 +250,7 @@ static inline void xan_wc3_copy_pixel_run(XanContext *s,
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void xan_wc3_decode_frame(XanContext *s) {
 | 
					static int xan_wc3_decode_frame(XanContext *s) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    int width = s->avctx->width;
 | 
					    int width = s->avctx->width;
 | 
				
			||||||
    int height = s->avctx->height;
 | 
					    int height = s->avctx->height;
 | 
				
			||||||
@@ -266,13 +270,30 @@ static void xan_wc3_decode_frame(XanContext *s) {
 | 
				
			|||||||
    const unsigned char *size_segment;
 | 
					    const unsigned char *size_segment;
 | 
				
			||||||
    const unsigned char *vector_segment;
 | 
					    const unsigned char *vector_segment;
 | 
				
			||||||
    const unsigned char *imagedata_segment;
 | 
					    const unsigned char *imagedata_segment;
 | 
				
			||||||
 | 
					    int huffman_offset, size_offset, vector_offset, imagedata_offset;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    huffman_segment =   s->buf + AV_RL16(&s->buf[0]);
 | 
					    if (s->size < 8)
 | 
				
			||||||
    size_segment =      s->buf + AV_RL16(&s->buf[2]);
 | 
					        return AVERROR_INVALIDDATA;
 | 
				
			||||||
    vector_segment =    s->buf + AV_RL16(&s->buf[4]);
 | 
					 | 
				
			||||||
    imagedata_segment = s->buf + AV_RL16(&s->buf[6]);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    xan_huffman_decode(opcode_buffer, huffman_segment, opcode_buffer_size);
 | 
					    huffman_offset    = AV_RL16(&s->buf[0]);
 | 
				
			||||||
 | 
					    size_offset       = AV_RL16(&s->buf[2]);
 | 
				
			||||||
 | 
					    vector_offset     = AV_RL16(&s->buf[4]);
 | 
				
			||||||
 | 
					    imagedata_offset  = AV_RL16(&s->buf[6]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (huffman_offset   >= s->size ||
 | 
				
			||||||
 | 
					        size_offset      >= s->size ||
 | 
				
			||||||
 | 
					        vector_offset    >= s->size ||
 | 
				
			||||||
 | 
					        imagedata_offset >= s->size)
 | 
				
			||||||
 | 
					        return AVERROR_INVALIDDATA;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    huffman_segment   = s->buf + huffman_offset;
 | 
				
			||||||
 | 
					    size_segment      = s->buf + size_offset;
 | 
				
			||||||
 | 
					    vector_segment    = s->buf + vector_offset;
 | 
				
			||||||
 | 
					    imagedata_segment = s->buf + imagedata_offset;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (xan_huffman_decode(opcode_buffer, opcode_buffer_size,
 | 
				
			||||||
 | 
					                           huffman_segment, s->size - huffman_offset) < 0)
 | 
				
			||||||
 | 
					        return AVERROR_INVALIDDATA;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (imagedata_segment[0] == 2)
 | 
					    if (imagedata_segment[0] == 2)
 | 
				
			||||||
        xan_unpack(s->buffer2, &imagedata_segment[1], s->buffer2_size);
 | 
					        xan_unpack(s->buffer2, &imagedata_segment[1], s->buffer2_size);
 | 
				
			||||||
@@ -358,6 +379,7 @@ static void xan_wc3_decode_frame(XanContext *s) {
 | 
				
			|||||||
        y += (x + size) / width;
 | 
					        y += (x + size) / width;
 | 
				
			||||||
        x  = (x + size) % width;
 | 
					        x  = (x + size) % width;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if RUNTIME_GAMMA
 | 
					#if RUNTIME_GAMMA
 | 
				
			||||||
@@ -519,7 +541,8 @@ static int xan_decode_frame(AVCodecContext *avctx,
 | 
				
			|||||||
    s->buf = buf;
 | 
					    s->buf = buf;
 | 
				
			||||||
    s->size = buf_size;
 | 
					    s->size = buf_size;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    xan_wc3_decode_frame(s);
 | 
					    if (xan_wc3_decode_frame(s) < 0)
 | 
				
			||||||
 | 
					        return AVERROR_INVALIDDATA;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* release the last frame if it is allocated */
 | 
					    /* release the last frame if it is allocated */
 | 
				
			||||||
    if (s->last_frame.data[0])
 | 
					    if (s->last_frame.data[0])
 | 
				
			||||||
@@ -564,4 +587,3 @@ AVCodec ff_xan_wc3_decoder = {
 | 
				
			|||||||
    CODEC_CAP_DR1,
 | 
					    CODEC_CAP_DR1,
 | 
				
			||||||
    .long_name = NULL_IF_CONFIG_SMALL("Wing Commander III / Xan"),
 | 
					    .long_name = NULL_IF_CONFIG_SMALL("Wing Commander III / Xan"),
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -245,6 +245,7 @@ av_cold int ff_alsa_open(AVFormatContext *ctx, snd_pcm_stream_t mode,
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    snd_pcm_hw_params_get_buffer_size_max(hw_params, &buffer_size);
 | 
					    snd_pcm_hw_params_get_buffer_size_max(hw_params, &buffer_size);
 | 
				
			||||||
 | 
					    buffer_size = FFMIN(buffer_size, ALSA_BUFFER_SIZE_MAX);
 | 
				
			||||||
    /* TODO: maybe use ctx->max_picture_buffer somehow */
 | 
					    /* TODO: maybe use ctx->max_picture_buffer somehow */
 | 
				
			||||||
    res = snd_pcm_hw_params_set_buffer_size_near(h, hw_params, &buffer_size);
 | 
					    res = snd_pcm_hw_params_set_buffer_size_near(h, hw_params, &buffer_size);
 | 
				
			||||||
    if (res < 0) {
 | 
					    if (res < 0) {
 | 
				
			||||||
@@ -254,6 +255,8 @@ av_cold int ff_alsa_open(AVFormatContext *ctx, snd_pcm_stream_t mode,
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    snd_pcm_hw_params_get_period_size_min(hw_params, &period_size, NULL);
 | 
					    snd_pcm_hw_params_get_period_size_min(hw_params, &period_size, NULL);
 | 
				
			||||||
 | 
					    if (!period_size)
 | 
				
			||||||
 | 
					        period_size = buffer_size / 4;
 | 
				
			||||||
    res = snd_pcm_hw_params_set_period_size_near(h, hw_params, &period_size, NULL);
 | 
					    res = snd_pcm_hw_params_set_period_size_near(h, hw_params, &period_size, NULL);
 | 
				
			||||||
    if (res < 0) {
 | 
					    if (res < 0) {
 | 
				
			||||||
        av_log(ctx, AV_LOG_ERROR, "cannot set ALSA period size (%s)\n",
 | 
					        av_log(ctx, AV_LOG_ERROR, "cannot set ALSA period size (%s)\n",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -42,6 +42,8 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
typedef void (*ff_reorder_func)(const void *, void *, int);
 | 
					typedef void (*ff_reorder_func)(const void *, void *, int);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define ALSA_BUFFER_SIZE_MAX 65536
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef struct {
 | 
					typedef struct {
 | 
				
			||||||
    AVClass *class;
 | 
					    AVClass *class;
 | 
				
			||||||
    snd_pcm_t *h;
 | 
					    snd_pcm_t *h;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -242,7 +242,7 @@ static int vfw_read_header(AVFormatContext *s, AVFormatParameters *ap)
 | 
				
			|||||||
    AVStream *st;
 | 
					    AVStream *st;
 | 
				
			||||||
    int devnum;
 | 
					    int devnum;
 | 
				
			||||||
    int bisize;
 | 
					    int bisize;
 | 
				
			||||||
    BITMAPINFO *bi;
 | 
					    BITMAPINFO *bi = NULL;
 | 
				
			||||||
    CAPTUREPARMS cparms;
 | 
					    CAPTUREPARMS cparms;
 | 
				
			||||||
    DWORD biCompression;
 | 
					    DWORD biCompression;
 | 
				
			||||||
    WORD biBitCount;
 | 
					    WORD biBitCount;
 | 
				
			||||||
@@ -293,7 +293,7 @@ static int vfw_read_header(AVFormatContext *s, AVFormatParameters *ap)
 | 
				
			|||||||
                      (LPARAM) videostream_cb);
 | 
					                      (LPARAM) videostream_cb);
 | 
				
			||||||
    if(!ret) {
 | 
					    if(!ret) {
 | 
				
			||||||
        av_log(s, AV_LOG_ERROR, "Could not set video stream callback.\n");
 | 
					        av_log(s, AV_LOG_ERROR, "Could not set video stream callback.\n");
 | 
				
			||||||
        goto fail_io;
 | 
					        goto fail;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    SetWindowLongPtr(ctx->hwnd, GWLP_USERDATA, (LONG_PTR) s);
 | 
					    SetWindowLongPtr(ctx->hwnd, GWLP_USERDATA, (LONG_PTR) s);
 | 
				
			||||||
@@ -307,7 +307,7 @@ static int vfw_read_header(AVFormatContext *s, AVFormatParameters *ap)
 | 
				
			|||||||
    /* Set video format */
 | 
					    /* Set video format */
 | 
				
			||||||
    bisize = SendMessage(ctx->hwnd, WM_CAP_GET_VIDEOFORMAT, 0, 0);
 | 
					    bisize = SendMessage(ctx->hwnd, WM_CAP_GET_VIDEOFORMAT, 0, 0);
 | 
				
			||||||
    if(!bisize)
 | 
					    if(!bisize)
 | 
				
			||||||
        goto fail_io;
 | 
					        goto fail;
 | 
				
			||||||
    bi = av_malloc(bisize);
 | 
					    bi = av_malloc(bisize);
 | 
				
			||||||
    if(!bi) {
 | 
					    if(!bi) {
 | 
				
			||||||
        vfw_read_close(s);
 | 
					        vfw_read_close(s);
 | 
				
			||||||
@@ -315,7 +315,7 @@ static int vfw_read_header(AVFormatContext *s, AVFormatParameters *ap)
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
    ret = SendMessage(ctx->hwnd, WM_CAP_GET_VIDEOFORMAT, bisize, (LPARAM) bi);
 | 
					    ret = SendMessage(ctx->hwnd, WM_CAP_GET_VIDEOFORMAT, bisize, (LPARAM) bi);
 | 
				
			||||||
    if(!ret)
 | 
					    if(!ret)
 | 
				
			||||||
        goto fail_bi;
 | 
					        goto fail;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    dump_bih(s, &bi->bmiHeader);
 | 
					    dump_bih(s, &bi->bmiHeader);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -324,7 +324,7 @@ static int vfw_read_header(AVFormatContext *s, AVFormatParameters *ap)
 | 
				
			|||||||
        ret = av_parse_video_size(&bi->bmiHeader.biWidth, &bi->bmiHeader.biHeight, ctx->video_size);
 | 
					        ret = av_parse_video_size(&bi->bmiHeader.biWidth, &bi->bmiHeader.biHeight, ctx->video_size);
 | 
				
			||||||
        if (ret < 0) {
 | 
					        if (ret < 0) {
 | 
				
			||||||
            av_log(s, AV_LOG_ERROR, "Couldn't parse video size.\n");
 | 
					            av_log(s, AV_LOG_ERROR, "Couldn't parse video size.\n");
 | 
				
			||||||
            goto fail_bi;
 | 
					            goto fail;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
#if FF_API_FORMAT_PARAMETERS
 | 
					#if FF_API_FORMAT_PARAMETERS
 | 
				
			||||||
@@ -349,19 +349,17 @@ static int vfw_read_header(AVFormatContext *s, AVFormatParameters *ap)
 | 
				
			|||||||
    ret = SendMessage(ctx->hwnd, WM_CAP_SET_VIDEOFORMAT, bisize, (LPARAM) bi);
 | 
					    ret = SendMessage(ctx->hwnd, WM_CAP_SET_VIDEOFORMAT, bisize, (LPARAM) bi);
 | 
				
			||||||
    if(!ret) {
 | 
					    if(!ret) {
 | 
				
			||||||
        av_log(s, AV_LOG_ERROR, "Could not set Video Format.\n");
 | 
					        av_log(s, AV_LOG_ERROR, "Could not set Video Format.\n");
 | 
				
			||||||
        goto fail_bi;
 | 
					        goto fail;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    biCompression = bi->bmiHeader.biCompression;
 | 
					    biCompression = bi->bmiHeader.biCompression;
 | 
				
			||||||
    biBitCount = bi->bmiHeader.biBitCount;
 | 
					    biBitCount = bi->bmiHeader.biBitCount;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    av_free(bi);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /* Set sequence setup */
 | 
					    /* Set sequence setup */
 | 
				
			||||||
    ret = SendMessage(ctx->hwnd, WM_CAP_GET_SEQUENCE_SETUP, sizeof(cparms),
 | 
					    ret = SendMessage(ctx->hwnd, WM_CAP_GET_SEQUENCE_SETUP, sizeof(cparms),
 | 
				
			||||||
                      (LPARAM) &cparms);
 | 
					                      (LPARAM) &cparms);
 | 
				
			||||||
    if(!ret)
 | 
					    if(!ret)
 | 
				
			||||||
        goto fail_io;
 | 
					        goto fail;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    dump_captureparms(s, &cparms);
 | 
					    dump_captureparms(s, &cparms);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -376,7 +374,7 @@ static int vfw_read_header(AVFormatContext *s, AVFormatParameters *ap)
 | 
				
			|||||||
    ret = SendMessage(ctx->hwnd, WM_CAP_SET_SEQUENCE_SETUP, sizeof(cparms),
 | 
					    ret = SendMessage(ctx->hwnd, WM_CAP_SET_SEQUENCE_SETUP, sizeof(cparms),
 | 
				
			||||||
                      (LPARAM) &cparms);
 | 
					                      (LPARAM) &cparms);
 | 
				
			||||||
    if(!ret)
 | 
					    if(!ret)
 | 
				
			||||||
        goto fail_io;
 | 
					        goto fail;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    codec = st->codec;
 | 
					    codec = st->codec;
 | 
				
			||||||
    codec->time_base = (AVRational){fps.den, fps.num};
 | 
					    codec->time_base = (AVRational){fps.den, fps.num};
 | 
				
			||||||
@@ -405,31 +403,31 @@ static int vfw_read_header(AVFormatContext *s, AVFormatParameters *ap)
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    av_freep(&bi);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    av_set_pts_info(st, 32, 1, 1000);
 | 
					    av_set_pts_info(st, 32, 1, 1000);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ctx->mutex = CreateMutex(NULL, 0, NULL);
 | 
					    ctx->mutex = CreateMutex(NULL, 0, NULL);
 | 
				
			||||||
    if(!ctx->mutex) {
 | 
					    if(!ctx->mutex) {
 | 
				
			||||||
        av_log(s, AV_LOG_ERROR, "Could not create Mutex.\n" );
 | 
					        av_log(s, AV_LOG_ERROR, "Could not create Mutex.\n" );
 | 
				
			||||||
        goto fail_io;
 | 
					        goto fail;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    ctx->event = CreateEvent(NULL, 1, 0, NULL);
 | 
					    ctx->event = CreateEvent(NULL, 1, 0, NULL);
 | 
				
			||||||
    if(!ctx->event) {
 | 
					    if(!ctx->event) {
 | 
				
			||||||
        av_log(s, AV_LOG_ERROR, "Could not create Event.\n" );
 | 
					        av_log(s, AV_LOG_ERROR, "Could not create Event.\n" );
 | 
				
			||||||
        goto fail_io;
 | 
					        goto fail;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ret = SendMessage(ctx->hwnd, WM_CAP_SEQUENCE_NOFILE, 0, 0);
 | 
					    ret = SendMessage(ctx->hwnd, WM_CAP_SEQUENCE_NOFILE, 0, 0);
 | 
				
			||||||
    if(!ret) {
 | 
					    if(!ret) {
 | 
				
			||||||
        av_log(s, AV_LOG_ERROR, "Could not start capture sequence.\n" );
 | 
					        av_log(s, AV_LOG_ERROR, "Could not start capture sequence.\n" );
 | 
				
			||||||
        goto fail_io;
 | 
					        goto fail;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fail_bi:
 | 
					fail:
 | 
				
			||||||
    av_free(bi);
 | 
					    av_freep(&bi);
 | 
				
			||||||
 | 
					 | 
				
			||||||
fail_io:
 | 
					 | 
				
			||||||
    vfw_read_close(s);
 | 
					    vfw_read_close(s);
 | 
				
			||||||
    return AVERROR(EIO);
 | 
					    return AVERROR(EIO);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -671,7 +671,7 @@ static pgm_structure * generate_half_size_image(vf_instance_t * vf, pgm_structur
 | 
				
			|||||||
 * \brief Checks if YV12 is supported by the next filter.
 | 
					 * \brief Checks if YV12 is supported by the next filter.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
static unsigned int find_best(struct vf_instance *vf){
 | 
					static unsigned int find_best(struct vf_instance *vf){
 | 
				
			||||||
  int is_format_okay = vf->next->query_format(vf->next, IMGFMT_YV12);
 | 
					  int is_format_okay = vf_next_query_format(vf, IMGFMT_YV12);
 | 
				
			||||||
  if ((is_format_okay & VFCAP_CSP_SUPPORTED_BY_HW) || (is_format_okay & VFCAP_CSP_SUPPORTED))
 | 
					  if ((is_format_okay & VFCAP_CSP_SUPPORTED_BY_HW) || (is_format_okay & VFCAP_CSP_SUPPORTED))
 | 
				
			||||||
    return IMGFMT_YV12;
 | 
					    return IMGFMT_YV12;
 | 
				
			||||||
  else
 | 
					  else
 | 
				
			||||||
@@ -814,7 +814,7 @@ static int put_image(struct vf_instance *vf, mp_image_t *mpi, double pts){
 | 
				
			|||||||
static int query_format(struct vf_instance *vf, unsigned int fmt)
 | 
					static int query_format(struct vf_instance *vf, unsigned int fmt)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  if (fmt == IMGFMT_YV12)
 | 
					  if (fmt == IMGFMT_YV12)
 | 
				
			||||||
    return vf->next->query_format(vf->next, IMGFMT_YV12);
 | 
					    return vf_next_query_format(vf, IMGFMT_YV12);
 | 
				
			||||||
  else
 | 
					  else
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -59,6 +59,10 @@ int ff_adts_decode_extradata(AVFormatContext *s, ADTSContext *adts, uint8_t *buf
 | 
				
			|||||||
        av_log(s, AV_LOG_ERROR, "Scalable configurations are not allowed in ADTS\n");
 | 
					        av_log(s, AV_LOG_ERROR, "Scalable configurations are not allowed in ADTS\n");
 | 
				
			||||||
        return -1;
 | 
					        return -1;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    if (get_bits(&gb, 1)) {
 | 
				
			||||||
 | 
					        av_log(s, AV_LOG_ERROR, "Extension flag is not allowed in ADTS\n");
 | 
				
			||||||
 | 
					        return -1;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
    if (!adts->channel_conf) {
 | 
					    if (!adts->channel_conf) {
 | 
				
			||||||
        init_put_bits(&pb, adts->pce_data, MAX_PCE_SIZE);
 | 
					        init_put_bits(&pb, adts->pce_data, MAX_PCE_SIZE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -270,6 +270,8 @@ static int ape_read_header(AVFormatContext * s, AVFormatParameters * ap)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    if (ape->seektablelength > 0) {
 | 
					    if (ape->seektablelength > 0) {
 | 
				
			||||||
        ape->seektable = av_malloc(ape->seektablelength);
 | 
					        ape->seektable = av_malloc(ape->seektablelength);
 | 
				
			||||||
 | 
					        if (!ape->seektable)
 | 
				
			||||||
 | 
					            return AVERROR(ENOMEM);
 | 
				
			||||||
        for (i = 0; i < ape->seektablelength / sizeof(uint32_t); i++)
 | 
					        for (i = 0; i < ape->seektablelength / sizeof(uint32_t); i++)
 | 
				
			||||||
            ape->seektable[i] = avio_rl32(pb);
 | 
					            ape->seektable[i] = avio_rl32(pb);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1154,7 +1154,8 @@ static int64_t asf_read_pts(AVFormatContext *s, int stream_index, int64_t *ppos,
 | 
				
			|||||||
    if (s->packet_size > 0)
 | 
					    if (s->packet_size > 0)
 | 
				
			||||||
        pos= (pos+s->packet_size-1-s->data_offset)/s->packet_size*s->packet_size+ s->data_offset;
 | 
					        pos= (pos+s->packet_size-1-s->data_offset)/s->packet_size*s->packet_size+ s->data_offset;
 | 
				
			||||||
    *ppos= pos;
 | 
					    *ppos= pos;
 | 
				
			||||||
    avio_seek(s->pb, pos, SEEK_SET);
 | 
					    if (avio_seek(s->pb, pos, SEEK_SET) < 0)
 | 
				
			||||||
 | 
					        return AV_NOPTS_VALUE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//printf("asf_read_pts\n");
 | 
					//printf("asf_read_pts\n");
 | 
				
			||||||
    asf_reset_header(s);
 | 
					    asf_reset_header(s);
 | 
				
			||||||
@@ -1196,7 +1197,9 @@ static void asf_build_simple_index(AVFormatContext *s, int stream_index)
 | 
				
			|||||||
    int64_t current_pos= avio_tell(s->pb);
 | 
					    int64_t current_pos= avio_tell(s->pb);
 | 
				
			||||||
    int i;
 | 
					    int i;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    avio_seek(s->pb, asf->data_object_offset + asf->data_object_size, SEEK_SET);
 | 
					    if(avio_seek(s->pb, asf->data_object_offset + asf->data_object_size, SEEK_SET) < 0)
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ff_get_guid(s->pb, &g);
 | 
					    ff_get_guid(s->pb, &g);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* the data object can be followed by other top-level objects,
 | 
					    /* the data object can be followed by other top-level objects,
 | 
				
			||||||
@@ -1268,7 +1271,8 @@ static int asf_read_seek(AVFormatContext *s, int stream_index, int64_t pts, int
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            /* do the seek */
 | 
					            /* do the seek */
 | 
				
			||||||
            av_log(s, AV_LOG_DEBUG, "SEEKTO: %"PRId64"\n", pos);
 | 
					            av_log(s, AV_LOG_DEBUG, "SEEKTO: %"PRId64"\n", pos);
 | 
				
			||||||
            avio_seek(s->pb, pos, SEEK_SET);
 | 
					            if(avio_seek(s->pb, pos, SEEK_SET) < 0)
 | 
				
			||||||
 | 
					                return -1;
 | 
				
			||||||
            asf_reset_header(s);
 | 
					            asf_reset_header(s);
 | 
				
			||||||
            return 0;
 | 
					            return 0;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -220,13 +220,18 @@ static int read_braindead_odml_indx(AVFormatContext *s, int frame_num){
 | 
				
			|||||||
                return -1;
 | 
					                return -1;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            avio_seek(pb, offset+8, SEEK_SET);
 | 
					            if(avio_seek(pb, offset+8, SEEK_SET) < 0)
 | 
				
			||||||
 | 
					                return -1;
 | 
				
			||||||
            avi->odml_depth++;
 | 
					            avi->odml_depth++;
 | 
				
			||||||
            read_braindead_odml_indx(s, frame_num);
 | 
					            read_braindead_odml_indx(s, frame_num);
 | 
				
			||||||
            avi->odml_depth--;
 | 
					            avi->odml_depth--;
 | 
				
			||||||
            frame_num += duration;
 | 
					            frame_num += duration;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            avio_seek(pb, pos, SEEK_SET);
 | 
					            if(avio_seek(pb, pos, SEEK_SET) < 0) {
 | 
				
			||||||
 | 
					                av_log(s, AV_LOG_ERROR, "Failed to restore position after reading index");
 | 
				
			||||||
 | 
					                return -1;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    avi->index_loaded=1;
 | 
					    avi->index_loaded=1;
 | 
				
			||||||
@@ -1322,11 +1327,13 @@ static int avi_read_seek(AVFormatContext *s, int stream_index, int64_t timestamp
 | 
				
			|||||||
        /* the av_index_search_timestamp call above.                     */
 | 
					        /* the av_index_search_timestamp call above.                     */
 | 
				
			||||||
        assert(stream_index == 0);
 | 
					        assert(stream_index == 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if(avio_seek(s->pb, pos, SEEK_SET) < 0)
 | 
				
			||||||
 | 
					            return -1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /* Feed the DV video stream version of the timestamp to the */
 | 
					        /* Feed the DV video stream version of the timestamp to the */
 | 
				
			||||||
        /* DV demux so it can synthesize correct timestamps.        */
 | 
					        /* DV demux so it can synthesize correct timestamps.        */
 | 
				
			||||||
        dv_offset_reset(avi->dv_demux, timestamp);
 | 
					        dv_offset_reset(avi->dv_demux, timestamp);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        avio_seek(s->pb, pos, SEEK_SET);
 | 
					 | 
				
			||||||
        avi->stream_index= -1;
 | 
					        avi->stream_index= -1;
 | 
				
			||||||
        return 0;
 | 
					        return 0;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -1377,7 +1384,8 @@ static int avi_read_seek(AVFormatContext *s, int stream_index, int64_t timestamp
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* do the seek */
 | 
					    /* do the seek */
 | 
				
			||||||
    avio_seek(s->pb, pos_min, SEEK_SET);
 | 
					    if (avio_seek(s->pb, pos_min, SEEK_SET) < 0)
 | 
				
			||||||
 | 
					        return -1;
 | 
				
			||||||
    avi->stream_index= -1;
 | 
					    avi->stream_index= -1;
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -122,6 +122,14 @@ static int avisynth_read_header(AVFormatContext *s, AVFormatParameters *ap)
 | 
				
			|||||||
                  st->codec->bit_rate = (uint64_t)stream->info.dwSampleSize * (uint64_t)stream->info.dwRate * 8 / (uint64_t)stream->info.dwScale;
 | 
					                  st->codec->bit_rate = (uint64_t)stream->info.dwSampleSize * (uint64_t)stream->info.dwRate * 8 / (uint64_t)stream->info.dwScale;
 | 
				
			||||||
                  st->codec->codec_tag = imgfmt.bmiHeader.biCompression;
 | 
					                  st->codec->codec_tag = imgfmt.bmiHeader.biCompression;
 | 
				
			||||||
                  st->codec->codec_id = ff_codec_get_id(ff_codec_bmp_tags, imgfmt.bmiHeader.biCompression);
 | 
					                  st->codec->codec_id = ff_codec_get_id(ff_codec_bmp_tags, imgfmt.bmiHeader.biCompression);
 | 
				
			||||||
 | 
					                  if (st->codec->codec_id == CODEC_ID_RAWVIDEO && imgfmt.bmiHeader.biCompression== BI_RGB) {
 | 
				
			||||||
 | 
					                    st->codec->extradata = av_malloc(9 + FF_INPUT_BUFFER_PADDING_SIZE);
 | 
				
			||||||
 | 
					                    if (st->codec->extradata) {
 | 
				
			||||||
 | 
					                      st->codec->extradata_size = 9;
 | 
				
			||||||
 | 
					                      memcpy(st->codec->extradata, "BottomUp", 9);
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                  st->duration = stream->info.dwLength;
 | 
					                  st->duration = stream->info.dwLength;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
@@ -165,7 +173,6 @@ static int avisynth_read_packet(AVFormatContext *s, AVPacket *pkt)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  res = AVIStreamRead(stream->handle, stream->read, stream->chunck_samples, pkt->data, stream->chunck_size, &read_size, NULL);
 | 
					  res = AVIStreamRead(stream->handle, stream->read, stream->chunck_samples, pkt->data, stream->chunck_size, &read_size, NULL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  pkt->pts = stream->read;
 | 
					 | 
				
			||||||
  pkt->size = read_size;
 | 
					  pkt->size = read_size;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  stream->read += stream->chunck_samples;
 | 
					  stream->read += stream->chunck_samples;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -20,6 +20,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#include "avlanguage.h"
 | 
					#include "avlanguage.h"
 | 
				
			||||||
#include "libavutil/avstring.h"
 | 
					#include "libavutil/avstring.h"
 | 
				
			||||||
 | 
					#include "libavutil/common.h"
 | 
				
			||||||
#include <stdlib.h>
 | 
					#include <stdlib.h>
 | 
				
			||||||
#include <stdint.h>
 | 
					#include <stdint.h>
 | 
				
			||||||
#include <string.h>
 | 
					#include <string.h>
 | 
				
			||||||
@@ -736,7 +737,7 @@ const char *av_convert_lang_to(const char *lang, enum AVLangCodespace target_cod
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    int i;
 | 
					    int i;
 | 
				
			||||||
    const LangEntry *entry = NULL;
 | 
					    const LangEntry *entry = NULL;
 | 
				
			||||||
    const int NB_CODESPACES = sizeof(lang_table_counts)/sizeof(*lang_table_counts);
 | 
					    const int NB_CODESPACES = FF_ARRAY_ELEMS(lang_table_counts);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (target_codespace >= NB_CODESPACES)
 | 
					    if (target_codespace >= NB_CODESPACES)
 | 
				
			||||||
        return NULL;
 | 
					        return NULL;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -269,6 +269,10 @@ static int amf_parse_object(AVFormatContext *s, AVStream *astream, AVStream *vst
 | 
				
			|||||||
                vcodec->bit_rate = num_val * 1024.0;
 | 
					                vcodec->bit_rate = num_val * 1024.0;
 | 
				
			||||||
            else if(!strcmp(key, "audiodatarate") && acodec && 0 <= (int)(num_val * 1024.0))
 | 
					            else if(!strcmp(key, "audiodatarate") && acodec && 0 <= (int)(num_val * 1024.0))
 | 
				
			||||||
                acodec->bit_rate = num_val * 1024.0;
 | 
					                acodec->bit_rate = num_val * 1024.0;
 | 
				
			||||||
 | 
					        } else if(amf_type == AMF_DATA_TYPE_OBJECT){
 | 
				
			||||||
 | 
					            if(s->nb_streams==1 && ((!acodec && !strcmp(key, "audiocodecid")) || (!vcodec && !strcmp(key, "videocodecid")))){
 | 
				
			||||||
 | 
					                s->ctx_flags &= ~AVFMTCTX_NOHEADER; //If there is either audio/video missing, codecid will be an empty object
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        } else if (amf_type == AMF_DATA_TYPE_STRING)
 | 
					        } else if (amf_type == AMF_DATA_TYPE_STRING)
 | 
				
			||||||
            av_dict_set(&s->metadata, key, str_val, 0);
 | 
					            av_dict_set(&s->metadata, key, str_val, 0);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -179,7 +179,7 @@ static int flv_write_header(AVFormatContext *s)
 | 
				
			|||||||
    AVCodecContext *audio_enc = NULL, *video_enc = NULL;
 | 
					    AVCodecContext *audio_enc = NULL, *video_enc = NULL;
 | 
				
			||||||
    int i;
 | 
					    int i;
 | 
				
			||||||
    double framerate = 0.0;
 | 
					    double framerate = 0.0;
 | 
				
			||||||
    int metadata_size_pos, data_size;
 | 
					    int64_t metadata_size_pos, data_size;
 | 
				
			||||||
    AVDictionaryEntry *tag = NULL;
 | 
					    AVDictionaryEntry *tag = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for(i=0; i<s->nb_streams; i++){
 | 
					    for(i=0; i<s->nb_streams; i++){
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -264,7 +264,7 @@ static int gxf_header(AVFormatContext *s, AVFormatParameters *ap) {
 | 
				
			|||||||
    int map_len;
 | 
					    int map_len;
 | 
				
			||||||
    int len;
 | 
					    int len;
 | 
				
			||||||
    AVRational main_timebase = {0, 0};
 | 
					    AVRational main_timebase = {0, 0};
 | 
				
			||||||
    struct gxf_stream_info si;
 | 
					    struct gxf_stream_info *si = s->priv_data;
 | 
				
			||||||
    int i;
 | 
					    int i;
 | 
				
			||||||
    if (!parse_packet_header(pb, &pkt_type, &map_len) || pkt_type != PKT_MAP) {
 | 
					    if (!parse_packet_header(pb, &pkt_type, &map_len) || pkt_type != PKT_MAP) {
 | 
				
			||||||
        av_log(s, AV_LOG_ERROR, "map packet not found\n");
 | 
					        av_log(s, AV_LOG_ERROR, "map packet not found\n");
 | 
				
			||||||
@@ -282,7 +282,7 @@ static int gxf_header(AVFormatContext *s, AVFormatParameters *ap) {
 | 
				
			|||||||
        return 0;
 | 
					        return 0;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    map_len -= len;
 | 
					    map_len -= len;
 | 
				
			||||||
    gxf_material_tags(pb, &len, &si);
 | 
					    gxf_material_tags(pb, &len, si);
 | 
				
			||||||
    avio_skip(pb, len);
 | 
					    avio_skip(pb, len);
 | 
				
			||||||
    map_len -= 2;
 | 
					    map_len -= 2;
 | 
				
			||||||
    len = avio_rb16(pb); // length of track description
 | 
					    len = avio_rb16(pb); // length of track description
 | 
				
			||||||
@@ -300,7 +300,7 @@ static int gxf_header(AVFormatContext *s, AVFormatParameters *ap) {
 | 
				
			|||||||
        track_id = avio_r8(pb);
 | 
					        track_id = avio_r8(pb);
 | 
				
			||||||
        track_len = avio_rb16(pb);
 | 
					        track_len = avio_rb16(pb);
 | 
				
			||||||
        len -= track_len;
 | 
					        len -= track_len;
 | 
				
			||||||
        gxf_track_tags(pb, &track_len, &si);
 | 
					        gxf_track_tags(pb, &track_len, si);
 | 
				
			||||||
        avio_skip(pb, track_len);
 | 
					        avio_skip(pb, track_len);
 | 
				
			||||||
        if (!(track_type & 0x80)) {
 | 
					        if (!(track_type & 0x80)) {
 | 
				
			||||||
           av_log(s, AV_LOG_ERROR, "invalid track type %x\n", track_type);
 | 
					           av_log(s, AV_LOG_ERROR, "invalid track type %x\n", track_type);
 | 
				
			||||||
@@ -316,12 +316,12 @@ static int gxf_header(AVFormatContext *s, AVFormatParameters *ap) {
 | 
				
			|||||||
        if (idx < 0) continue;
 | 
					        if (idx < 0) continue;
 | 
				
			||||||
        st = s->streams[idx];
 | 
					        st = s->streams[idx];
 | 
				
			||||||
        if (!main_timebase.num || !main_timebase.den) {
 | 
					        if (!main_timebase.num || !main_timebase.den) {
 | 
				
			||||||
            main_timebase.num = si.frames_per_second.den;
 | 
					            main_timebase.num = si->frames_per_second.den;
 | 
				
			||||||
            main_timebase.den = si.frames_per_second.num * 2;
 | 
					            main_timebase.den = si->frames_per_second.num * 2;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        st->start_time = si.first_field;
 | 
					        st->start_time = si->first_field;
 | 
				
			||||||
        if (si.first_field != AV_NOPTS_VALUE && si.last_field != AV_NOPTS_VALUE)
 | 
					        if (si->first_field != AV_NOPTS_VALUE && si->last_field != AV_NOPTS_VALUE)
 | 
				
			||||||
            st->duration = si.last_field - si.first_field;
 | 
					            st->duration = si->last_field - si->first_field;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if (len < 0)
 | 
					    if (len < 0)
 | 
				
			||||||
        av_log(s, AV_LOG_ERROR, "invalid track description length specified\n");
 | 
					        av_log(s, AV_LOG_ERROR, "invalid track description length specified\n");
 | 
				
			||||||
@@ -422,6 +422,8 @@ static int gxf_packet(AVFormatContext *s, AVPacket *pkt) {
 | 
				
			|||||||
    AVIOContext *pb = s->pb;
 | 
					    AVIOContext *pb = s->pb;
 | 
				
			||||||
    GXFPktType pkt_type;
 | 
					    GXFPktType pkt_type;
 | 
				
			||||||
    int pkt_len;
 | 
					    int pkt_len;
 | 
				
			||||||
 | 
					    struct gxf_stream_info *si = s->priv_data;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    while (!url_feof(pb)) {
 | 
					    while (!url_feof(pb)) {
 | 
				
			||||||
        AVStream *st;
 | 
					        AVStream *st;
 | 
				
			||||||
        int track_type, track_id, ret;
 | 
					        int track_type, track_id, ret;
 | 
				
			||||||
@@ -473,6 +475,11 @@ static int gxf_packet(AVFormatContext *s, AVPacket *pkt) {
 | 
				
			|||||||
            avio_skip(pb, skip);
 | 
					            avio_skip(pb, skip);
 | 
				
			||||||
        pkt->stream_index = stream_index;
 | 
					        pkt->stream_index = stream_index;
 | 
				
			||||||
        pkt->dts = field_nr;
 | 
					        pkt->dts = field_nr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        //set duration manually for DV or else lavf misdetects the frame rate
 | 
				
			||||||
 | 
					        if (st->codec->codec_id == CODEC_ID_DVVIDEO)
 | 
				
			||||||
 | 
					            pkt->duration = si->fields_per_frame;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return ret;
 | 
					        return ret;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    return AVERROR(EIO);
 | 
					    return AVERROR(EIO);
 | 
				
			||||||
@@ -518,7 +525,7 @@ static int64_t gxf_read_timestamp(AVFormatContext *s, int stream_index,
 | 
				
			|||||||
AVInputFormat ff_gxf_demuxer = {
 | 
					AVInputFormat ff_gxf_demuxer = {
 | 
				
			||||||
    "gxf",
 | 
					    "gxf",
 | 
				
			||||||
    NULL_IF_CONFIG_SMALL("GXF format"),
 | 
					    NULL_IF_CONFIG_SMALL("GXF format"),
 | 
				
			||||||
    0,
 | 
					    sizeof(struct gxf_stream_info),
 | 
				
			||||||
    gxf_probe,
 | 
					    gxf_probe,
 | 
				
			||||||
    gxf_header,
 | 
					    gxf_header,
 | 
				
			||||||
    gxf_packet,
 | 
					    gxf_packet,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -265,6 +265,8 @@ static int process_line(URLContext *h, char *line, int line_count,
 | 
				
			|||||||
                    s->filesize = atoll(slash+1);
 | 
					                    s->filesize = atoll(slash+1);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            h->is_streamed = 0; /* we _can_ in fact seek */
 | 
					            h->is_streamed = 0; /* we _can_ in fact seek */
 | 
				
			||||||
 | 
					        } else if (!strcasecmp (tag, "Accept-Ranges") && !strncmp (p, "bytes", 5)) {
 | 
				
			||||||
 | 
					            h->is_streamed = 0;
 | 
				
			||||||
        } else if (!strcasecmp (tag, "Transfer-Encoding") && !strncasecmp(p, "chunked", 7)) {
 | 
					        } else if (!strcasecmp (tag, "Transfer-Encoding") && !strncasecmp(p, "chunked", 7)) {
 | 
				
			||||||
            s->filesize = -1;
 | 
					            s->filesize = -1;
 | 
				
			||||||
            s->chunksize = 0;
 | 
					            s->chunksize = 0;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -208,6 +208,8 @@ const AVCodecTag codec_movvideo_tags[] = {
 | 
				
			|||||||
    { CODEC_ID_PRORES, MKTAG('a', 'p', 'c', 'o') }, /* Apple ProRes 422 Proxy */
 | 
					    { CODEC_ID_PRORES, MKTAG('a', 'p', 'c', 'o') }, /* Apple ProRes 422 Proxy */
 | 
				
			||||||
    { CODEC_ID_PRORES, MKTAG('a', 'p', '4', 'h') }, /* Apple ProRes 4444 */
 | 
					    { CODEC_ID_PRORES, MKTAG('a', 'p', '4', 'h') }, /* Apple ProRes 4444 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    { CODEC_ID_MSMPEG4V3, MKTAG('3', 'I', 'V', 'D') }, /* 3ivx DivX Doctor */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    { CODEC_ID_NONE, 0 },
 | 
					    { CODEC_ID_NONE, 0 },
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -206,7 +206,7 @@ static int mov_write_ac3_tag(AVIOContext *pb, MOVTrack *track)
 | 
				
			|||||||
    avio_wb32(pb, 11);
 | 
					    avio_wb32(pb, 11);
 | 
				
			||||||
    ffio_wfourcc(pb, "dac3");
 | 
					    ffio_wfourcc(pb, "dac3");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    init_get_bits(&gbc, track->vosData+4, track->vosLen-4);
 | 
					    init_get_bits(&gbc, track->vosData+4, (track->vosLen-4) * 8);
 | 
				
			||||||
    fscod      = get_bits(&gbc, 2);
 | 
					    fscod      = get_bits(&gbc, 2);
 | 
				
			||||||
    frmsizecod = get_bits(&gbc, 6);
 | 
					    frmsizecod = get_bits(&gbc, 6);
 | 
				
			||||||
    bsid       = get_bits(&gbc, 5);
 | 
					    bsid       = get_bits(&gbc, 5);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -109,8 +109,8 @@ static int mp3_parse_vbr_tags(AVFormatContext *s, AVStream *st, int64_t base)
 | 
				
			|||||||
        if(avio_rb16(s->pb) == 1) {
 | 
					        if(avio_rb16(s->pb) == 1) {
 | 
				
			||||||
            /* skip delay and quality */
 | 
					            /* skip delay and quality */
 | 
				
			||||||
            avio_skip(s->pb, 4);
 | 
					            avio_skip(s->pb, 4);
 | 
				
			||||||
            frames = avio_rb32(s->pb);
 | 
					 | 
				
			||||||
            size = avio_rb32(s->pb);
 | 
					            size = avio_rb32(s->pb);
 | 
				
			||||||
 | 
					            frames = avio_rb32(s->pb);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -173,7 +173,9 @@ static int mp3_read_packet(AVFormatContext *s, AVPacket *pkt)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    pkt->stream_index = 0;
 | 
					    pkt->stream_index = 0;
 | 
				
			||||||
    if (ret <= 0) {
 | 
					    if (ret <= 0) {
 | 
				
			||||||
        return AVERROR(EIO);
 | 
					        if(ret<0)
 | 
				
			||||||
 | 
					            return ret;
 | 
				
			||||||
 | 
					        return AVERROR_EOF;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (ret > ID3v1_TAG_SIZE &&
 | 
					    if (ret > ID3v1_TAG_SIZE &&
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -106,6 +106,7 @@ static int mpegps_read_header(AVFormatContext *s,
 | 
				
			|||||||
    MpegDemuxContext *m = s->priv_data;
 | 
					    MpegDemuxContext *m = s->priv_data;
 | 
				
			||||||
    const char *sofdec = "Sofdec";
 | 
					    const char *sofdec = "Sofdec";
 | 
				
			||||||
    int v, i = 0;
 | 
					    int v, i = 0;
 | 
				
			||||||
 | 
					    int64_t last_pos = avio_tell(s->pb);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    m->header_state = 0xff;
 | 
					    m->header_state = 0xff;
 | 
				
			||||||
    s->ctx_flags |= AVFMTCTX_NOHEADER;
 | 
					    s->ctx_flags |= AVFMTCTX_NOHEADER;
 | 
				
			||||||
@@ -119,6 +120,9 @@ static int mpegps_read_header(AVFormatContext *s,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    m->sofdec = (m->sofdec == 6) ? 1 : 0;
 | 
					    m->sofdec = (m->sofdec == 6) ? 1 : 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (!m->sofdec)
 | 
				
			||||||
 | 
					       avio_seek(s->pb, last_pos, SEEK_SET);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* no need to do more */
 | 
					    /* no need to do more */
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1273,7 +1273,7 @@ static int handle_packet(MpegTSContext *ts, const uint8_t *packet)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    AVFormatContext *s = ts->stream;
 | 
					    AVFormatContext *s = ts->stream;
 | 
				
			||||||
    MpegTSFilter *tss;
 | 
					    MpegTSFilter *tss;
 | 
				
			||||||
    int len, pid, cc, cc_ok, afc, is_start;
 | 
					    int len, pid, cc, expected_cc, cc_ok, afc, is_start;
 | 
				
			||||||
    const uint8_t *p, *p_end;
 | 
					    const uint8_t *p, *p_end;
 | 
				
			||||||
    int64_t pos;
 | 
					    int64_t pos;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1291,7 +1291,8 @@ static int handle_packet(MpegTSContext *ts, const uint8_t *packet)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    /* continuity check (currently not used) */
 | 
					    /* continuity check (currently not used) */
 | 
				
			||||||
    cc = (packet[3] & 0xf);
 | 
					    cc = (packet[3] & 0xf);
 | 
				
			||||||
    cc_ok = (tss->last_cc < 0) || ((((tss->last_cc + 1) & 0x0f) == cc));
 | 
					    expected_cc = (packet[3] & 0x10) ? (tss->last_cc + 1) & 0x0f : tss->last_cc;
 | 
				
			||||||
 | 
					    cc_ok = (tss->last_cc < 0) || (expected_cc == cc);
 | 
				
			||||||
    tss->last_cc = cc;
 | 
					    tss->last_cc = cc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* skip adaptation field */
 | 
					    /* skip adaptation field */
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -19,6 +19,7 @@
 | 
				
			|||||||
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 | 
					 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "libavutil/common.h"
 | 
				
			||||||
#include "mxf.h"
 | 
					#include "mxf.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
@@ -80,7 +81,7 @@ static const struct {
 | 
				
			|||||||
    {PIX_FMT_PAL8,    {'P', 8                                           }},
 | 
					    {PIX_FMT_PAL8,    {'P', 8                                           }},
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static const int num_pixel_layouts = sizeof(ff_mxf_pixel_layouts) / sizeof(*ff_mxf_pixel_layouts);
 | 
					static const int num_pixel_layouts = FF_ARRAY_ELEMS(ff_mxf_pixel_layouts);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int ff_mxf_decode_pixel_layout(const char pixel_layout[16], enum PixelFormat *pix_fmt)
 | 
					int ff_mxf_decode_pixel_layout(const char pixel_layout[16], enum PixelFormat *pix_fmt)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -599,7 +599,7 @@ static int mxf_read_generic_descriptor(void *arg, AVIOContext *pb, int tag, int
 | 
				
			|||||||
    default:
 | 
					    default:
 | 
				
			||||||
        /* Private uid used by SONY C0023S01.mxf */
 | 
					        /* Private uid used by SONY C0023S01.mxf */
 | 
				
			||||||
        if (IS_KLV_KEY(uid, mxf_sony_mpeg4_extradata)) {
 | 
					        if (IS_KLV_KEY(uid, mxf_sony_mpeg4_extradata)) {
 | 
				
			||||||
            descriptor->extradata = av_malloc(size);
 | 
					            descriptor->extradata = av_malloc(size + FF_INPUT_BUFFER_PADDING_SIZE);
 | 
				
			||||||
            if (!descriptor->extradata)
 | 
					            if (!descriptor->extradata)
 | 
				
			||||||
                return -1;
 | 
					                return -1;
 | 
				
			||||||
            descriptor->extradata_size = size;
 | 
					            descriptor->extradata_size = size;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1539,7 +1539,7 @@ static const uint8_t system_metadata_package_set_key[] = { 0x06,0x0E,0x2B,0x34,0
 | 
				
			|||||||
static uint32_t ff_framenum_to_12m_time_code(unsigned frame, int drop, int fps)
 | 
					static uint32_t ff_framenum_to_12m_time_code(unsigned frame, int drop, int fps)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    return (0                                    << 31) | // color frame flag
 | 
					    return (0                                    << 31) | // color frame flag
 | 
				
			||||||
           (0                                    << 30) | // drop  frame flag
 | 
					           (drop                                 << 30) | // drop  frame flag
 | 
				
			||||||
           ( ((frame % fps) / 10)                << 28) | // tens  of frames
 | 
					           ( ((frame % fps) / 10)                << 28) | // tens  of frames
 | 
				
			||||||
           ( ((frame % fps) % 10)                << 24) | // units of frames
 | 
					           ( ((frame % fps) % 10)                << 24) | // units of frames
 | 
				
			||||||
           (0                                    << 23) | // field phase (NTSC), b0 (PAL)
 | 
					           (0                                    << 23) | // field phase (NTSC), b0 (PAL)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -29,7 +29,6 @@
 | 
				
			|||||||
    DEALINGS IN THE SOFTWARE.
 | 
					    DEALINGS IN THE SOFTWARE.
 | 
				
			||||||
**/
 | 
					**/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
#include <stdio.h>
 | 
					#include <stdio.h>
 | 
				
			||||||
#include "oggdec.h"
 | 
					#include "oggdec.h"
 | 
				
			||||||
#include "avformat.h"
 | 
					#include "avformat.h"
 | 
				
			||||||
@@ -93,14 +92,24 @@ static int ogg_restore(AVFormatContext *s, int discard)
 | 
				
			|||||||
    ogg->state = ost->next;
 | 
					    ogg->state = ost->next;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (!discard){
 | 
					    if (!discard){
 | 
				
			||||||
 | 
					        struct ogg_stream *old_streams = ogg->streams;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        for (i = 0; i < ogg->nstreams; i++)
 | 
					        for (i = 0; i < ogg->nstreams; i++)
 | 
				
			||||||
            av_free (ogg->streams[i].buf);
 | 
					            av_free (ogg->streams[i].buf);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        avio_seek (bc, ost->pos, SEEK_SET);
 | 
					        avio_seek (bc, ost->pos, SEEK_SET);
 | 
				
			||||||
        ogg->curidx = ost->curidx;
 | 
					        ogg->curidx = ost->curidx;
 | 
				
			||||||
        ogg->nstreams = ost->nstreams;
 | 
					        ogg->nstreams = ost->nstreams;
 | 
				
			||||||
        memcpy(ogg->streams, ost->streams,
 | 
					        ogg->streams = av_realloc (ogg->streams,
 | 
				
			||||||
               ost->nstreams * sizeof(*ogg->streams));
 | 
					                                   ogg->nstreams * sizeof (*ogg->streams));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (ogg->streams) {
 | 
				
			||||||
 | 
					            memcpy(ogg->streams, ost->streams,
 | 
				
			||||||
 | 
					                   ost->nstreams * sizeof(*ogg->streams));
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            av_free(old_streams);
 | 
				
			||||||
 | 
					            ogg->nstreams = 0;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    av_free (ost);
 | 
					    av_free (ost);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -26,6 +26,13 @@
 | 
				
			|||||||
#include "riff.h"
 | 
					#include "riff.h"
 | 
				
			||||||
#include "rm.h"
 | 
					#include "rm.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define DEINT_ID_GENR MKTAG('g', 'e', 'n', 'r') ///< interleaving for Cooker/Atrac
 | 
				
			||||||
 | 
					#define DEINT_ID_INT0 MKTAG('I', 'n', 't', '0') ///< no interleaving needed
 | 
				
			||||||
 | 
					#define DEINT_ID_INT4 MKTAG('I', 'n', 't', '4') ///< interleaving for 28.8
 | 
				
			||||||
 | 
					#define DEINT_ID_SIPR MKTAG('s', 'i', 'p', 'r') ///< interleaving for Sipro
 | 
				
			||||||
 | 
					#define DEINT_ID_VBRF MKTAG('v', 'b', 'r', 'f') ///< VBR case for AAC
 | 
				
			||||||
 | 
					#define DEINT_ID_VBRS MKTAG('v', 'b', 'r', 's') ///< VBR case for AAC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct RMStream {
 | 
					struct RMStream {
 | 
				
			||||||
    AVPacket pkt;      ///< place to store merged video frame / reordered audio data
 | 
					    AVPacket pkt;      ///< place to store merged video frame / reordered audio data
 | 
				
			||||||
    int videobufsize;  ///< current assembled frame size
 | 
					    int videobufsize;  ///< current assembled frame size
 | 
				
			||||||
@@ -39,6 +46,7 @@ struct RMStream {
 | 
				
			|||||||
    int sub_packet_size, sub_packet_h, coded_framesize; ///< Descrambling parameters from container
 | 
					    int sub_packet_size, sub_packet_h, coded_framesize; ///< Descrambling parameters from container
 | 
				
			||||||
    int audio_framesize; /// Audio frame size from container
 | 
					    int audio_framesize; /// Audio frame size from container
 | 
				
			||||||
    int sub_packet_lengths[16]; /// Length of each subpacket
 | 
					    int sub_packet_lengths[16]; /// Length of each subpacket
 | 
				
			||||||
 | 
					    int32_t deint_id;  ///< deinterleaver used in audio stream
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef struct {
 | 
					typedef struct {
 | 
				
			||||||
@@ -147,6 +155,7 @@ static int rm_read_audio_stream_info(AVFormatContext *s, AVIOContext *pb,
 | 
				
			|||||||
        st->codec->channels = 1;
 | 
					        st->codec->channels = 1;
 | 
				
			||||||
        st->codec->codec_type = AVMEDIA_TYPE_AUDIO;
 | 
					        st->codec->codec_type = AVMEDIA_TYPE_AUDIO;
 | 
				
			||||||
        st->codec->codec_id = CODEC_ID_RA_144;
 | 
					        st->codec->codec_id = CODEC_ID_RA_144;
 | 
				
			||||||
 | 
					        ast->deint_id = DEINT_ID_INT0;
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
        int flavor, sub_packet_h, coded_framesize, sub_packet_size;
 | 
					        int flavor, sub_packet_h, coded_framesize, sub_packet_size;
 | 
				
			||||||
        int codecdata_length;
 | 
					        int codecdata_length;
 | 
				
			||||||
@@ -172,17 +181,19 @@ static int rm_read_audio_stream_info(AVFormatContext *s, AVIOContext *pb,
 | 
				
			|||||||
        avio_rb32(pb);
 | 
					        avio_rb32(pb);
 | 
				
			||||||
        st->codec->channels = avio_rb16(pb);
 | 
					        st->codec->channels = avio_rb16(pb);
 | 
				
			||||||
        if (version == 5) {
 | 
					        if (version == 5) {
 | 
				
			||||||
            avio_rb32(pb);
 | 
					            ast->deint_id = avio_rl32(pb);
 | 
				
			||||||
            avio_read(pb, buf, 4);
 | 
					            avio_read(pb, buf, 4);
 | 
				
			||||||
            buf[4] = 0;
 | 
					            buf[4] = 0;
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
            get_str8(pb, buf, sizeof(buf)); /* desc */
 | 
					            get_str8(pb, buf, sizeof(buf)); /* desc */
 | 
				
			||||||
 | 
					            ast->deint_id = AV_RL32(buf);
 | 
				
			||||||
            get_str8(pb, buf, sizeof(buf)); /* desc */
 | 
					            get_str8(pb, buf, sizeof(buf)); /* desc */
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        st->codec->codec_type = AVMEDIA_TYPE_AUDIO;
 | 
					        st->codec->codec_type = AVMEDIA_TYPE_AUDIO;
 | 
				
			||||||
        st->codec->codec_tag  = AV_RL32(buf);
 | 
					        st->codec->codec_tag  = AV_RL32(buf);
 | 
				
			||||||
        st->codec->codec_id   = ff_codec_get_id(ff_rm_codec_tags,
 | 
					        st->codec->codec_id   = ff_codec_get_id(ff_rm_codec_tags,
 | 
				
			||||||
                                                st->codec->codec_tag);
 | 
					                                                st->codec->codec_tag);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        switch (st->codec->codec_id) {
 | 
					        switch (st->codec->codec_id) {
 | 
				
			||||||
        case CODEC_ID_AC3:
 | 
					        case CODEC_ID_AC3:
 | 
				
			||||||
            st->need_parsing = AVSTREAM_PARSE_FULL;
 | 
					            st->need_parsing = AVSTREAM_PARSE_FULL;
 | 
				
			||||||
@@ -191,13 +202,6 @@ static int rm_read_audio_stream_info(AVFormatContext *s, AVIOContext *pb,
 | 
				
			|||||||
            st->codec->extradata_size= 0;
 | 
					            st->codec->extradata_size= 0;
 | 
				
			||||||
            ast->audio_framesize = st->codec->block_align;
 | 
					            ast->audio_framesize = st->codec->block_align;
 | 
				
			||||||
            st->codec->block_align = coded_framesize;
 | 
					            st->codec->block_align = coded_framesize;
 | 
				
			||||||
 | 
					 | 
				
			||||||
            if(ast->audio_framesize >= UINT_MAX / sub_packet_h){
 | 
					 | 
				
			||||||
                av_log(s, AV_LOG_ERROR, "ast->audio_framesize * sub_packet_h too large\n");
 | 
					 | 
				
			||||||
                return -1;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            av_new_packet(&ast->pkt, ast->audio_framesize * sub_packet_h);
 | 
					 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
        case CODEC_ID_COOK:
 | 
					        case CODEC_ID_COOK:
 | 
				
			||||||
        case CODEC_ID_ATRAC3:
 | 
					        case CODEC_ID_ATRAC3:
 | 
				
			||||||
@@ -228,13 +232,6 @@ static int rm_read_audio_stream_info(AVFormatContext *s, AVIOContext *pb,
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
            if ((ret = rm_read_extradata(pb, st->codec, codecdata_length)) < 0)
 | 
					            if ((ret = rm_read_extradata(pb, st->codec, codecdata_length)) < 0)
 | 
				
			||||||
                return ret;
 | 
					                return ret;
 | 
				
			||||||
 | 
					 | 
				
			||||||
            if(ast->audio_framesize >= UINT_MAX / sub_packet_h){
 | 
					 | 
				
			||||||
                av_log(s, AV_LOG_ERROR, "rm->audio_framesize * sub_packet_h too large\n");
 | 
					 | 
				
			||||||
                return -1;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            av_new_packet(&ast->pkt, ast->audio_framesize * sub_packet_h);
 | 
					 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
        case CODEC_ID_AAC:
 | 
					        case CODEC_ID_AAC:
 | 
				
			||||||
            avio_rb16(pb); avio_r8(pb);
 | 
					            avio_rb16(pb); avio_r8(pb);
 | 
				
			||||||
@@ -254,6 +251,37 @@ static int rm_read_audio_stream_info(AVFormatContext *s, AVIOContext *pb,
 | 
				
			|||||||
        default:
 | 
					        default:
 | 
				
			||||||
            av_strlcpy(st->codec->codec_name, buf, sizeof(st->codec->codec_name));
 | 
					            av_strlcpy(st->codec->codec_name, buf, sizeof(st->codec->codec_name));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        if (ast->deint_id == DEINT_ID_INT4 ||
 | 
				
			||||||
 | 
					            ast->deint_id == DEINT_ID_GENR ||
 | 
				
			||||||
 | 
					            ast->deint_id == DEINT_ID_SIPR) {
 | 
				
			||||||
 | 
					            if (st->codec->block_align <= 0 ||
 | 
				
			||||||
 | 
					                ast->audio_framesize * sub_packet_h > (unsigned)INT_MAX ||
 | 
				
			||||||
 | 
					                ast->audio_framesize * sub_packet_h < st->codec->block_align)
 | 
				
			||||||
 | 
					                return AVERROR_INVALIDDATA;
 | 
				
			||||||
 | 
					            if (av_new_packet(&ast->pkt, ast->audio_framesize * sub_packet_h) < 0)
 | 
				
			||||||
 | 
					                return AVERROR(ENOMEM);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        switch (ast->deint_id) {
 | 
				
			||||||
 | 
					        case DEINT_ID_INT4:
 | 
				
			||||||
 | 
					            if (ast->coded_framesize > ast->audio_framesize ||
 | 
				
			||||||
 | 
					                ast->coded_framesize * sub_packet_h > (2 + (sub_packet_h & 1)) * ast->audio_framesize)
 | 
				
			||||||
 | 
					                return AVERROR_INVALIDDATA;
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					        case DEINT_ID_GENR:
 | 
				
			||||||
 | 
					            if (ast->sub_packet_size <= 0 ||
 | 
				
			||||||
 | 
					                ast->sub_packet_size > ast->audio_framesize)
 | 
				
			||||||
 | 
					                return AVERROR_INVALIDDATA;
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					        case DEINT_ID_SIPR:
 | 
				
			||||||
 | 
					        case DEINT_ID_INT0:
 | 
				
			||||||
 | 
					        case DEINT_ID_VBRS:
 | 
				
			||||||
 | 
					        case DEINT_ID_VBRF:
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					        default:
 | 
				
			||||||
 | 
					            av_log(NULL,0,"Unknown interleaver %X\n", ast->deint_id);
 | 
				
			||||||
 | 
					            return AVERROR_INVALIDDATA;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (read_all) {
 | 
					        if (read_all) {
 | 
				
			||||||
            avio_r8(pb);
 | 
					            avio_r8(pb);
 | 
				
			||||||
            avio_r8(pb);
 | 
					            avio_r8(pb);
 | 
				
			||||||
@@ -712,10 +740,9 @@ ff_rm_parse_packet (AVFormatContext *s, AVIOContext *pb,
 | 
				
			|||||||
        if(rm_assemble_video_frame(s, pb, rm, ast, pkt, len, seq))
 | 
					        if(rm_assemble_video_frame(s, pb, rm, ast, pkt, len, seq))
 | 
				
			||||||
            return -1; //got partial frame
 | 
					            return -1; //got partial frame
 | 
				
			||||||
    } else if (st->codec->codec_type == AVMEDIA_TYPE_AUDIO) {
 | 
					    } else if (st->codec->codec_type == AVMEDIA_TYPE_AUDIO) {
 | 
				
			||||||
        if ((st->codec->codec_id == CODEC_ID_RA_288) ||
 | 
					        if ((ast->deint_id == DEINT_ID_GENR) ||
 | 
				
			||||||
            (st->codec->codec_id == CODEC_ID_COOK) ||
 | 
					            (ast->deint_id == DEINT_ID_INT4) ||
 | 
				
			||||||
            (st->codec->codec_id == CODEC_ID_ATRAC3) ||
 | 
					            (ast->deint_id == DEINT_ID_SIPR)) {
 | 
				
			||||||
            (st->codec->codec_id == CODEC_ID_SIPR)) {
 | 
					 | 
				
			||||||
            int x;
 | 
					            int x;
 | 
				
			||||||
            int sps = ast->sub_packet_size;
 | 
					            int sps = ast->sub_packet_size;
 | 
				
			||||||
            int cfs = ast->coded_framesize;
 | 
					            int cfs = ast->coded_framesize;
 | 
				
			||||||
@@ -728,30 +755,30 @@ ff_rm_parse_packet (AVFormatContext *s, AVIOContext *pb,
 | 
				
			|||||||
            if (!y)
 | 
					            if (!y)
 | 
				
			||||||
                ast->audiotimestamp = timestamp;
 | 
					                ast->audiotimestamp = timestamp;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            switch(st->codec->codec_id) {
 | 
					            switch (ast->deint_id) {
 | 
				
			||||||
                case CODEC_ID_RA_288:
 | 
					                case DEINT_ID_INT4:
 | 
				
			||||||
                    for (x = 0; x < h/2; x++)
 | 
					                    for (x = 0; x < h/2; x++)
 | 
				
			||||||
                        avio_read(pb, ast->pkt.data+x*2*w+y*cfs, cfs);
 | 
					                        avio_read(pb, ast->pkt.data+x*2*w+y*cfs, cfs);
 | 
				
			||||||
                    break;
 | 
					                    break;
 | 
				
			||||||
                case CODEC_ID_ATRAC3:
 | 
					                case DEINT_ID_GENR:
 | 
				
			||||||
                case CODEC_ID_COOK:
 | 
					 | 
				
			||||||
                    for (x = 0; x < w/sps; x++)
 | 
					                    for (x = 0; x < w/sps; x++)
 | 
				
			||||||
                        avio_read(pb, ast->pkt.data+sps*(h*x+((h+1)/2)*(y&1)+(y>>1)), sps);
 | 
					                        avio_read(pb, ast->pkt.data+sps*(h*x+((h+1)/2)*(y&1)+(y>>1)), sps);
 | 
				
			||||||
                    break;
 | 
					                    break;
 | 
				
			||||||
                case CODEC_ID_SIPR:
 | 
					                case DEINT_ID_SIPR:
 | 
				
			||||||
                    avio_read(pb, ast->pkt.data + y * w, w);
 | 
					                    avio_read(pb, ast->pkt.data + y * w, w);
 | 
				
			||||||
                    break;
 | 
					                    break;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (++(ast->sub_packet_cnt) < h)
 | 
					            if (++(ast->sub_packet_cnt) < h)
 | 
				
			||||||
                return -1;
 | 
					                return -1;
 | 
				
			||||||
            if (st->codec->codec_id == CODEC_ID_SIPR)
 | 
					            if (ast->deint_id == DEINT_ID_SIPR)
 | 
				
			||||||
                ff_rm_reorder_sipr_data(ast->pkt.data, h, w);
 | 
					                ff_rm_reorder_sipr_data(ast->pkt.data, h, w);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
             ast->sub_packet_cnt = 0;
 | 
					             ast->sub_packet_cnt = 0;
 | 
				
			||||||
             rm->audio_stream_num = st->index;
 | 
					             rm->audio_stream_num = st->index;
 | 
				
			||||||
             rm->audio_pkt_cnt = h * w / st->codec->block_align;
 | 
					             rm->audio_pkt_cnt = h * w / st->codec->block_align;
 | 
				
			||||||
        } else if (st->codec->codec_id == CODEC_ID_AAC) {
 | 
					        } else if ((ast->deint_id == DEINT_ID_VBRF) ||
 | 
				
			||||||
 | 
					                   (ast->deint_id == DEINT_ID_VBRS)) {
 | 
				
			||||||
            int x;
 | 
					            int x;
 | 
				
			||||||
            rm->audio_stream_num = st->index;
 | 
					            rm->audio_stream_num = st->index;
 | 
				
			||||||
            ast->sub_packet_cnt = (avio_rb16(pb) & 0xf0) >> 4;
 | 
					            ast->sub_packet_cnt = (avio_rb16(pb) & 0xf0) >> 4;
 | 
				
			||||||
@@ -799,7 +826,8 @@ ff_rm_retrieve_cache (AVFormatContext *s, AVIOContext *pb,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    assert (rm->audio_pkt_cnt > 0);
 | 
					    assert (rm->audio_pkt_cnt > 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (st->codec->codec_id == CODEC_ID_AAC)
 | 
					    if (ast->deint_id == DEINT_ID_VBRF ||
 | 
				
			||||||
 | 
					        ast->deint_id == DEINT_ID_VBRS)
 | 
				
			||||||
        av_get_packet(pb, pkt, ast->sub_packet_lengths[ast->sub_packet_cnt - rm->audio_pkt_cnt]);
 | 
					        av_get_packet(pb, pkt, ast->sub_packet_lengths[ast->sub_packet_cnt - rm->audio_pkt_cnt]);
 | 
				
			||||||
    else {
 | 
					    else {
 | 
				
			||||||
        av_new_packet(pkt, st->codec->block_align);
 | 
					        av_new_packet(pkt, st->codec->block_align);
 | 
				
			||||||
@@ -905,7 +933,9 @@ static int64_t rm_read_dts(AVFormatContext *s, int stream_index,
 | 
				
			|||||||
    if(rm->old_format)
 | 
					    if(rm->old_format)
 | 
				
			||||||
        return AV_NOPTS_VALUE;
 | 
					        return AV_NOPTS_VALUE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    avio_seek(s->pb, pos, SEEK_SET);
 | 
					    if (avio_seek(s->pb, pos, SEEK_SET) < 0)
 | 
				
			||||||
 | 
					        return AV_NOPTS_VALUE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    rm->remaining_len=0;
 | 
					    rm->remaining_len=0;
 | 
				
			||||||
    for(;;){
 | 
					    for(;;){
 | 
				
			||||||
        int seq=1;
 | 
					        int seq=1;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -111,11 +111,16 @@ static int film_read_header(AVFormatContext *s,
 | 
				
			|||||||
        film->audio_samplerate = AV_RB16(&scratch[24]);
 | 
					        film->audio_samplerate = AV_RB16(&scratch[24]);
 | 
				
			||||||
        film->audio_channels = scratch[21];
 | 
					        film->audio_channels = scratch[21];
 | 
				
			||||||
        film->audio_bits = scratch[22];
 | 
					        film->audio_bits = scratch[22];
 | 
				
			||||||
        if (film->audio_bits == 8)
 | 
					        if (scratch[23] == 2)
 | 
				
			||||||
            film->audio_type = CODEC_ID_PCM_S8;
 | 
					            film->audio_type = CODEC_ID_ADPCM_ADX;
 | 
				
			||||||
        else if (film->audio_bits == 16)
 | 
					        else if (film->audio_channels > 0) {
 | 
				
			||||||
            film->audio_type = CODEC_ID_PCM_S16BE;
 | 
					            if (film->audio_bits == 8)
 | 
				
			||||||
        else
 | 
					                film->audio_type = CODEC_ID_PCM_S8;
 | 
				
			||||||
 | 
					            else if (film->audio_bits == 16)
 | 
				
			||||||
 | 
					                film->audio_type = CODEC_ID_PCM_S16BE;
 | 
				
			||||||
 | 
					            else
 | 
				
			||||||
 | 
					                film->audio_type = CODEC_ID_NONE;
 | 
				
			||||||
 | 
					        } else
 | 
				
			||||||
            film->audio_type = CODEC_ID_NONE;
 | 
					            film->audio_type = CODEC_ID_NONE;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -167,6 +172,8 @@ static int film_read_header(AVFormatContext *s,
 | 
				
			|||||||
    if(film->sample_count >= UINT_MAX / sizeof(film_sample))
 | 
					    if(film->sample_count >= UINT_MAX / sizeof(film_sample))
 | 
				
			||||||
        return -1;
 | 
					        return -1;
 | 
				
			||||||
    film->sample_table = av_malloc(film->sample_count * sizeof(film_sample));
 | 
					    film->sample_table = av_malloc(film->sample_count * sizeof(film_sample));
 | 
				
			||||||
 | 
					    if (!film->sample_table)
 | 
				
			||||||
 | 
					        return AVERROR(ENOMEM);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for(i=0; i<s->nb_streams; i++)
 | 
					    for(i=0; i<s->nb_streams; i++)
 | 
				
			||||||
        av_set_pts_info(s->streams[i], 33, 1, film->base_clock);
 | 
					        av_set_pts_info(s->streams[i], 33, 1, film->base_clock);
 | 
				
			||||||
@@ -187,8 +194,12 @@ static int film_read_header(AVFormatContext *s,
 | 
				
			|||||||
            film->sample_table[i].pts *= film->base_clock;
 | 
					            film->sample_table[i].pts *= film->base_clock;
 | 
				
			||||||
            film->sample_table[i].pts /= film->audio_samplerate;
 | 
					            film->sample_table[i].pts /= film->audio_samplerate;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            audio_frame_counter += (film->sample_table[i].sample_size /
 | 
					            if (film->audio_type == CODEC_ID_ADPCM_ADX)
 | 
				
			||||||
                (film->audio_channels * film->audio_bits / 8));
 | 
					                audio_frame_counter += (film->sample_table[i].sample_size * 32 /
 | 
				
			||||||
 | 
					                    (18 * film->audio_channels));
 | 
				
			||||||
 | 
					            else if (film->audio_type != CODEC_ID_NONE)
 | 
				
			||||||
 | 
					                audio_frame_counter += (film->sample_table[i].sample_size /
 | 
				
			||||||
 | 
					                    (film->audio_channels * film->audio_bits / 8));
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
            film->sample_table[i].stream = film->video_stream_index;
 | 
					            film->sample_table[i].stream = film->video_stream_index;
 | 
				
			||||||
            film->sample_table[i].pts = AV_RB32(&scratch[8]) & 0x7FFFFFFF;
 | 
					            film->sample_table[i].pts = AV_RB32(&scratch[8]) & 0x7FFFFFFF;
 | 
				
			||||||
@@ -238,6 +249,10 @@ static int film_read_packet(AVFormatContext *s,
 | 
				
			|||||||
            av_free(film->stereo_buffer);
 | 
					            av_free(film->stereo_buffer);
 | 
				
			||||||
            film->stereo_buffer_size = sample->sample_size;
 | 
					            film->stereo_buffer_size = sample->sample_size;
 | 
				
			||||||
            film->stereo_buffer = av_malloc(film->stereo_buffer_size);
 | 
					            film->stereo_buffer = av_malloc(film->stereo_buffer_size);
 | 
				
			||||||
 | 
					            if (!film->stereo_buffer) {
 | 
				
			||||||
 | 
					                film->stereo_buffer_size = 0;
 | 
				
			||||||
 | 
					                return AVERROR(ENOMEM);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        pkt->pos= avio_tell(pb);
 | 
					        pkt->pos= avio_tell(pb);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -286,11 +286,16 @@ static int smacker_read_packet(AVFormatContext *s, AVPacket *pkt)
 | 
				
			|||||||
        for(i = 0; i < 7; i++) {
 | 
					        for(i = 0; i < 7; i++) {
 | 
				
			||||||
            if(flags & 1) {
 | 
					            if(flags & 1) {
 | 
				
			||||||
                int size;
 | 
					                int size;
 | 
				
			||||||
 | 
					                uint8_t *tmpbuf;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                size = avio_rl32(s->pb) - 4;
 | 
					                size = avio_rl32(s->pb) - 4;
 | 
				
			||||||
                frame_size -= size;
 | 
					                frame_size -= size;
 | 
				
			||||||
                frame_size -= 4;
 | 
					                frame_size -= 4;
 | 
				
			||||||
                smk->curstream++;
 | 
					                smk->curstream++;
 | 
				
			||||||
                smk->bufs[smk->curstream] = av_realloc(smk->bufs[smk->curstream], size);
 | 
					                tmpbuf = av_realloc(smk->bufs[smk->curstream], size);
 | 
				
			||||||
 | 
					                if (!tmpbuf)
 | 
				
			||||||
 | 
					                    return AVERROR(ENOMEM);
 | 
				
			||||||
 | 
					                smk->bufs[smk->curstream] = tmpbuf;
 | 
				
			||||||
                smk->buf_sizes[smk->curstream] = size;
 | 
					                smk->buf_sizes[smk->curstream] = size;
 | 
				
			||||||
                ret = avio_read(s->pb, smk->bufs[smk->curstream], size);
 | 
					                ret = avio_read(s->pb, smk->bufs[smk->curstream], size);
 | 
				
			||||||
                if(ret != size)
 | 
					                if(ret != size)
 | 
				
			||||||
@@ -299,7 +304,9 @@ static int smacker_read_packet(AVFormatContext *s, AVPacket *pkt)
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
            flags >>= 1;
 | 
					            flags >>= 1;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        if (av_new_packet(pkt, frame_size + 768))
 | 
					        if (frame_size < 0)
 | 
				
			||||||
 | 
					            return AVERROR_INVALIDDATA;
 | 
				
			||||||
 | 
					        if (av_new_packet(pkt, frame_size + 769))
 | 
				
			||||||
            return AVERROR(ENOMEM);
 | 
					            return AVERROR(ENOMEM);
 | 
				
			||||||
        if(smk->frm_size[smk->cur_frame] & 1)
 | 
					        if(smk->frm_size[smk->cur_frame] & 1)
 | 
				
			||||||
            palchange |= 2;
 | 
					            palchange |= 2;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -547,6 +547,7 @@ int av_open_input_stream(AVFormatContext **ic_ptr,
 | 
				
			|||||||
    ff_metadata_demux_compat(ic);
 | 
					    ff_metadata_demux_compat(ic);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
fail:
 | 
					fail:
 | 
				
			||||||
 | 
					    *ic_ptr = ic;
 | 
				
			||||||
    av_dict_free(&opts);
 | 
					    av_dict_free(&opts);
 | 
				
			||||||
    return err;
 | 
					    return err;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -1066,7 +1067,7 @@ static void compute_pkt_fields(AVFormatContext *s, AVStream *st,
 | 
				
			|||||||
    // we take the conservative approach and discard both
 | 
					    // we take the conservative approach and discard both
 | 
				
			||||||
    // Note, if this is misbehaving for a H.264 file then possibly presentation_delayed is not set correctly.
 | 
					    // Note, if this is misbehaving for a H.264 file then possibly presentation_delayed is not set correctly.
 | 
				
			||||||
    if(delay==1 && pkt->dts == pkt->pts && pkt->dts != AV_NOPTS_VALUE && presentation_delayed){
 | 
					    if(delay==1 && pkt->dts == pkt->pts && pkt->dts != AV_NOPTS_VALUE && presentation_delayed){
 | 
				
			||||||
        av_log(s, AV_LOG_DEBUG, "invalid dts/pts combination\n");
 | 
					        av_log(s, AV_LOG_DEBUG, "invalid dts/pts combination %Ld\n", pkt->dts);
 | 
				
			||||||
        pkt->dts= pkt->pts= AV_NOPTS_VALUE;
 | 
					        pkt->dts= pkt->pts= AV_NOPTS_VALUE;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1204,7 +1205,8 @@ static int av_read_frame_internal(AVFormatContext *s, AVPacket *pkt)
 | 
				
			|||||||
            if (!st->need_parsing || !st->parser) {
 | 
					            if (!st->need_parsing || !st->parser) {
 | 
				
			||||||
                /* no parsing needed: we just output the packet as is */
 | 
					                /* no parsing needed: we just output the packet as is */
 | 
				
			||||||
                /* raw data support */
 | 
					                /* raw data support */
 | 
				
			||||||
                *pkt = st->cur_pkt; st->cur_pkt.data= NULL;
 | 
					                *pkt = st->cur_pkt;
 | 
				
			||||||
 | 
					                st->cur_pkt.data= NULL;
 | 
				
			||||||
                compute_pkt_fields(s, st, NULL, pkt);
 | 
					                compute_pkt_fields(s, st, NULL, pkt);
 | 
				
			||||||
                s->cur_st = NULL;
 | 
					                s->cur_st = NULL;
 | 
				
			||||||
                if ((s->iformat->flags & AVFMT_GENERIC_INDEX) &&
 | 
					                if ((s->iformat->flags & AVFMT_GENERIC_INDEX) &&
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -499,6 +499,7 @@ int av_expr_parse(AVExpr **expr, const char *s,
 | 
				
			|||||||
    if ((ret = parse_expr(&e, &p)) < 0)
 | 
					    if ((ret = parse_expr(&e, &p)) < 0)
 | 
				
			||||||
        goto end;
 | 
					        goto end;
 | 
				
			||||||
    if (*p.s) {
 | 
					    if (*p.s) {
 | 
				
			||||||
 | 
					        av_expr_free(e);
 | 
				
			||||||
        av_log(&p, AV_LOG_ERROR, "Invalid chars '%s' at the end of expression '%s'\n", p.s, s0);
 | 
					        av_log(&p, AV_LOG_ERROR, "Invalid chars '%s' at the end of expression '%s'\n", p.s, s0);
 | 
				
			||||||
        ret = AVERROR(EINVAL);
 | 
					        ret = AVERROR(EINVAL);
 | 
				
			||||||
        goto end;
 | 
					        goto end;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -134,7 +134,7 @@ const AVOption *av_find_opt(void *obj, const char *name, const char *unit, int m
 | 
				
			|||||||
 *              when 0 then no av_free() nor av_strdup() will be used
 | 
					 *              when 0 then no av_free() nor av_strdup() will be used
 | 
				
			||||||
 * @return 0 if the value has been set, or an AVERROR code in case of
 | 
					 * @return 0 if the value has been set, or an AVERROR code in case of
 | 
				
			||||||
 * error:
 | 
					 * error:
 | 
				
			||||||
 * AVERROR(ENOENT) if no matching option exists
 | 
					 * AVERROR_OPTION_NOT_FOUND if no matching option exists
 | 
				
			||||||
 * AVERROR(ERANGE) if the value is out of range
 | 
					 * AVERROR(ERANGE) if the value is out of range
 | 
				
			||||||
 * AVERROR(EINVAL) if the value is not valid
 | 
					 * AVERROR(EINVAL) if the value is not valid
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -918,9 +918,9 @@ const AVPixFmtDescriptor av_pix_fmt_descriptors[PIX_FMT_NB] = {
 | 
				
			|||||||
        .log2_chroma_w= 0,
 | 
					        .log2_chroma_w= 0,
 | 
				
			||||||
        .log2_chroma_h= 0,
 | 
					        .log2_chroma_h= 0,
 | 
				
			||||||
        .comp = {
 | 
					        .comp = {
 | 
				
			||||||
            {0,1,1,0,9},        /* Y */
 | 
					            {0,1,1,0,8},        /* Y */
 | 
				
			||||||
            {1,1,1,0,9},        /* U */
 | 
					            {1,1,1,0,8},        /* U */
 | 
				
			||||||
            {2,1,1,0,9},        /* V */
 | 
					            {2,1,1,0,8},        /* V */
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        .flags = PIX_FMT_BE,
 | 
					        .flags = PIX_FMT_BE,
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -113,7 +113,7 @@ int ff_get_cpu_flags_x86(void)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    if(max_ext_level >= 0x80000001){
 | 
					    if(max_ext_level >= 0x80000001){
 | 
				
			||||||
        cpuid(0x80000001, eax, ebx, ecx, ext_caps);
 | 
					        cpuid(0x80000001, eax, ebx, ecx, ext_caps);
 | 
				
			||||||
        if (ext_caps & (1<<31))
 | 
					        if (ext_caps & (1U<<31))
 | 
				
			||||||
            rval |= AV_CPU_FLAG_3DNOW;
 | 
					            rval |= AV_CPU_FLAG_3DNOW;
 | 
				
			||||||
        if (ext_caps & (1<<30))
 | 
					        if (ext_caps & (1<<30))
 | 
				
			||||||
            rval |= AV_CPU_FLAG_3DNOWEXT;
 | 
					            rval |= AV_CPU_FLAG_3DNOWEXT;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,5 @@
 | 
				
			|||||||
0, 0, 192000, 0x8926d7fc
 | 
					0, 0, 192000, 0x8926d7fc
 | 
				
			||||||
1, 0, 47240, 0xad778a78
 | 
					1, 0, 47240, 0x9974897c
 | 
				
			||||||
0, 6390, 192000, 0x2506d384
 | 
					0, 6390, 192000, 0x2506d384
 | 
				
			||||||
0, 12780, 192000, 0x9a8dc93a
 | 
					0, 12780, 192000, 0x9a8dc93a
 | 
				
			||||||
0, 19170, 192000, 0x4badb7f2
 | 
					0, 19170, 192000, 0x4badb7f2
 | 
				
			||||||
@@ -15,163 +15,163 @@
 | 
				
			|||||||
0, 83070, 192000, 0x1a3d7971
 | 
					0, 83070, 192000, 0x1a3d7971
 | 
				
			||||||
0, 89460, 192000, 0xa1a65bd5
 | 
					0, 89460, 192000, 0xa1a65bd5
 | 
				
			||||||
0, 95850, 192000, 0x344957b9
 | 
					0, 95850, 192000, 0x344957b9
 | 
				
			||||||
1, 96408, 3128, 0x4c1564ae
 | 
					1, 96408, 3128, 0x7e4064b4
 | 
				
			||||||
0, 102240, 192000, 0xe23b5f4e
 | 
					0, 102240, 192000, 0xe23b5f4e
 | 
				
			||||||
1, 102792, 3128, 0x34553309
 | 
					1, 102792, 3128, 0x80883301
 | 
				
			||||||
0, 108630, 192000, 0xb5c2710b
 | 
					0, 108630, 192000, 0xb5c2710b
 | 
				
			||||||
1, 109176, 3136, 0xb474d246
 | 
					1, 109176, 3136, 0x2ad2d341
 | 
				
			||||||
0, 115020, 192000, 0x7a25938f
 | 
					0, 115020, 192000, 0x7a25938f
 | 
				
			||||||
1, 115576, 3128, 0x87b868ea
 | 
					1, 115576, 3128, 0xda8468e3
 | 
				
			||||||
0, 121410, 192000, 0x0a84e4c9
 | 
					0, 121410, 192000, 0x0a84e4c9
 | 
				
			||||||
1, 121959, 3136, 0xf1516dc3
 | 
					1, 121959, 3136, 0x9d6f6cdf
 | 
				
			||||||
0, 127800, 192000, 0x94209b0d
 | 
					0, 127800, 192000, 0x94209b0d
 | 
				
			||||||
1, 128359, 3128, 0x867563cb
 | 
					1, 128359, 3128, 0x1aaa64b5
 | 
				
			||||||
0, 134190, 192000, 0xf940e51f
 | 
					0, 134190, 192000, 0xf940e51f
 | 
				
			||||||
1, 134743, 3128, 0x5200728c
 | 
					1, 134743, 3128, 0x9182728b
 | 
				
			||||||
0, 140580, 192000, 0xb9fdec42
 | 
					0, 140580, 192000, 0xb9fdec42
 | 
				
			||||||
1, 141127, 3136, 0xeda118a0
 | 
					1, 141127, 3136, 0xfa8e17b3
 | 
				
			||||||
0, 146970, 192000, 0x7b04a376
 | 
					0, 146970, 192000, 0x7b04a376
 | 
				
			||||||
1, 147527, 3128, 0x03e2c1d6
 | 
					1, 147527, 3128, 0x0dc3c1cf
 | 
				
			||||||
0, 153360, 192000, 0x5fe0026b
 | 
					0, 153360, 192000, 0x5fe0026b
 | 
				
			||||||
1, 153910, 3136, 0xc3e862b6
 | 
					1, 153910, 3136, 0x0109639d
 | 
				
			||||||
0, 159750, 192000, 0x775aca39
 | 
					0, 159750, 192000, 0x775aca39
 | 
				
			||||||
1, 160310, 3128, 0x937a13be
 | 
					1, 160310, 3128, 0x6d8a12d9
 | 
				
			||||||
0, 166140, 192000, 0xae14fb32
 | 
					0, 166140, 192000, 0xae14fb32
 | 
				
			||||||
1, 166694, 3128, 0x7b1b9577
 | 
					1, 166694, 3128, 0x4b9a9597
 | 
				
			||||||
0, 172530, 192000, 0x661106e5
 | 
					0, 172530, 192000, 0x661106e5
 | 
				
			||||||
1, 173078, 3136, 0x042c7113
 | 
					1, 173078, 3136, 0x9112710e
 | 
				
			||||||
0, 178920, 192000, 0xe8658dbf
 | 
					0, 178920, 192000, 0xe8658dbf
 | 
				
			||||||
1, 179478, 3128, 0xac48f451
 | 
					1, 179478, 3128, 0x8cccf522
 | 
				
			||||||
0, 185310, 192000, 0x5359f0f9
 | 
					0, 185310, 192000, 0x5359f0f9
 | 
				
			||||||
1, 185861, 3128, 0x018fbbe9
 | 
					1, 185861, 3128, 0x6594bbf3
 | 
				
			||||||
0, 191700, 192000, 0xc1ec80f4
 | 
					0, 191700, 192000, 0xc1ec80f4
 | 
				
			||||||
1, 192245, 3136, 0xc62aa7ce
 | 
					1, 192245, 3136, 0xd878a7d5
 | 
				
			||||||
0, 198090, 192000, 0xca53806b
 | 
					0, 198090, 192000, 0xca53806b
 | 
				
			||||||
1, 198645, 3128, 0x106e3924
 | 
					1, 198645, 3128, 0xaa6e3905
 | 
				
			||||||
0, 204480, 192000, 0xf0766b2e
 | 
					0, 204480, 192000, 0xf0766b2e
 | 
				
			||||||
1, 205029, 3136, 0xfeb82ecc
 | 
					1, 205029, 3136, 0x2a062e04
 | 
				
			||||||
0, 210870, 192000, 0x39962da8
 | 
					0, 210870, 192000, 0x39962da8
 | 
				
			||||||
1, 211429, 3128, 0x7e7c005b
 | 
					1, 211429, 3128, 0x84e4006a
 | 
				
			||||||
0, 217260, 192000, 0x4171c37f
 | 
					0, 217260, 192000, 0x4171c37f
 | 
				
			||||||
1, 217812, 3128, 0x949d3560
 | 
					1, 217812, 3128, 0x85183633
 | 
				
			||||||
0, 223650, 192000, 0x3abf3b46
 | 
					0, 223650, 192000, 0x3abf3b46
 | 
				
			||||||
1, 224196, 3136, 0x02bd4aff
 | 
					1, 224196, 3136, 0xb62d4b02
 | 
				
			||||||
0, 230040, 192000, 0xecc68313
 | 
					0, 230040, 192000, 0xecc68313
 | 
				
			||||||
1, 230596, 3128, 0x4aaf4715
 | 
					1, 230596, 3128, 0xe209462a
 | 
				
			||||||
0, 236430, 192000, 0xea339baf
 | 
					0, 236430, 192000, 0xea339baf
 | 
				
			||||||
1, 236980, 3136, 0x2958825f
 | 
					1, 236980, 3136, 0x57c4824b
 | 
				
			||||||
0, 242820, 192000, 0x616b8f16
 | 
					0, 242820, 192000, 0x616b8f16
 | 
				
			||||||
1, 243380, 3128, 0x99a5914d
 | 
					1, 243380, 3128, 0x664a9163
 | 
				
			||||||
0, 249210, 192000, 0xf77a8581
 | 
					0, 249210, 192000, 0xf77a8581
 | 
				
			||||||
1, 249763, 3128, 0xe67277a4
 | 
					1, 249763, 3128, 0xb4287874
 | 
				
			||||||
0, 255600, 192000, 0xb315678b
 | 
					0, 255600, 192000, 0xb315678b
 | 
				
			||||||
1, 256147, 3136, 0x11296973
 | 
					1, 256147, 3136, 0xde626885
 | 
				
			||||||
0, 261990, 192000, 0x0a4a5218
 | 
					0, 261990, 192000, 0x0a4a5218
 | 
				
			||||||
1, 262547, 3128, 0x5cc362f7
 | 
					1, 262547, 3128, 0x919763c2
 | 
				
			||||||
0, 268380, 192000, 0x98802be4
 | 
					0, 268380, 192000, 0x98802be4
 | 
				
			||||||
1, 268931, 3128, 0x0c5e6586
 | 
					1, 268931, 3128, 0xa4f664e1
 | 
				
			||||||
0, 274770, 192000, 0xa2f0fd94
 | 
					0, 274770, 192000, 0xa2f0fd94
 | 
				
			||||||
1, 275314, 3136, 0xe940b0f9
 | 
					1, 275314, 3136, 0xa0bab0d4
 | 
				
			||||||
0, 281160, 192000, 0x6671c84f
 | 
					0, 281160, 192000, 0x6671c84f
 | 
				
			||||||
1, 281714, 3128, 0x2c9292cc
 | 
					1, 281714, 3128, 0xe938939c
 | 
				
			||||||
0, 287550, 192000, 0x38327e31
 | 
					0, 287550, 192000, 0x38327e31
 | 
				
			||||||
1, 288098, 3136, 0xa807c096
 | 
					1, 288098, 3136, 0x3679bfc7
 | 
				
			||||||
0, 293940, 192000, 0xb85d3e08
 | 
					0, 293940, 192000, 0xb85d3e08
 | 
				
			||||||
1, 294498, 3128, 0x9d2254d8
 | 
					1, 294498, 3128, 0xc96c55c3
 | 
				
			||||||
0, 300330, 192000, 0xdc69eba9
 | 
					0, 300330, 192000, 0xdc69eba9
 | 
				
			||||||
1, 300882, 3128, 0xe68015b0
 | 
					1, 300882, 3128, 0x119114d6
 | 
				
			||||||
0, 306720, 192000, 0x8955a0b3
 | 
					0, 306720, 192000, 0x8955a0b3
 | 
				
			||||||
1, 307265, 3136, 0x65d58029
 | 
					1, 307265, 3136, 0x42f3800f
 | 
				
			||||||
0, 313110, 192000, 0x714a548b
 | 
					0, 313110, 192000, 0x714a548b
 | 
				
			||||||
1, 313665, 3128, 0xcffcc48c
 | 
					1, 313665, 3128, 0x4250c4ad
 | 
				
			||||||
0, 319500, 192000, 0xc0471de9
 | 
					0, 319500, 192000, 0xc0471de9
 | 
				
			||||||
1, 320049, 3136, 0x8c704944
 | 
					1, 320049, 3136, 0x5cdd4925
 | 
				
			||||||
0, 325890, 192000, 0x2e16e039
 | 
					0, 325890, 192000, 0x2e16e039
 | 
				
			||||||
1, 326449, 3128, 0x1459231d
 | 
					1, 326449, 3128, 0xa4c12360
 | 
				
			||||||
0, 332280, 192000, 0x9fa4b033
 | 
					0, 332280, 192000, 0x9fa4b033
 | 
				
			||||||
1, 332833, 3128, 0x7dde4839
 | 
					1, 332833, 3128, 0x849f48de
 | 
				
			||||||
0, 338670, 192000, 0x4a0f9402
 | 
					0, 338670, 192000, 0x4a0f9402
 | 
				
			||||||
1, 339216, 3136, 0xbb6890e2
 | 
					1, 339216, 3136, 0x6acd8ff9
 | 
				
			||||||
0, 345060, 192000, 0x1f3e6843
 | 
					0, 345060, 192000, 0x1f3e6843
 | 
				
			||||||
1, 345616, 3128, 0xcd9a8524
 | 
					1, 345616, 3128, 0xb2758556
 | 
				
			||||||
0, 351450, 192000, 0x31774850
 | 
					0, 351450, 192000, 0x31774850
 | 
				
			||||||
1, 352000, 3128, 0xa244fc31
 | 
					1, 352000, 3128, 0x10f2fcb1
 | 
				
			||||||
0, 357840, 192000, 0x9d5336a2
 | 
					0, 357840, 192000, 0x9d5336a2
 | 
				
			||||||
1, 358384, 3136, 0x504e2bd9
 | 
					1, 358384, 3136, 0xf0f02b23
 | 
				
			||||||
0, 364230, 192000, 0xf7de27a2
 | 
					0, 364230, 192000, 0xf7de27a2
 | 
				
			||||||
1, 364784, 3128, 0x655858d8
 | 
					1, 364784, 3128, 0x64f759c6
 | 
				
			||||||
0, 370620, 192000, 0x98c717ce
 | 
					0, 370620, 192000, 0x98c717ce
 | 
				
			||||||
1, 371167, 3136, 0x46027610
 | 
					1, 371167, 3136, 0x7ec075e3
 | 
				
			||||||
0, 377010, 192000, 0x615b10b8
 | 
					0, 377010, 192000, 0x615b10b8
 | 
				
			||||||
1, 377567, 3128, 0x4192d5e3
 | 
					1, 377567, 3128, 0xf981d51e
 | 
				
			||||||
0, 383400, 192000, 0xd5bc0e7e
 | 
					0, 383400, 192000, 0xd5bc0e7e
 | 
				
			||||||
1, 383951, 3128, 0x21d2e7fe
 | 
					1, 383951, 3128, 0xc622e8b9
 | 
				
			||||||
0, 389790, 192000, 0xd5bc0e7e
 | 
					0, 389790, 192000, 0xd5bc0e7e
 | 
				
			||||||
1, 390335, 3136, 0x7c93e329
 | 
					1, 390335, 3136, 0xf632e2f8
 | 
				
			||||||
0, 396180, 192000, 0xd5bc0e7e
 | 
					0, 396180, 192000, 0xd5bc0e7e
 | 
				
			||||||
1, 396735, 3128, 0xa67718c0
 | 
					1, 396735, 3128, 0xda561864
 | 
				
			||||||
0, 402570, 192000, 0xd5bc0e7e
 | 
					0, 402570, 192000, 0xd5bc0e7e
 | 
				
			||||||
1, 403118, 3136, 0x9bb6e8a3
 | 
					1, 403118, 3136, 0x14d2e888
 | 
				
			||||||
0, 408960, 192000, 0xd5bc0e7e
 | 
					0, 408960, 192000, 0xd5bc0e7e
 | 
				
			||||||
1, 409518, 3128, 0x0933b7a6
 | 
					1, 409518, 3128, 0x015bb869
 | 
				
			||||||
0, 415350, 192000, 0xd5bc0e7e
 | 
					0, 415350, 192000, 0xd5bc0e7e
 | 
				
			||||||
1, 415902, 3128, 0x07f1fb57
 | 
					1, 415902, 3128, 0xedb1fb62
 | 
				
			||||||
0, 421740, 192000, 0xd5bc0e7e
 | 
					0, 421740, 192000, 0xd5bc0e7e
 | 
				
			||||||
1, 422286, 3136, 0x8a050cfd
 | 
					1, 422286, 3136, 0xe0560c41
 | 
				
			||||||
0, 428130, 192000, 0xd5bc0e7e
 | 
					0, 428130, 192000, 0xd5bc0e7e
 | 
				
			||||||
1, 428686, 3128, 0xdb773c0b
 | 
					1, 428686, 3128, 0x14773c9a
 | 
				
			||||||
0, 434520, 192000, 0xd5bc0e7e
 | 
					0, 434520, 192000, 0xd5bc0e7e
 | 
				
			||||||
1, 435069, 3136, 0xd1281c53
 | 
					1, 435069, 3136, 0x850f1c82
 | 
				
			||||||
0, 440910, 192000, 0xd5bc0e7e
 | 
					0, 440910, 192000, 0xd5bc0e7e
 | 
				
			||||||
1, 441469, 3128, 0x9f395324
 | 
					1, 441469, 3128, 0xb0bd5347
 | 
				
			||||||
0, 447300, 192000, 0xd5bc0e7e
 | 
					0, 447300, 192000, 0xd5bc0e7e
 | 
				
			||||||
1, 447853, 3128, 0x5f13edec
 | 
					1, 447853, 3128, 0x8f82edbf
 | 
				
			||||||
0, 453690, 192000, 0xd5bc0e7e
 | 
					0, 453690, 192000, 0xd5bc0e7e
 | 
				
			||||||
1, 454237, 3136, 0x871cbecf
 | 
					1, 454237, 3136, 0x493abee2
 | 
				
			||||||
0, 460080, 192000, 0xd5bc0e7e
 | 
					0, 460080, 192000, 0xd5bc0e7e
 | 
				
			||||||
1, 460637, 3128, 0x799eff3e
 | 
					1, 460637, 3128, 0xf5daff3f
 | 
				
			||||||
0, 466470, 192000, 0xd5bc0e7e
 | 
					0, 466470, 192000, 0xd5bc0e7e
 | 
				
			||||||
1, 467020, 3128, 0x3f902762
 | 
					1, 467020, 3128, 0x78ad2690
 | 
				
			||||||
0, 472860, 192000, 0xd5bc0e7e
 | 
					0, 472860, 192000, 0xd5bc0e7e
 | 
				
			||||||
1, 473404, 3136, 0x29f8bb04
 | 
					1, 473404, 3136, 0x490ebafc
 | 
				
			||||||
0, 479250, 192000, 0xd5bc0e7e
 | 
					0, 479250, 192000, 0xd5bc0e7e
 | 
				
			||||||
1, 479804, 3128, 0xf3523ee9
 | 
					1, 479804, 3128, 0x70333fd2
 | 
				
			||||||
0, 485640, 192000, 0xd5bc0e7e
 | 
					0, 485640, 192000, 0xd5bc0e7e
 | 
				
			||||||
1, 486188, 3136, 0x4405c435
 | 
					1, 486188, 3136, 0x8cb1c350
 | 
				
			||||||
0, 492030, 192000, 0xd5bc0e7e
 | 
					0, 492030, 192000, 0xd5bc0e7e
 | 
				
			||||||
1, 492588, 3128, 0x892957cb
 | 
					1, 492588, 3128, 0x8bd057cb
 | 
				
			||||||
0, 498420, 192000, 0xd5bc0e7e
 | 
					0, 498420, 192000, 0xd5bc0e7e
 | 
				
			||||||
1, 498971, 3128, 0xdf483dbd
 | 
					1, 498971, 3128, 0x161b3dbc
 | 
				
			||||||
0, 504810, 192000, 0xd5bc0e7e
 | 
					0, 504810, 192000, 0xd5bc0e7e
 | 
				
			||||||
1, 505355, 3136, 0x5e8ab797
 | 
					1, 505355, 3136, 0xb47fb88a
 | 
				
			||||||
0, 511200, 192000, 0xd5bc0e7e
 | 
					0, 511200, 192000, 0xd5bc0e7e
 | 
				
			||||||
1, 511755, 3128, 0x92e13820
 | 
					1, 511755, 3128, 0x474b381e
 | 
				
			||||||
0, 517590, 192000, 0xd5bc0e7e
 | 
					0, 517590, 192000, 0xd5bc0e7e
 | 
				
			||||||
1, 518139, 3136, 0xfde719b6
 | 
					1, 518139, 3136, 0x07c519bb
 | 
				
			||||||
0, 523980, 192000, 0xd5bc0e7e
 | 
					0, 523980, 192000, 0xd5bc0e7e
 | 
				
			||||||
1, 524539, 3128, 0x442f17ae
 | 
					1, 524539, 3128, 0x15b916c8
 | 
				
			||||||
0, 530370, 192000, 0xd5bc0e7e
 | 
					0, 530370, 192000, 0xd5bc0e7e
 | 
				
			||||||
1, 530922, 3128, 0x011af61f
 | 
					1, 530922, 3128, 0x0ed7f6fb
 | 
				
			||||||
0, 536760, 192000, 0xd5bc0e7e
 | 
					0, 536760, 192000, 0xd5bc0e7e
 | 
				
			||||||
1, 537306, 3136, 0x4e3e3a6d
 | 
					1, 537306, 3136, 0x54d6397b
 | 
				
			||||||
0, 543150, 192000, 0xd5bc0e7e
 | 
					0, 543150, 192000, 0xd5bc0e7e
 | 
				
			||||||
1, 543706, 3128, 0xc11242b9
 | 
					1, 543706, 3128, 0x437242bb
 | 
				
			||||||
0, 549540, 192000, 0xd5bc0e7e
 | 
					0, 549540, 192000, 0xd5bc0e7e
 | 
				
			||||||
1, 550090, 3128, 0x01415b59
 | 
					1, 550090, 3128, 0x38f05c4d
 | 
				
			||||||
0, 555930, 192000, 0xd5bc0e7e
 | 
					0, 555930, 192000, 0xd5bc0e7e
 | 
				
			||||||
1, 556473, 3136, 0x302e0e55
 | 
					1, 556473, 3136, 0x5d000e59
 | 
				
			||||||
0, 562320, 192000, 0xd5bc0e7e
 | 
					0, 562320, 192000, 0xd5bc0e7e
 | 
				
			||||||
1, 562873, 3128, 0x20522d04
 | 
					1, 562873, 3128, 0xdeab2d04
 | 
				
			||||||
0, 568710, 192000, 0xd5bc0e7e
 | 
					0, 568710, 192000, 0xd5bc0e7e
 | 
				
			||||||
1, 569257, 3136, 0x316a697d
 | 
					1, 569257, 3136, 0x77de6880
 | 
				
			||||||
0, 575100, 192000, 0xd5bc0e7e
 | 
					0, 575100, 192000, 0xd5bc0e7e
 | 
				
			||||||
1, 575657, 3128, 0x6d75ee27
 | 
					1, 575657, 3128, 0xbc87ef25
 | 
				
			||||||
0, 581490, 192000, 0xd5bc0e7e
 | 
					0, 581490, 192000, 0xd5bc0e7e
 | 
				
			||||||
1, 582041, 3128, 0xcb008ae8
 | 
					1, 582041, 3128, 0xc1638ade
 | 
				
			||||||
0, 587880, 192000, 0xd5bc0e7e
 | 
					0, 587880, 192000, 0xd5bc0e7e
 | 
				
			||||||
1, 588424, 3136, 0xd2664b51
 | 
					1, 588424, 3136, 0xcfb64a5f
 | 
				
			||||||
0, 594270, 192000, 0xd5bc0e7e
 | 
					0, 594270, 192000, 0xd5bc0e7e
 | 
				
			||||||
1, 594824, 3128, 0xdfcab728
 | 
					1, 594824, 3128, 0x90b1b826
 | 
				
			||||||
0, 600660, 192000, 0xd5bc0e7e
 | 
					0, 600660, 192000, 0xd5bc0e7e
 | 
				
			||||||
1, 601208, 3136, 0x00000000
 | 
					1, 601208, 3136, 0x00000000
 | 
				
			||||||
0, 607050, 192000, 0xd5bc0e7e
 | 
					0, 607050, 192000, 0xd5bc0e7e
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user