Compare commits
156 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
b00fc80d40 | ||
![]() |
056e9efc8e | ||
![]() |
cf43508eb3 | ||
![]() |
c9c6e5f4e8 | ||
![]() |
a5a02ea3f2 | ||
![]() |
69b6248327 | ||
![]() |
533dbaa55b | ||
![]() |
ec7f0b527c | ||
![]() |
f36cea2673 | ||
![]() |
bf7dc6b29d | ||
![]() |
596762f058 | ||
![]() |
d2c5904cab | ||
![]() |
3899b3be0c | ||
![]() |
5163de0873 | ||
![]() |
738c17b3a6 | ||
![]() |
27128d82fa | ||
![]() |
ed288c0edd | ||
![]() |
9442f50c33 | ||
![]() |
89bd2307f5 | ||
![]() |
60a1384013 | ||
![]() |
b59919afe2 | ||
![]() |
764ffdd0ec | ||
![]() |
ed9e561490 | ||
![]() |
24e0a9e451 | ||
![]() |
4d8330d095 | ||
![]() |
30d7dce94f | ||
![]() |
6e21f03547 | ||
![]() |
fa3f7391be | ||
![]() |
b7000d0517 | ||
![]() |
169e634457 | ||
![]() |
053bc4ce8b | ||
![]() |
56634b2328 | ||
![]() |
1072498081 | ||
![]() |
e952ff6981 | ||
![]() |
9cee26dfde | ||
![]() |
605f89ffc9 | ||
![]() |
21587509ec | ||
![]() |
ad6177e52c | ||
![]() |
b1ceca016a | ||
![]() |
85b1e265c9 | ||
![]() |
8449cebc90 | ||
![]() |
4a721b18ed | ||
![]() |
f0869d3721 | ||
![]() |
be82df9e12 | ||
![]() |
b70a37f854 | ||
![]() |
812a4a5813 | ||
![]() |
c9316b7c6d | ||
![]() |
8511c141e0 | ||
![]() |
2bf9a09a2c | ||
![]() |
4601765ee8 | ||
![]() |
54544100a3 | ||
![]() |
97437dada6 | ||
![]() |
c8736de331 | ||
![]() |
92f1b5df32 | ||
![]() |
82e4fd193f | ||
![]() |
3a0649ddeb | ||
![]() |
9f05400ea8 | ||
![]() |
09cfd6f597 | ||
![]() |
b2af83a9ed | ||
![]() |
f38b2a6be8 | ||
![]() |
db93a5a0c8 | ||
![]() |
b5fe6bee01 | ||
![]() |
57571f348e | ||
![]() |
ab2ea6415b | ||
![]() |
7181adab80 | ||
![]() |
bac822025e | ||
![]() |
8a8aafd2b9 | ||
![]() |
a13ef61051 | ||
![]() |
4fbc35cd53 | ||
![]() |
1ec29b2da5 | ||
![]() |
5cc5152e80 | ||
![]() |
558cf502ac | ||
![]() |
b0da6a744a | ||
![]() |
d99613bad6 | ||
![]() |
64556c200e | ||
![]() |
c026f336b9 | ||
![]() |
5c2d684986 | ||
![]() |
77dafced71 | ||
![]() |
9c96b1efb1 | ||
![]() |
30442fa217 | ||
![]() |
e7d10f5a90 | ||
![]() |
ca5dfd1550 | ||
![]() |
1979a9b4f2 | ||
![]() |
d805b8f454 | ||
![]() |
a01387bb35 | ||
![]() |
11b72c073c | ||
![]() |
bb6702f206 | ||
![]() |
dd606be909 | ||
![]() |
8c987d8291 | ||
![]() |
6ddb12b688 | ||
![]() |
c34968c6d4 | ||
![]() |
a5107aab98 | ||
![]() |
bc2dd37e4f | ||
![]() |
4482ee9d9c | ||
![]() |
2ac3aa129e | ||
![]() |
1486e99b90 | ||
![]() |
dc6ee18363 | ||
![]() |
bb0c352ec5 | ||
![]() |
1125f26f83 | ||
![]() |
c11d360ebc | ||
![]() |
dd6334a1e4 | ||
![]() |
6b1af6a328 | ||
![]() |
1656dd7a4e | ||
![]() |
144c80042b | ||
![]() |
a460d9e1f7 | ||
![]() |
94af9cf46b | ||
![]() |
46d9dd6980 | ||
![]() |
a652bb2857 | ||
![]() |
7850a9b384 | ||
![]() |
de33e8675c | ||
![]() |
fe9dae6df8 | ||
![]() |
a7d35b2f99 | ||
![]() |
526f24e3fd | ||
![]() |
a8edc1cbc7 | ||
![]() |
f45cfb4751 | ||
![]() |
566d26923e | ||
![]() |
767efcb46e | ||
![]() |
cb9ccc89c5 | ||
![]() |
5925e25218 | ||
![]() |
303e48e6a2 | ||
![]() |
e30e0a16af | ||
![]() |
210d8f4ca2 | ||
![]() |
cc4718196a | ||
![]() |
f629fcd308 | ||
![]() |
b8fa424ce2 | ||
![]() |
3af3a871af | ||
![]() |
82d7ad3344 | ||
![]() |
c5388d680e | ||
![]() |
8abaa83d2c | ||
![]() |
8e0a53bd34 | ||
![]() |
ba19cb6885 | ||
![]() |
3b80fb50d8 | ||
![]() |
fe7deb7cc4 | ||
![]() |
44b3f05309 | ||
![]() |
dc3ab8ca43 | ||
![]() |
e308a91c9c | ||
![]() |
207db36a4f | ||
![]() |
9bf76932e5 | ||
![]() |
91f9c7917c | ||
![]() |
fa75093381 | ||
![]() |
baec70e16f | ||
![]() |
2649439bbd | ||
![]() |
266ec41f77 | ||
![]() |
694279bfd2 | ||
![]() |
0ab69793fc | ||
![]() |
fa38ed8ac0 | ||
![]() |
acf2d3293c | ||
![]() |
48ba48fb13 | ||
![]() |
e1baba3ddb | ||
![]() |
399f7e0e75 | ||
![]() |
90edd5df3d | ||
![]() |
e6df35b3be | ||
![]() |
b2c9e9be87 | ||
![]() |
076a8dfd41 | ||
![]() |
a9a8e5ca99 | ||
![]() |
20ca827019 |
4
.gitignore
vendored
4
.gitignore
vendored
@@ -7,6 +7,10 @@
|
||||
*-example
|
||||
*-test
|
||||
*_g
|
||||
*.def
|
||||
*.dll
|
||||
*.lib
|
||||
*.exp
|
||||
config.*
|
||||
doc/*.1
|
||||
doc/*.html
|
||||
|
2
Doxyfile
2
Doxyfile
@@ -31,7 +31,7 @@ PROJECT_NAME = FFmpeg
|
||||
# This could be handy for archiving the generated documentation or
|
||||
# if some version control system is used.
|
||||
|
||||
PROJECT_NUMBER = 0.8.2
|
||||
PROJECT_NUMBER = 0.8.4
|
||||
|
||||
# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
|
||||
# base path where the generated documentation will be put.
|
||||
|
@@ -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
|
||||
Daniel Verkamp 78A6 07ED 782C 653E C628 B8B9 F0EB 8DD8 2F0E 21C7
|
||||
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
|
||||
Justin Ruggles 3136 ECC0 C10D 6C04 5F43 CA29 FCBE CD2A 3787 1EBF
|
||||
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-librtmp enable RTMP[E] support via librtmp [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-libvo-aacenc enable AAC encoding via libvo-aacenc [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_encoder_deps="libschroedinger"
|
||||
libspeex_decoder_deps="libspeex"
|
||||
libspeex_encoder_deps="libspeex"
|
||||
libtheora_encoder_deps="libtheora"
|
||||
libvo_aacenc_encoder_deps="libvo_aacenc"
|
||||
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}
|
||||
|
||||
@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?
|
||||
|
||||
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,
|
||||
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.
|
||||
@item -debug
|
||||
@item -debug @var{category}
|
||||
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
|
||||
Show benchmarking information at the end of an encode.
|
||||
Shows CPU time used and maximum memory consumption.
|
||||
|
4
ffmpeg.c
4
ffmpeg.c
@@ -343,7 +343,7 @@ typedef struct AVInputFile {
|
||||
int eof_reached; /* true if eof reached */
|
||||
int ist_index; /* index of first stream in ist_table */
|
||||
int buffer_size; /* current total buffer size */
|
||||
int nb_streams;
|
||||
int nb_streams; /* nb streams we are aware of */
|
||||
} AVInputFile;
|
||||
|
||||
#if HAVE_TERMIOS_H
|
||||
@@ -2054,7 +2054,7 @@ static int transcode(AVFormatContext **output_files,
|
||||
fi = stream_maps[i].sync_file_index;
|
||||
si = stream_maps[i].sync_stream_index;
|
||||
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);
|
||||
ret = AVERROR(EINVAL);
|
||||
goto fail;
|
||||
|
@@ -587,6 +587,7 @@ OBJS-$(CONFIG_LIBSCHROEDINGER_ENCODER) += libschroedingerenc.o \
|
||||
libschroedinger.o \
|
||||
libdirac_libschro.o
|
||||
OBJS-$(CONFIG_LIBSPEEX_DECODER) += libspeexdec.o
|
||||
OBJS-$(CONFIG_LIBSPEEX_ENCODER) += libspeexenc.o
|
||||
OBJS-$(CONFIG_LIBTHEORA_ENCODER) += libtheoraenc.o
|
||||
OBJS-$(CONFIG_LIBVO_AACENC_ENCODER) += libvo-aacenc.o mpeg4audio.o
|
||||
OBJS-$(CONFIG_LIBVO_AMRWBENC_ENCODER) += libvo-amrwbenc.o
|
||||
|
@@ -72,7 +72,7 @@ static int aac_adtstoasc_filter(AVBitStreamFilterContext *bsfc,
|
||||
int pce_size = 0;
|
||||
uint8_t pce_data[MAX_PCE_SIZE];
|
||||
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) {
|
||||
av_log_missing_feature(avctx, "PCE based channel configuration, where the PCE is not the first syntax element is", 0);
|
||||
return -1;
|
||||
|
@@ -1755,12 +1755,10 @@ static void windowing_and_mdct_ltp(AACContext *ac, float *out,
|
||||
} else {
|
||||
memset(in, 0, 448 * sizeof(float));
|
||||
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) {
|
||||
ac->dsp.vector_fmul_reverse(in + 1024, in + 1024, lwindow, 1024);
|
||||
} else {
|
||||
memcpy(in + 1024, in + 1024, 448 * sizeof(float));
|
||||
ac->dsp.vector_fmul_reverse(in + 1024 + 448, in + 1024 + 448, swindow, 128);
|
||||
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;
|
||||
enum RawDataBlockType elem_type, elem_type_prev = TYPE_END;
|
||||
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 (parse_adts_frame_header(ac, gb) < 0) {
|
||||
@@ -2109,10 +2107,12 @@ static int aac_decode_frame_int(AVCodecContext *avctx, void *data,
|
||||
|
||||
case TYPE_SCE:
|
||||
err = decode_ics(ac, &che->ch[0], gb, 0, 0);
|
||||
audio_found = 1;
|
||||
break;
|
||||
|
||||
case TYPE_CPE:
|
||||
err = decode_cpe(ac, gb, che);
|
||||
audio_found = 1;
|
||||
break;
|
||||
|
||||
case TYPE_CCE:
|
||||
@@ -2121,6 +2121,7 @@ static int aac_decode_frame_int(AVCodecContext *avctx, void *data,
|
||||
|
||||
case TYPE_LFE:
|
||||
err = decode_ics(ac, &che->ch[0], gb, 0, 0);
|
||||
audio_found = 1;
|
||||
break;
|
||||
|
||||
case TYPE_DSE:
|
||||
@@ -2197,7 +2198,7 @@ static int aac_decode_frame_int(AVCodecContext *avctx, void *data,
|
||||
samples, avctx->channels);
|
||||
}
|
||||
|
||||
if (ac->output_configured)
|
||||
if (ac->output_configured && audio_found)
|
||||
ac->output_configured = OC_LOCKED;
|
||||
|
||||
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;
|
||||
|
||||
//Remapping
|
||||
memcpy(H11[0][0], H11[0][ps->num_env_old], PS_MAX_NR_IIDICC*sizeof(H11[0][0][0]));
|
||||
memcpy(H11[1][0], H11[1][ps->num_env_old], PS_MAX_NR_IIDICC*sizeof(H11[1][0][0]));
|
||||
memcpy(H12[0][0], H12[0][ps->num_env_old], PS_MAX_NR_IIDICC*sizeof(H12[0][0][0]));
|
||||
memcpy(H12[1][0], H12[1][ps->num_env_old], PS_MAX_NR_IIDICC*sizeof(H12[1][0][0]));
|
||||
memcpy(H21[0][0], H21[0][ps->num_env_old], PS_MAX_NR_IIDICC*sizeof(H21[0][0][0]));
|
||||
memcpy(H21[1][0], H21[1][ps->num_env_old], PS_MAX_NR_IIDICC*sizeof(H21[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 (ps->num_env_old) {
|
||||
memcpy(H11[0][0], H11[0][ps->num_env_old], PS_MAX_NR_IIDICC*sizeof(H11[0][0][0]));
|
||||
memcpy(H11[1][0], H11[1][ps->num_env_old], PS_MAX_NR_IIDICC*sizeof(H11[1][0][0]));
|
||||
memcpy(H12[0][0], H12[0][ps->num_env_old], PS_MAX_NR_IIDICC*sizeof(H12[0][0][0]));
|
||||
memcpy(H12[1][0], H12[1][ps->num_env_old], PS_MAX_NR_IIDICC*sizeof(H12[1][0][0]));
|
||||
memcpy(H21[0][0], H21[0][ps->num_env_old], PS_MAX_NR_IIDICC*sizeof(H21[0][0][0]));
|
||||
memcpy(H21[1][0], H21[1][ps->num_env_old], PS_MAX_NR_IIDICC*sizeof(H21[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) {
|
||||
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);
|
||||
|
@@ -380,7 +380,7 @@ void avcodec_register_all(void)
|
||||
REGISTER_DECODER (LIBOPENCORE_AMRWB, libopencore_amrwb);
|
||||
REGISTER_DECODER (LIBOPENJPEG, libopenjpeg);
|
||||
REGISTER_ENCDEC (LIBSCHROEDINGER, libschroedinger);
|
||||
REGISTER_DECODER (LIBSPEEX, libspeex);
|
||||
REGISTER_ENCDEC (LIBSPEEX, libspeex);
|
||||
REGISTER_ENCODER (LIBTHEORA, libtheora);
|
||||
REGISTER_ENCODER (LIBVO_AACENC, libvo_aacenc);
|
||||
REGISTER_ENCODER (LIBVO_AMRWBENC, libvo_amrwbenc);
|
||||
|
@@ -56,7 +56,7 @@
|
||||
vhsub.s16 \r0, \d0, \d1 @ t3, t4, t8, t7
|
||||
vhsub.s16 \r1, \d1, \d0
|
||||
vhadd.s16 \d0, \d0, \d1 @ t1, t2, t6, t5
|
||||
vmov.i64 \d1, #0xffff<<32
|
||||
vmov.i64 \d1, #0xffff00000000
|
||||
vbit \r0, \r1, \d1
|
||||
vrev64.16 \r1, \r0 @ t7, t8, t4, t3
|
||||
vtrn.32 \r0, \r1 @ t3, t4, t7, t8
|
||||
|
@@ -2606,7 +2606,6 @@ typedef struct AVCodecContext {
|
||||
|
||||
/**
|
||||
* 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.
|
||||
* - decoding: set by libavcodec.
|
||||
*/
|
||||
|
@@ -117,7 +117,7 @@ avs_decode_frame(AVCodecContext * avctx,
|
||||
table = buf + (256 * vect_w * vect_h);
|
||||
if (sub_type != AVS_I_FRAME) {
|
||||
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;
|
||||
}
|
||||
|
||||
|
@@ -161,10 +161,14 @@ void ff_init_cabac_states(CABACContext *c){
|
||||
ff_h264_mps_state[2*i+1]= 2*mps_state[i]+1;
|
||||
|
||||
if( i ){
|
||||
ff_h264_lps_state[2*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;
|
||||
}else{
|
||||
ff_h264_lps_state[2*i+0]=
|
||||
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;
|
||||
}
|
||||
}
|
||||
@@ -190,7 +194,8 @@ int main(void){
|
||||
ff_init_cabac_states(&c);
|
||||
|
||||
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++){
|
||||
@@ -205,6 +210,7 @@ START_TIMER
|
||||
STOP_TIMER("put_cabac")
|
||||
}
|
||||
|
||||
#if 0
|
||||
for(i=0; i<SIZE; i++){
|
||||
START_TIMER
|
||||
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);
|
||||
STOP_TIMER("put_cabac_ueg")
|
||||
}
|
||||
|
||||
#endif
|
||||
put_cabac_terminate(&c, 1);
|
||||
|
||||
ff_init_cabac_decoder(&c, b, SIZE);
|
||||
|
@@ -336,7 +336,8 @@ static int cinepak_decode (CinepakContext *s)
|
||||
* 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
|
||||
* 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[12] == 0x00) &&
|
||||
(s->data[13] == 0x06) &&
|
||||
|
@@ -67,7 +67,7 @@ static int decode_frame(AVCodecContext *avctx,
|
||||
p->pict_type= AV_PICTURE_TYPE_I;
|
||||
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++){
|
||||
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;
|
||||
}
|
||||
|
||||
if ((q->subpacket[s].js_vlc_bits > 6) || (q->subpacket[s].js_vlc_bits < 0)) {
|
||||
av_log(avctx,AV_LOG_ERROR,"js_vlc_bits = %d, only >= 0 and <= 6 allowed!\n",q->subpacket[s].js_vlc_bits);
|
||||
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 >= %d and <= 6 allowed!\n",
|
||||
q->subpacket[s].js_vlc_bits, 2*q->subpacket[s].joint_stereo);
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
@@ -1650,6 +1650,7 @@ static int dca_decode_frame(AVCodecContext * avctx,
|
||||
//set AVCodec values with parsed data
|
||||
avctx->sample_rate = s->sample_rate;
|
||||
avctx->bit_rate = s->bit_rate;
|
||||
avctx->frame_size = s->sample_blocks * 32;
|
||||
|
||||
s->profile = FF_PROFILE_DTS;
|
||||
|
||||
|
@@ -120,7 +120,7 @@ static int parse_source_parameters(AVCodecContext *avctx, GetBitContext *gb,
|
||||
// chroma subsampling
|
||||
if (get_bits1(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",
|
||||
source->chroma_format);
|
||||
return -1;
|
||||
@@ -128,14 +128,14 @@ static int parse_source_parameters(AVCodecContext *avctx, GetBitContext *gb,
|
||||
|
||||
if (get_bits1(gb))
|
||||
source->interlaced = svq3_get_ue_golomb(gb);
|
||||
if (source->interlaced > 1)
|
||||
if (source->interlaced > 1U)
|
||||
return -1;
|
||||
|
||||
// frame rate
|
||||
if (get_bits1(gb)) {
|
||||
source->frame_rate_index = svq3_get_ue_golomb(gb);
|
||||
|
||||
if (source->frame_rate_index > 10)
|
||||
if (source->frame_rate_index > 10U)
|
||||
return -1;
|
||||
|
||||
if (!source->frame_rate_index) {
|
||||
@@ -156,7 +156,7 @@ static int parse_source_parameters(AVCodecContext *avctx, GetBitContext *gb,
|
||||
if (get_bits1(gb)) {
|
||||
source->aspect_ratio_index = svq3_get_ue_golomb(gb);
|
||||
|
||||
if (source->aspect_ratio_index > 6)
|
||||
if (source->aspect_ratio_index > 6U)
|
||||
return -1;
|
||||
|
||||
if (!source->aspect_ratio_index) {
|
||||
@@ -179,7 +179,7 @@ static int parse_source_parameters(AVCodecContext *avctx, GetBitContext *gb,
|
||||
if (get_bits1(gb)) {
|
||||
source->pixel_range_index = svq3_get_ue_golomb(gb);
|
||||
|
||||
if (source->pixel_range_index > 4)
|
||||
if (source->pixel_range_index > 4U)
|
||||
return -1;
|
||||
|
||||
// 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)) {
|
||||
idx = source->color_spec_index = svq3_get_ue_golomb(gb);
|
||||
|
||||
if (source->color_spec_index > 4)
|
||||
if (source->color_spec_index > 4U)
|
||||
return -1;
|
||||
|
||||
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 (get_bits1(gb)) {
|
||||
idx = svq3_get_ue_golomb(gb);
|
||||
if (idx < 3)
|
||||
if (idx < 3U)
|
||||
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)
|
||||
av_log(avctx, AV_LOG_WARNING, "Stream may have unhandled features\n");
|
||||
|
||||
if (video_format > 20)
|
||||
if (video_format > 20U)
|
||||
return -1;
|
||||
|
||||
// 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->w = region->width;
|
||||
rect->h = region->height;
|
||||
rect->nb_colors = 16;
|
||||
rect->nb_colors = (1 << region->depth);
|
||||
rect->type = SUBTITLE_BITMAP;
|
||||
rect->pict.linesize[0] = region->width;
|
||||
|
||||
|
@@ -158,9 +158,10 @@ static void fill_scaling_lists(const H264Context *h, DXVA_Qmatrix_H264 *qm)
|
||||
for (j = 0; j < 16; j++)
|
||||
qm->bScalingLists4x4[i][j] = h->pps.scaling_matrix4[i][zigzag_scan[j]];
|
||||
|
||||
for (i = 0; i < 2; i++)
|
||||
for (j = 0; j < 64; j++)
|
||||
qm->bScalingLists8x8[i][j] = h->pps.scaling_matrix8[i][ff_zigzag_direct[j]];
|
||||
for (j = 0; j < 64; j++) {
|
||||
qm->bScalingLists8x8[0][j] = h->pps.scaling_matrix8[0][ff_zigzag_direct[j]];
|
||||
qm->bScalingLists8x8[1][j] = h->pps.scaling_matrix8[3][ff_zigzag_direct[j]];
|
||||
}
|
||||
}
|
||||
|
||||
static int is_slice_short(struct dxva_context *ctx)
|
||||
|
@@ -1805,7 +1805,7 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *data_size, AVPac
|
||||
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
|
||||
//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 {
|
||||
bytes_read = 0; /* avoid warning */
|
||||
}
|
||||
@@ -1822,7 +1822,7 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *data_size, AVPac
|
||||
if(fs->ac){
|
||||
ff_init_range_decoder(&fs->c, buf_p, v);
|
||||
}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;
|
||||
}
|
||||
|
||||
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
|
||||
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];
|
||||
if(si != h->rbsp_buffer_size[bufidx])
|
||||
memset(dst + length, 0, FF_INPUT_BUFFER_PADDING_SIZE+MAX_MBPAIR_SIZE);
|
||||
|
||||
if (dst == 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");
|
||||
memcpy(dst, src, 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
|
||||
memset(h->sps_buffers, 0, sizeof(h->sps_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);
|
||||
|
||||
for(i=0; i<2; i++){
|
||||
@@ -1403,7 +1414,7 @@ static void decode_postinit(H264Context *h, int setup_finished){
|
||||
pics = 0;
|
||||
while(h->delayed_pic[pics]) pics++;
|
||||
|
||||
assert(pics <= MAX_DELAYED_PIC_COUNT);
|
||||
av_assert0(pics <= MAX_DELAYED_PIC_COUNT);
|
||||
|
||||
h->delayed_pic[pics++] = cur;
|
||||
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);
|
||||
}
|
||||
if(simple || !CONFIG_GRAY || !(s->flags&CODEC_FLAG_GRAY)){
|
||||
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);
|
||||
if (!h->sps.chroma_format_idc) {
|
||||
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] = 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++) {
|
||||
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 {
|
||||
@@ -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);
|
||||
}
|
||||
if(simple || !CONFIG_GRAY || !(s->flags&CODEC_FLAG_GRAY)){
|
||||
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);
|
||||
if (!h->sps.chroma_format_idc) {
|
||||
for (i = 0; i < 8; i++) {
|
||||
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++){
|
||||
int poc0 = h->ref_list[0][ref0].poc;
|
||||
for(ref1=ref_start; ref1 < ref_count1; ref1++){
|
||||
int poc1 = h->ref_list[1][ref1].poc;
|
||||
int td = av_clip(poc1 - poc0, -128, 127);
|
||||
int w= 32;
|
||||
if(td){
|
||||
int tb = av_clip(cur_poc - poc0, -128, 127);
|
||||
int tx = (16384 + (FFABS(td) >> 1)) / td;
|
||||
int dist_scale_factor = (tb*tx + 32) >> 8;
|
||||
if(dist_scale_factor >= -64 && dist_scale_factor <= 128)
|
||||
w = 64 - dist_scale_factor;
|
||||
int w = 32;
|
||||
if (!h->ref_list[0][ref0].long_ref && !h->ref_list[1][ref1].long_ref) {
|
||||
int poc1 = h->ref_list[1][ref1].poc;
|
||||
int td = av_clip(poc1 - poc0, -128, 127);
|
||||
if(td){
|
||||
int tb = av_clip(cur_poc - poc0, -128, 127);
|
||||
int tx = (16384 + (FFABS(td) >> 1)) / td;
|
||||
int dist_scale_factor = (tb*tx + 32) >> 8;
|
||||
if(dist_scale_factor >= -64 && dist_scale_factor <= 128)
|
||||
w = 64 - dist_scale_factor;
|
||||
}
|
||||
}
|
||||
if(field<0){
|
||||
h->implicit_weight[ref0][ref1][0]=
|
||||
@@ -2233,7 +2268,7 @@ static void idr(H264Context *h){
|
||||
static void flush_dpb(AVCodecContext *avctx){
|
||||
H264Context *h= avctx->priv_data;
|
||||
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])
|
||||
h->delayed_pic[i]->reference= 0;
|
||||
h->delayed_pic[i]= NULL;
|
||||
@@ -2638,7 +2673,10 @@ static int decode_slice_header(H264Context *h, H264Context *h0){
|
||||
h->prev_interlaced_frame = 1;
|
||||
|
||||
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 (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;
|
||||
|
||||
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--;
|
||||
}
|
||||
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_MBPAIR_SIZE (256*1024) // a tighter bound could be calculated if someone cares about a few bytes
|
||||
|
||||
/* Compiling in interlaced support reduces the speed
|
||||
* of progressive decoding by about 2%. */
|
||||
#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){
|
||||
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);
|
||||
return -1;
|
||||
}
|
||||
|
@@ -153,6 +153,13 @@ static int ir2_decode_frame(AVCodecContext *avctx,
|
||||
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];
|
||||
|
||||
/* 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++)
|
||||
buf[i] = av_reverse[buf[i]];
|
||||
#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 */
|
||||
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){
|
||||
if(FFABS(err) > 0xFFFF)
|
||||
return -0x10000;
|
||||
state->A[Q] += FFABS(err);
|
||||
err *= state->twonear;
|
||||
state->B[Q] += err;
|
||||
|
@@ -150,7 +150,7 @@ static int decode_frame(AVCodecContext *avctx,
|
||||
|
||||
if (video_type == 0 || video_type == 1) {
|
||||
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 (i = 0; i < avctx->width; i += 8)
|
||||
|
@@ -174,6 +174,5 @@ AVCodec ff_kgv1_decoder = {
|
||||
NULL,
|
||||
decode_end,
|
||||
decode_frame,
|
||||
.max_lowres = 1,
|
||||
.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:
|
||||
if(s->rgb){
|
||||
s->avctx->pix_fmt = PIX_FMT_BGRA;
|
||||
}else
|
||||
}else{
|
||||
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);
|
||||
break;
|
||||
case 0x11000000:
|
||||
@@ -327,12 +329,15 @@ int ff_mjpeg_decode_sof(MJpegDecodeContext *s)
|
||||
break;
|
||||
case 0x12111100:
|
||||
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;
|
||||
case 0x21111100:
|
||||
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;
|
||||
case 0x22111100:
|
||||
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;
|
||||
default:
|
||||
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)
|
||||
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);
|
||||
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);
|
||||
|
||||
seconds= FFUDIV(time, s->avctx->time_base.den);
|
||||
minutes= FFUDIV(seconds, 60); FFUMOD(seconds, 60);
|
||||
hours = FFUDIV(minutes, 60); FFUMOD(minutes, 60);
|
||||
minutes= FFUDIV(seconds, 60); seconds = FFUMOD(seconds, 60);
|
||||
hours = FFUDIV(minutes, 60); minutes = FFUMOD(minutes, 60);
|
||||
hours = FFUMOD(hours , 24);
|
||||
|
||||
put_bits(&s->pb, 5, hours);
|
||||
|
@@ -1809,7 +1809,7 @@ static int decode_frame(AVCodecContext * avctx,
|
||||
av_log(avctx, AV_LOG_ERROR, "incomplete frame\n");
|
||||
return -1;
|
||||
}else if(s->frame_size < buf_size){
|
||||
av_log(avctx, AV_LOG_ERROR, "incorrect frame size\n");
|
||||
av_log(avctx, AV_LOG_DEBUG, "incorrect frame size - multiple frames in buffer?\n");
|
||||
buf_size= s->frame_size;
|
||||
}
|
||||
|
||||
|
@@ -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->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)
|
||||
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){
|
||||
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)
|
||||
@@ -339,7 +340,7 @@ static void free_picture(MpegEncContext *s, Picture *pic){
|
||||
av_freep(&pic->mc_mb_var);
|
||||
av_freep(&pic->mb_mean);
|
||||
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->dct_coeff);
|
||||
av_freep(&pic->pan_scan);
|
||||
|
@@ -88,6 +88,7 @@ typedef struct Picture{
|
||||
* halfpel luma planes.
|
||||
*/
|
||||
uint8_t *interpolated[3];
|
||||
int8_t *qscale_table_base;
|
||||
int16_t (*motion_val_base[2])[2];
|
||||
uint32_t *mb_type_base;
|
||||
#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;
|
||||
int buf_size = avpkt->size;
|
||||
NellyMoserDecodeContext *s = avctx->priv_data;
|
||||
int data_max = *data_size;
|
||||
int blocks, i;
|
||||
int16_t* samples;
|
||||
*data_size = 0;
|
||||
@@ -178,6 +179,8 @@ static int decode_tag(AVCodecContext * avctx,
|
||||
*/
|
||||
|
||||
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);
|
||||
s->fmt_conv.float_to_int16(&samples[i*NELLY_SAMPLES], s->float_buf, NELLY_SAMPLES);
|
||||
*data_size += NELLY_SAMPLES*sizeof(int16_t);
|
||||
|
@@ -446,10 +446,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},
|
||||
#endif
|
||||
{"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"},
|
||||
{"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"},
|
||||
{"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"},
|
||||
|
@@ -839,7 +839,7 @@ erasure:
|
||||
|
||||
*data_size = 160 * sizeof(*outbuffer);
|
||||
|
||||
return *data_size;
|
||||
return buf_size;
|
||||
}
|
||||
|
||||
AVCodec ff_qcelp_decoder =
|
||||
|
@@ -866,6 +866,12 @@ static int init_pass2(MpegEncContext *s)
|
||||
assert(filter_size%2==1);
|
||||
|
||||
/* 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--){
|
||||
RateControlEntry *rce= &rcc->entry[i];
|
||||
|
||||
|
@@ -559,8 +559,14 @@ static int rv10_decode_packet(AVCodecContext *avctx,
|
||||
if(MPV_frame_start(s, avctx) < 0)
|
||||
return -1;
|
||||
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);
|
||||
|
||||
/* default quantization values */
|
||||
|
@@ -51,6 +51,11 @@ static int rv30_parse_slice_header(RV34DecContext *r, GetBitContext *gb, SliceIn
|
||||
skip_bits1(gb);
|
||||
si->pts = get_bits(gb, 13);
|
||||
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){
|
||||
w = r->s.avctx->extradata[6 + 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(j = 0; j < 4; j+= 2){
|
||||
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");
|
||||
return -1;
|
||||
}
|
||||
@@ -103,7 +108,7 @@ static int rv30_decode_mb_info(RV34DecContext *r)
|
||||
GetBitContext *gb = &s->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");
|
||||
return -1;
|
||||
}
|
||||
@@ -256,6 +261,7 @@ static av_cold int rv30_decode_init(AVCodecContext *avctx)
|
||||
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",
|
||||
6 + r->rpr * 2, avctx->extradata_size);
|
||||
return AVERROR(EINVAL);
|
||||
}
|
||||
r->parse_slice_header = rv30_parse_slice_header;
|
||||
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;
|
||||
}
|
||||
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;
|
||||
@@ -1436,15 +1447,17 @@ int ff_rv34_decode_frame(AVCodecContext *avctx,
|
||||
slice_count = (*buf++) + 1;
|
||||
slices_hdr = buf + 4;
|
||||
buf += 8 * slice_count;
|
||||
buf_size -= 1 + 8 * slice_count;
|
||||
}else
|
||||
slice_count = avctx->slice_count;
|
||||
|
||||
//parse first slice header to check whether this frame can be decoded
|
||||
if(get_slice_offset(avctx, slices_hdr, 0) > buf_size){
|
||||
av_log(avctx, AV_LOG_ERROR, "Slice offset is greater than frame size\n");
|
||||
if(get_slice_offset(avctx, slices_hdr, 0) < 0 ||
|
||||
get_slice_offset(avctx, slices_hdr, 0) > buf_size){
|
||||
av_log(avctx, AV_LOG_ERROR, "Slice offset is invalid\n");
|
||||
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){
|
||||
av_log(avctx, AV_LOG_ERROR, "First slice header is incorrect\n");
|
||||
return -1;
|
||||
@@ -1454,7 +1467,7 @@ int ff_rv34_decode_frame(AVCodecContext *avctx,
|
||||
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_ALL)
|
||||
return buf_size;
|
||||
return avpkt->size;
|
||||
|
||||
for(i=0; i<slice_count; i++){
|
||||
int offset= get_slice_offset(avctx, slices_hdr, i);
|
||||
@@ -1464,13 +1477,18 @@ int ff_rv34_decode_frame(AVCodecContext *avctx,
|
||||
else
|
||||
size= get_slice_offset(avctx, slices_hdr, i+1) - offset;
|
||||
|
||||
if(offset > buf_size){
|
||||
av_log(avctx, AV_LOG_ERROR, "Slice offset is greater than frame size\n");
|
||||
if(offset < 0 || offset > buf_size){
|
||||
av_log(avctx, AV_LOG_ERROR, "Slice offset is invalid\n");
|
||||
break;
|
||||
}
|
||||
|
||||
r->si.end = s->mb_width * s->mb_height;
|
||||
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);
|
||||
if(r->parse_slice_header(r, &r->s.gb, &si) < 0){
|
||||
if(i+2 < slice_count)
|
||||
@@ -1480,13 +1498,17 @@ int ff_rv34_decode_frame(AVCodecContext *avctx,
|
||||
}else
|
||||
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);
|
||||
s->mb_num_left = r->s.mb_x + r->s.mb_y*r->s.mb_width - r->si.start;
|
||||
if(last)
|
||||
break;
|
||||
}
|
||||
|
||||
if(last){
|
||||
if(last && s->current_picture_ptr){
|
||||
if(r->loop_filter)
|
||||
r->loop_filter(r, s->mb_height - 1);
|
||||
ff_er_frame_end(s);
|
||||
@@ -1503,7 +1525,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...)
|
||||
}
|
||||
return buf_size;
|
||||
return avpkt->size;
|
||||
}
|
||||
|
||||
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 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;
|
||||
if(r->s.mb_skip_run > (unsigned)s->mb_num)
|
||||
return -1;
|
||||
}
|
||||
|
||||
if(--r->s.mb_skip_run)
|
||||
return RV34_MB_SKIP;
|
||||
|
@@ -134,11 +134,13 @@ static int smacker_decode_bigtree(GetBitContext *gb, HuffContext *hc, DBCtx *ctx
|
||||
return -1;
|
||||
}
|
||||
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;
|
||||
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;
|
||||
if (i1 < 0 || i2 < 0)
|
||||
return -1;
|
||||
val = ctx->recode1[i1] | (ctx->recode2[i2] << 8);
|
||||
if(val == ctx->escapes[0]) {
|
||||
ctx->last[0] = hc->current;
|
||||
@@ -290,7 +292,8 @@ static int decode_header_trees(SmackVContext *smk) {
|
||||
smk->mmap_tbl[0] = 0;
|
||||
smk->mmap_last[0] = smk->mmap_last[1] = smk->mmap_last[2] = 1;
|
||||
} 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)) {
|
||||
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_last[0] = smk->mclr_last[1] = smk->mclr_last[2] = 1;
|
||||
} 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)) {
|
||||
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_last[0] = smk->full_last[1] = smk->full_last[2] = 1;
|
||||
} 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)) {
|
||||
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_last[0] = smk->type_last[1] = smk->type_last[2] = 1;
|
||||
} 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;
|
||||
@@ -523,8 +529,8 @@ static av_cold int decode_init(AVCodecContext *avctx)
|
||||
return -1;
|
||||
}
|
||||
|
||||
decode_header_trees(c);
|
||||
|
||||
if (decode_header_trees(c))
|
||||
return -1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -619,9 +625,9 @@ static int smka_decode_frame(AVCodecContext *avctx, void *data, int *data_size,
|
||||
if(bits) { //decode 16-bit data
|
||||
for(i = stereo; i >= 0; i--)
|
||||
pred[i] = av_bswap16(get_bits(&gb, 16));
|
||||
for(i = 0; i < stereo; i++)
|
||||
for(i = 0; i <= stereo; i++)
|
||||
*samples++ = pred[i];
|
||||
for(i = 0; i < unp_size / 2; i++) {
|
||||
for(; i < unp_size / 2; i++) {
|
||||
if(i & stereo) {
|
||||
if(vlc[2].table)
|
||||
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
|
||||
for(i = stereo; i >= 0; i--)
|
||||
pred[i] = get_bits(&gb, 8);
|
||||
for(i = 0; i < stereo; i++)
|
||||
for(i = 0; i <= stereo; i++)
|
||||
*samples8++ = pred[i];
|
||||
for(i = 0; i < unp_size; i++) {
|
||||
for(; i < unp_size; i++) {
|
||||
if(i & stereo){
|
||||
if(vlc[1].table)
|
||||
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 (; (vlc = svq3_get_ue_golomb(gb)) != 0; index++) {
|
||||
|
||||
if (vlc == INVALID_VLC)
|
||||
if (vlc < 0)
|
||||
return -1;
|
||||
|
||||
sign = (vlc & 0x1) - 1;
|
||||
@@ -239,7 +239,7 @@ static inline int svq3_decode_block(GetBitContext *gb, DCTELEM *block,
|
||||
level = ((vlc + 9) >> 2) - run;
|
||||
}
|
||||
} else {
|
||||
if (vlc < 16) {
|
||||
if (vlc < 16U) {
|
||||
run = svq3_dct_tables[intra][vlc].run;
|
||||
level = svq3_dct_tables[intra][vlc].level;
|
||||
} 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) {
|
||||
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);
|
||||
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 ((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);
|
||||
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)) {
|
||||
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);
|
||||
return -1;
|
||||
}
|
||||
@@ -755,7 +755,7 @@ static int svq3_decode_slice_header(AVCodecContext *avctx)
|
||||
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);
|
||||
return -1;
|
||||
}
|
||||
|
@@ -226,7 +226,7 @@ static av_cold int tta_decode_init(AVCodecContext * avctx)
|
||||
if (avctx->extradata_size < 30)
|
||||
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"))
|
||||
{
|
||||
/* signature */
|
||||
|
@@ -281,7 +281,8 @@ static int start_frame(AVCodecContext *avctx,
|
||||
if (!iq_matrix)
|
||||
return -1;
|
||||
memcpy(iq_matrix->ScalingList4x4, h->pps.scaling_matrix4, sizeof(iq_matrix->ScalingList4x4));
|
||||
memcpy(iq_matrix->ScalingList8x8, h->pps.scaling_matrix8, sizeof(iq_matrix->ScalingList8x8));
|
||||
memcpy(iq_matrix->ScalingList8x8[0], h->pps.scaling_matrix8[0], sizeof(iq_matrix->ScalingList8x8[0]));
|
||||
memcpy(iq_matrix->ScalingList8x8[1], h->pps.scaling_matrix8[3], sizeof(iq_matrix->ScalingList8x8[0]));
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@@ -485,8 +485,8 @@ static int decode_sequence_header_adv(VC1Context *v, GetBitContext *gb)
|
||||
if(ar && ar < 14){
|
||||
v->s.avctx->sample_aspect_ratio = ff_vc1_pixel_aspect[ar];
|
||||
}else if(ar == 15){
|
||||
w = get_bits(gb, 8);
|
||||
h = get_bits(gb, 8);
|
||||
w = get_bits(gb, 8) + 1;
|
||||
h = get_bits(gb, 8) + 1;
|
||||
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);
|
||||
|
@@ -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);
|
||||
|
||||
if (s->mb_y == s->mb_height-1) {
|
||||
if (s->mb_y == s->end_mb_y-1) {
|
||||
if (s->mb_x) {
|
||||
v->vc1dsp.vc1_h_loop_filter16(s->dest[0], s->linesize, 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);
|
||||
}
|
||||
|
||||
if (s->mb_y == s->mb_height) {
|
||||
if (s->mb_y == s->end_mb_y) {
|
||||
if (s->mb_x) {
|
||||
if (s->mb_x >= 2)
|
||||
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 {
|
||||
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];
|
||||
int mv_stride;
|
||||
|
||||
@@ -3020,7 +3020,7 @@ static void vc1_decode_i_blocks_adv(VC1Context *v)
|
||||
s->mb_x = 0;
|
||||
ff_init_block_index(s);
|
||||
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++) {
|
||||
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)
|
||||
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));
|
||||
}
|
||||
|
||||
@@ -3219,7 +3219,7 @@ static void vc1_decode_b_blocks(VC1Context *v)
|
||||
s->first_slice_line = 0;
|
||||
}
|
||||
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));
|
||||
}
|
||||
|
||||
@@ -3227,9 +3227,9 @@ static void vc1_decode_skip_blocks(VC1Context *v)
|
||||
{
|
||||
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;
|
||||
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;
|
||||
ff_init_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);
|
||||
}
|
||||
|
||||
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 = {
|
||||
"theora",
|
||||
AVMEDIA_TYPE_VIDEO,
|
||||
@@ -2332,6 +2352,7 @@ AVCodec ff_theora_decoder = {
|
||||
vp3_decode_frame,
|
||||
CODEC_CAP_DR1 | CODEC_CAP_DRAW_HORIZ_BAND | CODEC_CAP_FRAME_THREADS,
|
||||
NULL,
|
||||
.flush = vp3_decode_flush,
|
||||
.long_name = NULL_IF_CONFIG_SMALL("Theora"),
|
||||
.update_thread_context = ONLY_IF_THREADS_ENABLED(vp3_update_thread_context)
|
||||
};
|
||||
@@ -2348,6 +2369,7 @@ AVCodec ff_vp3_decoder = {
|
||||
vp3_decode_frame,
|
||||
CODEC_CAP_DR1 | CODEC_CAP_DRAW_HORIZ_BAND | CODEC_CAP_FRAME_THREADS,
|
||||
NULL,
|
||||
.flush = vp3_decode_flush,
|
||||
.long_name = NULL_IF_CONFIG_SMALL("On2 VP3"),
|
||||
.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);
|
||||
}
|
||||
|
||||
static void vp5_parse_coeff_models(VP56Context *s)
|
||||
static int vp5_parse_coeff_models(VP56Context *s)
|
||||
{
|
||||
VP56RangeCoder *c = &s->c;
|
||||
VP56Model *model = s->modelp;
|
||||
@@ -160,6 +160,7 @@ static void vp5_parse_coeff_models(VP56Context *s)
|
||||
for (ctx=0; ctx<6; ctx++)
|
||||
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);
|
||||
return 0;
|
||||
}
|
||||
|
||||
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_ref = s->framep[ref_frame];
|
||||
if (mb_type != VP56_MB_INTRA && !frame_ref->data[0])
|
||||
return;
|
||||
|
||||
ab = 6*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)
|
||||
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) {
|
||||
p->reference = 1;
|
||||
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->parse_coeff_models(s);
|
||||
if (s->parse_coeff_models(s))
|
||||
goto next;
|
||||
|
||||
memset(s->prev_dc, 0, sizeof(s->prev_dc));
|
||||
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 (s->framep[VP56_FRAME_GOLDEN]->data[0] &&
|
||||
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 (*VP56DefaultModelsInit)(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,
|
||||
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);
|
||||
}
|
||||
|
||||
static void vp6_build_huff_tree(VP56Context *s, uint8_t coeff_model[],
|
||||
const uint8_t *map, unsigned size, VLC *vlc)
|
||||
static int vp6_build_huff_tree(VP56Context *s, uint8_t coeff_model[],
|
||||
const uint8_t *map, unsigned size, VLC *vlc)
|
||||
{
|
||||
Node nodes[2*VP6_MAX_HUFF_SIZE], *tmp = &nodes[size];
|
||||
int a, b, i;
|
||||
@@ -229,12 +229,12 @@ static void vp6_build_huff_tree(VP56Context *s, uint8_t coeff_model[],
|
||||
}
|
||||
|
||||
free_vlc(vlc);
|
||||
/* then build the huffman tree accodring to probabilities */
|
||||
ff_huff_build_tree(s->avctx, vlc, size, nodes, vp6_huff_cmp,
|
||||
FF_HUFFMAN_FLAG_HNODE_FIRST);
|
||||
/* then build the huffman tree according to probabilities */
|
||||
return ff_huff_build_tree(s->avctx, vlc, size, nodes, vp6_huff_cmp,
|
||||
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;
|
||||
VP56Model *model = s->modelp;
|
||||
@@ -279,15 +279,18 @@ static void vp6_parse_coeff_models(VP56Context *s)
|
||||
|
||||
if (s->use_huffman) {
|
||||
for (pt=0; pt<2; pt++) {
|
||||
vp6_build_huff_tree(s, model->coeff_dccv[pt],
|
||||
vp6_huff_coeff_map, 12, &s->dccv_vlc[pt]);
|
||||
vp6_build_huff_tree(s, model->coeff_runv[pt],
|
||||
vp6_huff_run_map, 9, &s->runv_vlc[pt]);
|
||||
if (vp6_build_huff_tree(s, model->coeff_dccv[pt],
|
||||
vp6_huff_coeff_map, 12, &s->dccv_vlc[pt]))
|
||||
return -1;
|
||||
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 (cg = 0; cg < 6; cg++)
|
||||
vp6_build_huff_tree(s, model->coeff_ract[pt][ct][cg],
|
||||
vp6_huff_coeff_map, 12,
|
||||
&s->ract_vlc[pt][ct][cg]);
|
||||
if (vp6_build_huff_tree(s, model->coeff_ract[pt][ct][cg],
|
||||
vp6_huff_coeff_map, 12,
|
||||
&s->ract_vlc[pt][ct][cg]))
|
||||
return -1;
|
||||
}
|
||||
memset(s->nb_null, 0, sizeof(s->nb_null));
|
||||
} else {
|
||||
@@ -297,6 +300,7 @@ static void vp6_parse_coeff_models(VP56Context *s)
|
||||
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);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
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{
|
||||
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;
|
||||
if(ctx->zeroes){
|
||||
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){
|
||||
t = 0;
|
||||
ctx->zero = 0;
|
||||
}else{
|
||||
t = get_unary_0_33(gb);
|
||||
if(get_bits_count(gb) >= ctx->data_size){
|
||||
*last = 1;
|
||||
return 0;
|
||||
}
|
||||
if(get_bits_left(gb) < 0)
|
||||
goto error;
|
||||
if(t == 16) {
|
||||
t2 = get_unary_0_33(gb);
|
||||
if(t2 < 2) t += t2;
|
||||
else t += get_bits(gb, t2 - 1) | (1 << (t2 - 1));
|
||||
if(t2 < 2){
|
||||
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){
|
||||
@@ -360,9 +367,13 @@ static int wv_get_value(WavpackFrameContext *ctx, GetBitContext *gb, int channel
|
||||
}
|
||||
if(!c->error_limit){
|
||||
ret = base + get_tail(gb, add);
|
||||
if (get_bits_left(gb) <= 0)
|
||||
goto error;
|
||||
}else{
|
||||
int mid = (base*2 + add + 1) >> 1;
|
||||
while(add > c->error_limit){
|
||||
if(get_bits_left(gb) <= 0)
|
||||
goto error;
|
||||
if(get_bits1(gb)){
|
||||
add -= (mid - base);
|
||||
base = mid;
|
||||
@@ -376,6 +387,10 @@ static int wv_get_value(WavpackFrameContext *ctx, GetBitContext *gb, int channel
|
||||
if(ctx->hybrid_bitrate)
|
||||
c->slow_level += wp_log2(ret) - LEVEL_DECAY(c->slow_level);
|
||||
return sign ? ~ret : ret;
|
||||
|
||||
error:
|
||||
*last = 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
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){
|
||||
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);
|
||||
*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++;
|
||||
}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(crc != s->CRC){
|
||||
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++;
|
||||
}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(crc != s->CRC){
|
||||
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;
|
||||
if(!s->samples){
|
||||
*data_size = 0;
|
||||
return buf_size;
|
||||
return 0;
|
||||
}
|
||||
}else{
|
||||
s->samples = wc->samples;
|
||||
@@ -841,12 +862,13 @@ static int wavpack_decode_block(AVCodecContext *avctx, int block_no,
|
||||
}
|
||||
switch(id & WP_IDF_MASK){
|
||||
case WP_ID_DECTERMS:
|
||||
s->terms = size;
|
||||
if(s->terms > MAX_TERMS){
|
||||
if(size > MAX_TERMS){
|
||||
av_log(avctx, AV_LOG_ERROR, "Too many decorrelation terms\n");
|
||||
s->terms = 0;
|
||||
buf += ssize;
|
||||
continue;
|
||||
}
|
||||
s->terms = size;
|
||||
for(i = 0; i < s->terms; i++) {
|
||||
s->decorr[s->terms - i - 1].value = (*buf & 0x1F) - 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);
|
||||
else
|
||||
samplecount = wv_unpack_stereo(s, &s->gb, samples, AV_SAMPLE_FMT_FLT);
|
||||
|
||||
if (samplecount < 0)
|
||||
return -1;
|
||||
|
||||
samplecount >>= 1;
|
||||
}else{
|
||||
const int channel_stride = avctx->channels;
|
||||
@@ -1109,6 +1135,9 @@ static int wavpack_decode_block(AVCodecContext *avctx, int block_no,
|
||||
else
|
||||
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){
|
||||
int16_t *dst = (int16_t*)samples + 1;
|
||||
int16_t *src = (int16_t*)samples;
|
||||
|
@@ -97,17 +97,21 @@ static av_cold int xan_decode_init(AVCodecContext *avctx)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int xan_huffman_decode(unsigned char *dest, const unsigned char *src,
|
||||
int dest_len)
|
||||
static int xan_huffman_decode(unsigned char *dest, int dest_len,
|
||||
const unsigned char *src, int src_len)
|
||||
{
|
||||
unsigned char byte = *src++;
|
||||
unsigned char ival = byte + 0x16;
|
||||
const unsigned char * ptr = src + byte*2;
|
||||
int ptr_len = src_len - 1 - byte*2;
|
||||
unsigned char val = ival;
|
||||
unsigned char *dest_end = dest + dest_len;
|
||||
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 ) {
|
||||
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 height = s->avctx->height;
|
||||
@@ -266,13 +270,30 @@ static void xan_wc3_decode_frame(XanContext *s) {
|
||||
const unsigned char *size_segment;
|
||||
const unsigned char *vector_segment;
|
||||
const unsigned char *imagedata_segment;
|
||||
int huffman_offset, size_offset, vector_offset, imagedata_offset;
|
||||
|
||||
huffman_segment = s->buf + AV_RL16(&s->buf[0]);
|
||||
size_segment = s->buf + AV_RL16(&s->buf[2]);
|
||||
vector_segment = s->buf + AV_RL16(&s->buf[4]);
|
||||
imagedata_segment = s->buf + AV_RL16(&s->buf[6]);
|
||||
if (s->size < 8)
|
||||
return AVERROR_INVALIDDATA;
|
||||
|
||||
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)
|
||||
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;
|
||||
x = (x + size) % width;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if RUNTIME_GAMMA
|
||||
@@ -519,7 +541,8 @@ static int xan_decode_frame(AVCodecContext *avctx,
|
||||
s->buf = buf;
|
||||
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 */
|
||||
if (s->last_frame.data[0])
|
||||
@@ -564,4 +587,3 @@ AVCodec ff_xan_wc3_decoder = {
|
||||
CODEC_CAP_DR1,
|
||||
.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);
|
||||
buffer_size = FFMIN(buffer_size, ALSA_BUFFER_SIZE_MAX);
|
||||
/* TODO: maybe use ctx->max_picture_buffer somehow */
|
||||
res = snd_pcm_hw_params_set_buffer_size_near(h, hw_params, &buffer_size);
|
||||
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);
|
||||
if (!period_size)
|
||||
period_size = buffer_size / 4;
|
||||
res = snd_pcm_hw_params_set_period_size_near(h, hw_params, &period_size, NULL);
|
||||
if (res < 0) {
|
||||
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);
|
||||
|
||||
#define ALSA_BUFFER_SIZE_MAX 65536
|
||||
|
||||
typedef struct {
|
||||
AVClass *class;
|
||||
snd_pcm_t *h;
|
||||
|
@@ -242,7 +242,7 @@ static int vfw_read_header(AVFormatContext *s, AVFormatParameters *ap)
|
||||
AVStream *st;
|
||||
int devnum;
|
||||
int bisize;
|
||||
BITMAPINFO *bi;
|
||||
BITMAPINFO *bi = NULL;
|
||||
CAPTUREPARMS cparms;
|
||||
DWORD biCompression;
|
||||
WORD biBitCount;
|
||||
@@ -293,7 +293,7 @@ static int vfw_read_header(AVFormatContext *s, AVFormatParameters *ap)
|
||||
(LPARAM) videostream_cb);
|
||||
if(!ret) {
|
||||
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);
|
||||
@@ -307,7 +307,7 @@ static int vfw_read_header(AVFormatContext *s, AVFormatParameters *ap)
|
||||
/* Set video format */
|
||||
bisize = SendMessage(ctx->hwnd, WM_CAP_GET_VIDEOFORMAT, 0, 0);
|
||||
if(!bisize)
|
||||
goto fail_io;
|
||||
goto fail;
|
||||
bi = av_malloc(bisize);
|
||||
if(!bi) {
|
||||
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);
|
||||
if(!ret)
|
||||
goto fail_bi;
|
||||
goto fail;
|
||||
|
||||
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);
|
||||
if (ret < 0) {
|
||||
av_log(s, AV_LOG_ERROR, "Couldn't parse video size.\n");
|
||||
goto fail_bi;
|
||||
goto fail;
|
||||
}
|
||||
}
|
||||
#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);
|
||||
if(!ret) {
|
||||
av_log(s, AV_LOG_ERROR, "Could not set Video Format.\n");
|
||||
goto fail_bi;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
biCompression = bi->bmiHeader.biCompression;
|
||||
biBitCount = bi->bmiHeader.biBitCount;
|
||||
|
||||
av_free(bi);
|
||||
|
||||
/* Set sequence setup */
|
||||
ret = SendMessage(ctx->hwnd, WM_CAP_GET_SEQUENCE_SETUP, sizeof(cparms),
|
||||
(LPARAM) &cparms);
|
||||
if(!ret)
|
||||
goto fail_io;
|
||||
goto fail;
|
||||
|
||||
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),
|
||||
(LPARAM) &cparms);
|
||||
if(!ret)
|
||||
goto fail_io;
|
||||
goto fail;
|
||||
|
||||
codec = st->codec;
|
||||
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);
|
||||
|
||||
ctx->mutex = CreateMutex(NULL, 0, NULL);
|
||||
if(!ctx->mutex) {
|
||||
av_log(s, AV_LOG_ERROR, "Could not create Mutex.\n" );
|
||||
goto fail_io;
|
||||
goto fail;
|
||||
}
|
||||
ctx->event = CreateEvent(NULL, 1, 0, NULL);
|
||||
if(!ctx->event) {
|
||||
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);
|
||||
if(!ret) {
|
||||
av_log(s, AV_LOG_ERROR, "Could not start capture sequence.\n" );
|
||||
goto fail_io;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
fail_bi:
|
||||
av_free(bi);
|
||||
|
||||
fail_io:
|
||||
fail:
|
||||
av_freep(&bi);
|
||||
vfw_read_close(s);
|
||||
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.
|
||||
*/
|
||||
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))
|
||||
return IMGFMT_YV12;
|
||||
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)
|
||||
{
|
||||
if (fmt == IMGFMT_YV12)
|
||||
return vf->next->query_format(vf->next, IMGFMT_YV12);
|
||||
return vf_next_query_format(vf, IMGFMT_YV12);
|
||||
else
|
||||
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");
|
||||
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) {
|
||||
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) {
|
||||
ape->seektable = av_malloc(ape->seektablelength);
|
||||
if (!ape->seektable)
|
||||
return AVERROR(ENOMEM);
|
||||
for (i = 0; i < ape->seektablelength / sizeof(uint32_t); i++)
|
||||
ape->seektable[i] = avio_rl32(pb);
|
||||
}
|
||||
|
@@ -1158,7 +1158,8 @@ static int64_t asf_read_pts(AVFormatContext *s, int stream_index, int64_t *ppos,
|
||||
if (s->packet_size > 0)
|
||||
pos= (pos+s->packet_size-1-s->data_offset)/s->packet_size*s->packet_size+ s->data_offset;
|
||||
*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");
|
||||
asf_reset_header(s);
|
||||
@@ -1200,7 +1201,9 @@ static void asf_build_simple_index(AVFormatContext *s, int stream_index)
|
||||
int64_t current_pos= avio_tell(s->pb);
|
||||
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);
|
||||
|
||||
/* the data object can be followed by other top-level objects,
|
||||
@@ -1272,7 +1275,8 @@ static int asf_read_seek(AVFormatContext *s, int stream_index, int64_t pts, int
|
||||
|
||||
/* do the seek */
|
||||
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);
|
||||
return 0;
|
||||
}
|
||||
|
@@ -220,13 +220,18 @@ static int read_braindead_odml_indx(AVFormatContext *s, int frame_num){
|
||||
return -1;
|
||||
}
|
||||
|
||||
avio_seek(pb, offset+8, SEEK_SET);
|
||||
if(avio_seek(pb, offset+8, SEEK_SET) < 0)
|
||||
return -1;
|
||||
avi->odml_depth++;
|
||||
read_braindead_odml_indx(s, frame_num);
|
||||
avi->odml_depth--;
|
||||
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;
|
||||
@@ -1325,11 +1330,13 @@ static int avi_read_seek(AVFormatContext *s, int stream_index, int64_t timestamp
|
||||
/* the av_index_search_timestamp call above. */
|
||||
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 */
|
||||
/* DV demux so it can synthesize correct timestamps. */
|
||||
dv_offset_reset(avi->dv_demux, timestamp);
|
||||
|
||||
avio_seek(s->pb, pos, SEEK_SET);
|
||||
avi->stream_index= -1;
|
||||
return 0;
|
||||
}
|
||||
@@ -1380,7 +1387,8 @@ static int avi_read_seek(AVFormatContext *s, int stream_index, int64_t timestamp
|
||||
}
|
||||
|
||||
/* 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;
|
||||
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->codec_tag = 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;
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
pkt->pts = stream->read;
|
||||
pkt->size = read_size;
|
||||
|
||||
stream->read += stream->chunck_samples;
|
||||
|
@@ -20,6 +20,7 @@
|
||||
|
||||
#include "avlanguage.h"
|
||||
#include "libavutil/avstring.h"
|
||||
#include "libavutil/common.h"
|
||||
#include <stdlib.h>
|
||||
#include <stdint.h>
|
||||
#include <string.h>
|
||||
@@ -736,7 +737,7 @@ const char *av_convert_lang_to(const char *lang, enum AVLangCodespace target_cod
|
||||
{
|
||||
int i;
|
||||
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)
|
||||
return NULL;
|
||||
|
@@ -269,6 +269,10 @@ static int amf_parse_object(AVFormatContext *s, AVStream *astream, AVStream *vst
|
||||
vcodec->bit_rate = num_val * 1024.0;
|
||||
else if(!strcmp(key, "audiodatarate") && acodec && 0 <= (int)(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)
|
||||
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;
|
||||
int i;
|
||||
double framerate = 0.0;
|
||||
int metadata_size_pos, data_size;
|
||||
int64_t metadata_size_pos, data_size;
|
||||
AVDictionaryEntry *tag = NULL;
|
||||
|
||||
for(i=0; i<s->nb_streams; i++){
|
||||
|
@@ -264,7 +264,7 @@ static int gxf_header(AVFormatContext *s, AVFormatParameters *ap) {
|
||||
int map_len;
|
||||
int len;
|
||||
AVRational main_timebase = {0, 0};
|
||||
struct gxf_stream_info si;
|
||||
struct gxf_stream_info *si = s->priv_data;
|
||||
int i;
|
||||
if (!parse_packet_header(pb, &pkt_type, &map_len) || pkt_type != PKT_MAP) {
|
||||
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;
|
||||
}
|
||||
map_len -= len;
|
||||
gxf_material_tags(pb, &len, &si);
|
||||
gxf_material_tags(pb, &len, si);
|
||||
avio_skip(pb, len);
|
||||
map_len -= 2;
|
||||
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_len = avio_rb16(pb);
|
||||
len -= track_len;
|
||||
gxf_track_tags(pb, &track_len, &si);
|
||||
gxf_track_tags(pb, &track_len, si);
|
||||
avio_skip(pb, track_len);
|
||||
if (!(track_type & 0x80)) {
|
||||
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;
|
||||
st = s->streams[idx];
|
||||
if (!main_timebase.num || !main_timebase.den) {
|
||||
main_timebase.num = si.frames_per_second.den;
|
||||
main_timebase.den = si.frames_per_second.num * 2;
|
||||
main_timebase.num = si->frames_per_second.den;
|
||||
main_timebase.den = si->frames_per_second.num * 2;
|
||||
}
|
||||
st->start_time = si.first_field;
|
||||
if (si.first_field != AV_NOPTS_VALUE && si.last_field != AV_NOPTS_VALUE)
|
||||
st->duration = si.last_field - si.first_field;
|
||||
st->start_time = si->first_field;
|
||||
if (si->first_field != AV_NOPTS_VALUE && si->last_field != AV_NOPTS_VALUE)
|
||||
st->duration = si->last_field - si->first_field;
|
||||
}
|
||||
if (len < 0)
|
||||
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;
|
||||
GXFPktType pkt_type;
|
||||
int pkt_len;
|
||||
struct gxf_stream_info *si = s->priv_data;
|
||||
|
||||
while (!url_feof(pb)) {
|
||||
AVStream *st;
|
||||
int track_type, track_id, ret;
|
||||
@@ -473,6 +475,11 @@ static int gxf_packet(AVFormatContext *s, AVPacket *pkt) {
|
||||
avio_skip(pb, skip);
|
||||
pkt->stream_index = stream_index;
|
||||
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 AVERROR(EIO);
|
||||
@@ -518,7 +525,7 @@ static int64_t gxf_read_timestamp(AVFormatContext *s, int stream_index,
|
||||
AVInputFormat ff_gxf_demuxer = {
|
||||
"gxf",
|
||||
NULL_IF_CONFIG_SMALL("GXF format"),
|
||||
0,
|
||||
sizeof(struct gxf_stream_info),
|
||||
gxf_probe,
|
||||
gxf_header,
|
||||
gxf_packet,
|
||||
|
@@ -265,6 +265,8 @@ static int process_line(URLContext *h, char *line, int line_count,
|
||||
s->filesize = atoll(slash+1);
|
||||
}
|
||||
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)) {
|
||||
s->filesize = -1;
|
||||
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', '4', 'h') }, /* Apple ProRes 4444 */
|
||||
|
||||
{ CODEC_ID_MSMPEG4V3, MKTAG('3', 'I', 'V', 'D') }, /* 3ivx DivX Doctor */
|
||||
|
||||
{ CODEC_ID_NONE, 0 },
|
||||
};
|
||||
|
||||
|
@@ -206,7 +206,7 @@ static int mov_write_ac3_tag(AVIOContext *pb, MOVTrack *track)
|
||||
avio_wb32(pb, 11);
|
||||
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);
|
||||
frmsizecod = get_bits(&gbc, 6);
|
||||
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) {
|
||||
/* skip delay and quality */
|
||||
avio_skip(s->pb, 4);
|
||||
frames = 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;
|
||||
if (ret <= 0) {
|
||||
return AVERROR(EIO);
|
||||
if(ret<0)
|
||||
return ret;
|
||||
return AVERROR_EOF;
|
||||
}
|
||||
|
||||
if (ret > ID3v1_TAG_SIZE &&
|
||||
|
@@ -106,6 +106,7 @@ static int mpegps_read_header(AVFormatContext *s,
|
||||
MpegDemuxContext *m = s->priv_data;
|
||||
const char *sofdec = "Sofdec";
|
||||
int v, i = 0;
|
||||
int64_t last_pos = avio_tell(s->pb);
|
||||
|
||||
m->header_state = 0xff;
|
||||
s->ctx_flags |= AVFMTCTX_NOHEADER;
|
||||
@@ -119,6 +120,9 @@ static int mpegps_read_header(AVFormatContext *s,
|
||||
|
||||
m->sofdec = (m->sofdec == 6) ? 1 : 0;
|
||||
|
||||
if (!m->sofdec)
|
||||
avio_seek(s->pb, last_pos, SEEK_SET);
|
||||
|
||||
/* no need to do more */
|
||||
return 0;
|
||||
}
|
||||
|
@@ -1268,7 +1268,7 @@ static int handle_packet(MpegTSContext *ts, const uint8_t *packet)
|
||||
{
|
||||
AVFormatContext *s = ts->stream;
|
||||
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;
|
||||
int64_t pos;
|
||||
|
||||
@@ -1286,7 +1286,8 @@ static int handle_packet(MpegTSContext *ts, const uint8_t *packet)
|
||||
|
||||
/* continuity check (currently not used) */
|
||||
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;
|
||||
|
||||
/* skip adaptation field */
|
||||
|
@@ -19,6 +19,7 @@
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#include "libavutil/common.h"
|
||||
#include "mxf.h"
|
||||
|
||||
/**
|
||||
@@ -80,7 +81,7 @@ static const struct {
|
||||
{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)
|
||||
{
|
||||
|
@@ -599,7 +599,7 @@ static int mxf_read_generic_descriptor(void *arg, AVIOContext *pb, int tag, int
|
||||
default:
|
||||
/* Private uid used by SONY C0023S01.mxf */
|
||||
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)
|
||||
return -1;
|
||||
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)
|
||||
{
|
||||
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) << 24) | // units of frames
|
||||
(0 << 23) | // field phase (NTSC), b0 (PAL)
|
||||
|
@@ -29,7 +29,6 @@
|
||||
DEALINGS IN THE SOFTWARE.
|
||||
**/
|
||||
|
||||
|
||||
#include <stdio.h>
|
||||
#include "oggdec.h"
|
||||
#include "avformat.h"
|
||||
@@ -93,14 +92,24 @@ static int ogg_restore(AVFormatContext *s, int discard)
|
||||
ogg->state = ost->next;
|
||||
|
||||
if (!discard){
|
||||
struct ogg_stream *old_streams = ogg->streams;
|
||||
|
||||
for (i = 0; i < ogg->nstreams; i++)
|
||||
av_free (ogg->streams[i].buf);
|
||||
|
||||
avio_seek (bc, ost->pos, SEEK_SET);
|
||||
ogg->curidx = ost->curidx;
|
||||
ogg->nstreams = ost->nstreams;
|
||||
memcpy(ogg->streams, ost->streams,
|
||||
ost->nstreams * sizeof(*ogg->streams));
|
||||
ogg->streams = av_realloc (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);
|
||||
|
@@ -26,6 +26,13 @@
|
||||
#include "riff.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 {
|
||||
AVPacket pkt; ///< place to store merged video frame / reordered audio data
|
||||
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 audio_framesize; /// Audio frame size from container
|
||||
int sub_packet_lengths[16]; /// Length of each subpacket
|
||||
int32_t deint_id; ///< deinterleaver used in audio stream
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
@@ -147,6 +155,7 @@ static int rm_read_audio_stream_info(AVFormatContext *s, AVIOContext *pb,
|
||||
st->codec->channels = 1;
|
||||
st->codec->codec_type = AVMEDIA_TYPE_AUDIO;
|
||||
st->codec->codec_id = CODEC_ID_RA_144;
|
||||
ast->deint_id = DEINT_ID_INT0;
|
||||
} else {
|
||||
int flavor, sub_packet_h, coded_framesize, sub_packet_size;
|
||||
int codecdata_length;
|
||||
@@ -172,17 +181,19 @@ static int rm_read_audio_stream_info(AVFormatContext *s, AVIOContext *pb,
|
||||
avio_rb32(pb);
|
||||
st->codec->channels = avio_rb16(pb);
|
||||
if (version == 5) {
|
||||
avio_rb32(pb);
|
||||
ast->deint_id = avio_rl32(pb);
|
||||
avio_read(pb, buf, 4);
|
||||
buf[4] = 0;
|
||||
} else {
|
||||
get_str8(pb, buf, sizeof(buf)); /* desc */
|
||||
ast->deint_id = AV_RL32(buf);
|
||||
get_str8(pb, buf, sizeof(buf)); /* desc */
|
||||
}
|
||||
st->codec->codec_type = AVMEDIA_TYPE_AUDIO;
|
||||
st->codec->codec_tag = AV_RL32(buf);
|
||||
st->codec->codec_id = ff_codec_get_id(ff_rm_codec_tags,
|
||||
st->codec->codec_tag);
|
||||
|
||||
switch (st->codec->codec_id) {
|
||||
case CODEC_ID_AC3:
|
||||
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;
|
||||
ast->audio_framesize = st->codec->block_align;
|
||||
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;
|
||||
case CODEC_ID_COOK:
|
||||
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)
|
||||
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;
|
||||
case CODEC_ID_AAC:
|
||||
avio_rb16(pb); avio_r8(pb);
|
||||
@@ -254,6 +251,37 @@ static int rm_read_audio_stream_info(AVFormatContext *s, AVIOContext *pb,
|
||||
default:
|
||||
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) {
|
||||
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))
|
||||
return -1; //got partial frame
|
||||
} else if (st->codec->codec_type == AVMEDIA_TYPE_AUDIO) {
|
||||
if ((st->codec->codec_id == CODEC_ID_RA_288) ||
|
||||
(st->codec->codec_id == CODEC_ID_COOK) ||
|
||||
(st->codec->codec_id == CODEC_ID_ATRAC3) ||
|
||||
(st->codec->codec_id == CODEC_ID_SIPR)) {
|
||||
if ((ast->deint_id == DEINT_ID_GENR) ||
|
||||
(ast->deint_id == DEINT_ID_INT4) ||
|
||||
(ast->deint_id == DEINT_ID_SIPR)) {
|
||||
int x;
|
||||
int sps = ast->sub_packet_size;
|
||||
int cfs = ast->coded_framesize;
|
||||
@@ -728,30 +755,30 @@ ff_rm_parse_packet (AVFormatContext *s, AVIOContext *pb,
|
||||
if (!y)
|
||||
ast->audiotimestamp = timestamp;
|
||||
|
||||
switch(st->codec->codec_id) {
|
||||
case CODEC_ID_RA_288:
|
||||
switch (ast->deint_id) {
|
||||
case DEINT_ID_INT4:
|
||||
for (x = 0; x < h/2; x++)
|
||||
avio_read(pb, ast->pkt.data+x*2*w+y*cfs, cfs);
|
||||
break;
|
||||
case CODEC_ID_ATRAC3:
|
||||
case CODEC_ID_COOK:
|
||||
case DEINT_ID_GENR:
|
||||
for (x = 0; x < w/sps; x++)
|
||||
avio_read(pb, ast->pkt.data+sps*(h*x+((h+1)/2)*(y&1)+(y>>1)), sps);
|
||||
break;
|
||||
case CODEC_ID_SIPR:
|
||||
case DEINT_ID_SIPR:
|
||||
avio_read(pb, ast->pkt.data + y * w, w);
|
||||
break;
|
||||
}
|
||||
|
||||
if (++(ast->sub_packet_cnt) < h)
|
||||
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);
|
||||
|
||||
ast->sub_packet_cnt = 0;
|
||||
rm->audio_stream_num = st->index;
|
||||
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;
|
||||
rm->audio_stream_num = st->index;
|
||||
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);
|
||||
|
||||
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]);
|
||||
else {
|
||||
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)
|
||||
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;
|
||||
for(;;){
|
||||
int seq=1;
|
||||
|
@@ -233,10 +233,14 @@ static int asfrtp_parse_packet(AVFormatContext *s, PayloadContext *asf,
|
||||
|
||||
int cur_len = start_off + len_off - off;
|
||||
int prev_len = out_len;
|
||||
void *newbuf;
|
||||
out_len += cur_len;
|
||||
asf->buf = av_realloc(asf->buf, out_len);
|
||||
if(!asf->buf || FFMIN(cur_len, len - off)<0)
|
||||
if(FFMIN(cur_len, len - off)<0)
|
||||
return -1;
|
||||
newbuf = av_realloc(asf->buf, out_len);
|
||||
if(!newbuf)
|
||||
return -1;
|
||||
asf->buf= newbuf;
|
||||
memcpy(asf->buf + prev_len, buf + off,
|
||||
FFMIN(cur_len, len - off));
|
||||
avio_skip(pb, cur_len);
|
||||
|
@@ -111,11 +111,16 @@ static int film_read_header(AVFormatContext *s,
|
||||
film->audio_samplerate = AV_RB16(&scratch[24]);
|
||||
film->audio_channels = scratch[21];
|
||||
film->audio_bits = scratch[22];
|
||||
if (film->audio_bits == 8)
|
||||
film->audio_type = CODEC_ID_PCM_S8;
|
||||
else if (film->audio_bits == 16)
|
||||
film->audio_type = CODEC_ID_PCM_S16BE;
|
||||
else
|
||||
if (scratch[23] == 2)
|
||||
film->audio_type = CODEC_ID_ADPCM_ADX;
|
||||
else if (film->audio_channels > 0) {
|
||||
if (film->audio_bits == 8)
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -167,6 +172,8 @@ static int film_read_header(AVFormatContext *s,
|
||||
if(film->sample_count >= UINT_MAX / sizeof(film_sample))
|
||||
return -1;
|
||||
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++)
|
||||
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->audio_samplerate;
|
||||
|
||||
audio_frame_counter += (film->sample_table[i].sample_size /
|
||||
(film->audio_channels * film->audio_bits / 8));
|
||||
if (film->audio_type == CODEC_ID_ADPCM_ADX)
|
||||
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 {
|
||||
film->sample_table[i].stream = film->video_stream_index;
|
||||
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);
|
||||
film->stereo_buffer_size = sample->sample_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);
|
||||
|
@@ -286,11 +286,16 @@ static int smacker_read_packet(AVFormatContext *s, AVPacket *pkt)
|
||||
for(i = 0; i < 7; i++) {
|
||||
if(flags & 1) {
|
||||
int size;
|
||||
uint8_t *tmpbuf;
|
||||
|
||||
size = avio_rl32(s->pb) - 4;
|
||||
frame_size -= size;
|
||||
frame_size -= 4;
|
||||
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;
|
||||
ret = avio_read(s->pb, smk->bufs[smk->curstream], size);
|
||||
if(ret != size)
|
||||
@@ -299,7 +304,9 @@ static int smacker_read_packet(AVFormatContext *s, AVPacket *pkt)
|
||||
}
|
||||
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);
|
||||
if(smk->frm_size[smk->cur_frame] & 1)
|
||||
palchange |= 2;
|
||||
|
@@ -470,11 +470,12 @@ int av_open_input_stream(AVFormatContext **ic_ptr,
|
||||
else
|
||||
ic->pb = pb;
|
||||
|
||||
err = avformat_open_input(&ic, filename, fmt, &opts);
|
||||
if ((err = avformat_open_input(&ic, filename, fmt, &opts)) < 0)
|
||||
goto fail;
|
||||
ic->pb = ic->pb ? ic->pb : pb; // don't leak custom pb if it wasn't set above
|
||||
|
||||
*ic_ptr = ic;
|
||||
fail:
|
||||
*ic_ptr = ic;
|
||||
av_dict_free(&opts);
|
||||
return err;
|
||||
}
|
||||
@@ -995,7 +996,7 @@ static void compute_pkt_fields(AVFormatContext *s, AVStream *st,
|
||||
// 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.
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -1133,7 +1134,10 @@ static int av_read_frame_internal(AVFormatContext *s, AVPacket *pkt)
|
||||
if (!st->need_parsing || !st->parser) {
|
||||
/* no parsing needed: we just output the packet as is */
|
||||
/* raw data support */
|
||||
*pkt = st->cur_pkt; st->cur_pkt.data= NULL;
|
||||
*pkt = st->cur_pkt;
|
||||
st->cur_pkt.data= NULL;
|
||||
st->cur_pkt.side_data_elems = 0;
|
||||
st->cur_pkt.side_data = NULL;
|
||||
compute_pkt_fields(s, st, NULL, pkt);
|
||||
s->cur_st = NULL;
|
||||
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)
|
||||
goto end;
|
||||
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);
|
||||
ret = AVERROR(EINVAL);
|
||||
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
|
||||
* @return 0 if the value has been set, or an AVERROR code in case of
|
||||
* 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(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_h= 0,
|
||||
.comp = {
|
||||
{0,1,1,0,9}, /* Y */
|
||||
{1,1,1,0,9}, /* U */
|
||||
{2,1,1,0,9}, /* V */
|
||||
{0,1,1,0,8}, /* Y */
|
||||
{1,1,1,0,8}, /* U */
|
||||
{2,1,1,0,8}, /* V */
|
||||
},
|
||||
.flags = PIX_FMT_BE,
|
||||
},
|
||||
|
@@ -113,7 +113,7 @@ int ff_get_cpu_flags_x86(void)
|
||||
|
||||
if(max_ext_level >= 0x80000001){
|
||||
cpuid(0x80000001, eax, ebx, ecx, ext_caps);
|
||||
if (ext_caps & (1<<31))
|
||||
if (ext_caps & (1U<<31))
|
||||
rval |= AV_CPU_FLAG_3DNOW;
|
||||
if (ext_caps & (1<<30))
|
||||
rval |= AV_CPU_FLAG_3DNOWEXT;
|
||||
|
@@ -2240,6 +2240,10 @@ static void RENAME(hyscale_fast)(SwsContext *c, int16_t *dst,
|
||||
#if defined(PIC)
|
||||
DECLARE_ALIGNED(8, uint64_t, ebxsave);
|
||||
#endif
|
||||
// HACK: gcc 4.6 no longer decrements esp,
|
||||
// use this to make it reserve space for the call
|
||||
// return address
|
||||
void *dummy;
|
||||
|
||||
__asm__ volatile(
|
||||
#if defined(PIC)
|
||||
@@ -2291,6 +2295,7 @@ static void RENAME(hyscale_fast)(SwsContext *c, int16_t *dst,
|
||||
#if defined(PIC)
|
||||
,"m" (ebxsave)
|
||||
#endif
|
||||
,"m" (dummy)
|
||||
: "%"REG_a, "%"REG_c, "%"REG_d, "%"REG_S, "%"REG_D
|
||||
#if !defined(PIC)
|
||||
,"%"REG_b
|
||||
@@ -2312,6 +2317,10 @@ static void RENAME(hcscale_fast)(SwsContext *c, int16_t *dst1, int16_t *dst2,
|
||||
#if defined(PIC)
|
||||
DECLARE_ALIGNED(8, uint64_t, ebxsave);
|
||||
#endif
|
||||
// HACK: gcc 4.6 no longer decrements esp,
|
||||
// use this to make it reserve space for the call
|
||||
// return address
|
||||
void *dummy;
|
||||
|
||||
__asm__ volatile(
|
||||
#if defined(PIC)
|
||||
@@ -2351,6 +2360,7 @@ static void RENAME(hcscale_fast)(SwsContext *c, int16_t *dst1, int16_t *dst2,
|
||||
#if defined(PIC)
|
||||
,"m" (ebxsave)
|
||||
#endif
|
||||
,"m" (dummy)
|
||||
: "%"REG_a, "%"REG_c, "%"REG_d, "%"REG_S, "%"REG_D
|
||||
#if !defined(PIC)
|
||||
,"%"REG_b
|
||||
|
@@ -1,5 +1,5 @@
|
||||
0, 0, 192000, 0x8926d7fc
|
||||
1, 0, 47240, 0xad778a78
|
||||
1, 0, 47240, 0x9974897c
|
||||
0, 6390, 192000, 0x2506d384
|
||||
0, 12780, 192000, 0x9a8dc93a
|
||||
0, 19170, 192000, 0x4badb7f2
|
||||
@@ -15,163 +15,163 @@
|
||||
0, 83070, 192000, 0x1a3d7971
|
||||
0, 89460, 192000, 0xa1a65bd5
|
||||
0, 95850, 192000, 0x344957b9
|
||||
1, 96408, 3128, 0x4c1564ae
|
||||
1, 96408, 3128, 0x7e4064b4
|
||||
0, 102240, 192000, 0xe23b5f4e
|
||||
1, 102792, 3128, 0x34553309
|
||||
1, 102792, 3128, 0x80883301
|
||||
0, 108630, 192000, 0xb5c2710b
|
||||
1, 109176, 3136, 0xb474d246
|
||||
1, 109176, 3136, 0x2ad2d341
|
||||
0, 115020, 192000, 0x7a25938f
|
||||
1, 115576, 3128, 0x87b868ea
|
||||
1, 115576, 3128, 0xda8468e3
|
||||
0, 121410, 192000, 0x0a84e4c9
|
||||
1, 121959, 3136, 0xf1516dc3
|
||||
1, 121959, 3136, 0x9d6f6cdf
|
||||
0, 127800, 192000, 0x94209b0d
|
||||
1, 128359, 3128, 0x867563cb
|
||||
1, 128359, 3128, 0x1aaa64b5
|
||||
0, 134190, 192000, 0xf940e51f
|
||||
1, 134743, 3128, 0x5200728c
|
||||
1, 134743, 3128, 0x9182728b
|
||||
0, 140580, 192000, 0xb9fdec42
|
||||
1, 141127, 3136, 0xeda118a0
|
||||
1, 141127, 3136, 0xfa8e17b3
|
||||
0, 146970, 192000, 0x7b04a376
|
||||
1, 147527, 3128, 0x03e2c1d6
|
||||
1, 147527, 3128, 0x0dc3c1cf
|
||||
0, 153360, 192000, 0x5fe0026b
|
||||
1, 153910, 3136, 0xc3e862b6
|
||||
1, 153910, 3136, 0x0109639d
|
||||
0, 159750, 192000, 0x775aca39
|
||||
1, 160310, 3128, 0x937a13be
|
||||
1, 160310, 3128, 0x6d8a12d9
|
||||
0, 166140, 192000, 0xae14fb32
|
||||
1, 166694, 3128, 0x7b1b9577
|
||||
1, 166694, 3128, 0x4b9a9597
|
||||
0, 172530, 192000, 0x661106e5
|
||||
1, 173078, 3136, 0x042c7113
|
||||
1, 173078, 3136, 0x9112710e
|
||||
0, 178920, 192000, 0xe8658dbf
|
||||
1, 179478, 3128, 0xac48f451
|
||||
1, 179478, 3128, 0x8cccf522
|
||||
0, 185310, 192000, 0x5359f0f9
|
||||
1, 185861, 3128, 0x018fbbe9
|
||||
1, 185861, 3128, 0x6594bbf3
|
||||
0, 191700, 192000, 0xc1ec80f4
|
||||
1, 192245, 3136, 0xc62aa7ce
|
||||
1, 192245, 3136, 0xd878a7d5
|
||||
0, 198090, 192000, 0xca53806b
|
||||
1, 198645, 3128, 0x106e3924
|
||||
1, 198645, 3128, 0xaa6e3905
|
||||
0, 204480, 192000, 0xf0766b2e
|
||||
1, 205029, 3136, 0xfeb82ecc
|
||||
1, 205029, 3136, 0x2a062e04
|
||||
0, 210870, 192000, 0x39962da8
|
||||
1, 211429, 3128, 0x7e7c005b
|
||||
1, 211429, 3128, 0x84e4006a
|
||||
0, 217260, 192000, 0x4171c37f
|
||||
1, 217812, 3128, 0x949d3560
|
||||
1, 217812, 3128, 0x85183633
|
||||
0, 223650, 192000, 0x3abf3b46
|
||||
1, 224196, 3136, 0x02bd4aff
|
||||
1, 224196, 3136, 0xb62d4b02
|
||||
0, 230040, 192000, 0xecc68313
|
||||
1, 230596, 3128, 0x4aaf4715
|
||||
1, 230596, 3128, 0xe209462a
|
||||
0, 236430, 192000, 0xea339baf
|
||||
1, 236980, 3136, 0x2958825f
|
||||
1, 236980, 3136, 0x57c4824b
|
||||
0, 242820, 192000, 0x616b8f16
|
||||
1, 243380, 3128, 0x99a5914d
|
||||
1, 243380, 3128, 0x664a9163
|
||||
0, 249210, 192000, 0xf77a8581
|
||||
1, 249763, 3128, 0xe67277a4
|
||||
1, 249763, 3128, 0xb4287874
|
||||
0, 255600, 192000, 0xb315678b
|
||||
1, 256147, 3136, 0x11296973
|
||||
1, 256147, 3136, 0xde626885
|
||||
0, 261990, 192000, 0x0a4a5218
|
||||
1, 262547, 3128, 0x5cc362f7
|
||||
1, 262547, 3128, 0x919763c2
|
||||
0, 268380, 192000, 0x98802be4
|
||||
1, 268931, 3128, 0x0c5e6586
|
||||
1, 268931, 3128, 0xa4f664e1
|
||||
0, 274770, 192000, 0xa2f0fd94
|
||||
1, 275314, 3136, 0xe940b0f9
|
||||
1, 275314, 3136, 0xa0bab0d4
|
||||
0, 281160, 192000, 0x6671c84f
|
||||
1, 281714, 3128, 0x2c9292cc
|
||||
1, 281714, 3128, 0xe938939c
|
||||
0, 287550, 192000, 0x38327e31
|
||||
1, 288098, 3136, 0xa807c096
|
||||
1, 288098, 3136, 0x3679bfc7
|
||||
0, 293940, 192000, 0xb85d3e08
|
||||
1, 294498, 3128, 0x9d2254d8
|
||||
1, 294498, 3128, 0xc96c55c3
|
||||
0, 300330, 192000, 0xdc69eba9
|
||||
1, 300882, 3128, 0xe68015b0
|
||||
1, 300882, 3128, 0x119114d6
|
||||
0, 306720, 192000, 0x8955a0b3
|
||||
1, 307265, 3136, 0x65d58029
|
||||
1, 307265, 3136, 0x42f3800f
|
||||
0, 313110, 192000, 0x714a548b
|
||||
1, 313665, 3128, 0xcffcc48c
|
||||
1, 313665, 3128, 0x4250c4ad
|
||||
0, 319500, 192000, 0xc0471de9
|
||||
1, 320049, 3136, 0x8c704944
|
||||
1, 320049, 3136, 0x5cdd4925
|
||||
0, 325890, 192000, 0x2e16e039
|
||||
1, 326449, 3128, 0x1459231d
|
||||
1, 326449, 3128, 0xa4c12360
|
||||
0, 332280, 192000, 0x9fa4b033
|
||||
1, 332833, 3128, 0x7dde4839
|
||||
1, 332833, 3128, 0x849f48de
|
||||
0, 338670, 192000, 0x4a0f9402
|
||||
1, 339216, 3136, 0xbb6890e2
|
||||
1, 339216, 3136, 0x6acd8ff9
|
||||
0, 345060, 192000, 0x1f3e6843
|
||||
1, 345616, 3128, 0xcd9a8524
|
||||
1, 345616, 3128, 0xb2758556
|
||||
0, 351450, 192000, 0x31774850
|
||||
1, 352000, 3128, 0xa244fc31
|
||||
1, 352000, 3128, 0x10f2fcb1
|
||||
0, 357840, 192000, 0x9d5336a2
|
||||
1, 358384, 3136, 0x504e2bd9
|
||||
1, 358384, 3136, 0xf0f02b23
|
||||
0, 364230, 192000, 0xf7de27a2
|
||||
1, 364784, 3128, 0x655858d8
|
||||
1, 364784, 3128, 0x64f759c6
|
||||
0, 370620, 192000, 0x98c717ce
|
||||
1, 371167, 3136, 0x46027610
|
||||
1, 371167, 3136, 0x7ec075e3
|
||||
0, 377010, 192000, 0x615b10b8
|
||||
1, 377567, 3128, 0x4192d5e3
|
||||
1, 377567, 3128, 0xf981d51e
|
||||
0, 383400, 192000, 0xd5bc0e7e
|
||||
1, 383951, 3128, 0x21d2e7fe
|
||||
1, 383951, 3128, 0xc622e8b9
|
||||
0, 389790, 192000, 0xd5bc0e7e
|
||||
1, 390335, 3136, 0x7c93e329
|
||||
1, 390335, 3136, 0xf632e2f8
|
||||
0, 396180, 192000, 0xd5bc0e7e
|
||||
1, 396735, 3128, 0xa67718c0
|
||||
1, 396735, 3128, 0xda561864
|
||||
0, 402570, 192000, 0xd5bc0e7e
|
||||
1, 403118, 3136, 0x9bb6e8a3
|
||||
1, 403118, 3136, 0x14d2e888
|
||||
0, 408960, 192000, 0xd5bc0e7e
|
||||
1, 409518, 3128, 0x0933b7a6
|
||||
1, 409518, 3128, 0x015bb869
|
||||
0, 415350, 192000, 0xd5bc0e7e
|
||||
1, 415902, 3128, 0x07f1fb57
|
||||
1, 415902, 3128, 0xedb1fb62
|
||||
0, 421740, 192000, 0xd5bc0e7e
|
||||
1, 422286, 3136, 0x8a050cfd
|
||||
1, 422286, 3136, 0xe0560c41
|
||||
0, 428130, 192000, 0xd5bc0e7e
|
||||
1, 428686, 3128, 0xdb773c0b
|
||||
1, 428686, 3128, 0x14773c9a
|
||||
0, 434520, 192000, 0xd5bc0e7e
|
||||
1, 435069, 3136, 0xd1281c53
|
||||
1, 435069, 3136, 0x850f1c82
|
||||
0, 440910, 192000, 0xd5bc0e7e
|
||||
1, 441469, 3128, 0x9f395324
|
||||
1, 441469, 3128, 0xb0bd5347
|
||||
0, 447300, 192000, 0xd5bc0e7e
|
||||
1, 447853, 3128, 0x5f13edec
|
||||
1, 447853, 3128, 0x8f82edbf
|
||||
0, 453690, 192000, 0xd5bc0e7e
|
||||
1, 454237, 3136, 0x871cbecf
|
||||
1, 454237, 3136, 0x493abee2
|
||||
0, 460080, 192000, 0xd5bc0e7e
|
||||
1, 460637, 3128, 0x799eff3e
|
||||
1, 460637, 3128, 0xf5daff3f
|
||||
0, 466470, 192000, 0xd5bc0e7e
|
||||
1, 467020, 3128, 0x3f902762
|
||||
1, 467020, 3128, 0x78ad2690
|
||||
0, 472860, 192000, 0xd5bc0e7e
|
||||
1, 473404, 3136, 0x29f8bb04
|
||||
1, 473404, 3136, 0x490ebafc
|
||||
0, 479250, 192000, 0xd5bc0e7e
|
||||
1, 479804, 3128, 0xf3523ee9
|
||||
1, 479804, 3128, 0x70333fd2
|
||||
0, 485640, 192000, 0xd5bc0e7e
|
||||
1, 486188, 3136, 0x4405c435
|
||||
1, 486188, 3136, 0x8cb1c350
|
||||
0, 492030, 192000, 0xd5bc0e7e
|
||||
1, 492588, 3128, 0x892957cb
|
||||
1, 492588, 3128, 0x8bd057cb
|
||||
0, 498420, 192000, 0xd5bc0e7e
|
||||
1, 498971, 3128, 0xdf483dbd
|
||||
1, 498971, 3128, 0x161b3dbc
|
||||
0, 504810, 192000, 0xd5bc0e7e
|
||||
1, 505355, 3136, 0x5e8ab797
|
||||
1, 505355, 3136, 0xb47fb88a
|
||||
0, 511200, 192000, 0xd5bc0e7e
|
||||
1, 511755, 3128, 0x92e13820
|
||||
1, 511755, 3128, 0x474b381e
|
||||
0, 517590, 192000, 0xd5bc0e7e
|
||||
1, 518139, 3136, 0xfde719b6
|
||||
1, 518139, 3136, 0x07c519bb
|
||||
0, 523980, 192000, 0xd5bc0e7e
|
||||
1, 524539, 3128, 0x442f17ae
|
||||
1, 524539, 3128, 0x15b916c8
|
||||
0, 530370, 192000, 0xd5bc0e7e
|
||||
1, 530922, 3128, 0x011af61f
|
||||
1, 530922, 3128, 0x0ed7f6fb
|
||||
0, 536760, 192000, 0xd5bc0e7e
|
||||
1, 537306, 3136, 0x4e3e3a6d
|
||||
1, 537306, 3136, 0x54d6397b
|
||||
0, 543150, 192000, 0xd5bc0e7e
|
||||
1, 543706, 3128, 0xc11242b9
|
||||
1, 543706, 3128, 0x437242bb
|
||||
0, 549540, 192000, 0xd5bc0e7e
|
||||
1, 550090, 3128, 0x01415b59
|
||||
1, 550090, 3128, 0x38f05c4d
|
||||
0, 555930, 192000, 0xd5bc0e7e
|
||||
1, 556473, 3136, 0x302e0e55
|
||||
1, 556473, 3136, 0x5d000e59
|
||||
0, 562320, 192000, 0xd5bc0e7e
|
||||
1, 562873, 3128, 0x20522d04
|
||||
1, 562873, 3128, 0xdeab2d04
|
||||
0, 568710, 192000, 0xd5bc0e7e
|
||||
1, 569257, 3136, 0x316a697d
|
||||
1, 569257, 3136, 0x77de6880
|
||||
0, 575100, 192000, 0xd5bc0e7e
|
||||
1, 575657, 3128, 0x6d75ee27
|
||||
1, 575657, 3128, 0xbc87ef25
|
||||
0, 581490, 192000, 0xd5bc0e7e
|
||||
1, 582041, 3128, 0xcb008ae8
|
||||
1, 582041, 3128, 0xc1638ade
|
||||
0, 587880, 192000, 0xd5bc0e7e
|
||||
1, 588424, 3136, 0xd2664b51
|
||||
1, 588424, 3136, 0xcfb64a5f
|
||||
0, 594270, 192000, 0xd5bc0e7e
|
||||
1, 594824, 3128, 0xdfcab728
|
||||
1, 594824, 3128, 0x90b1b826
|
||||
0, 600660, 192000, 0xd5bc0e7e
|
||||
1, 601208, 3136, 0x00000000
|
||||
0, 607050, 192000, 0xd5bc0e7e
|
||||
|
Reference in New Issue
Block a user