Codebase list ffmpeg / 0815c3a
New upstream version 2.8.9 Andreas Cadhalpun 7 years ago
64 changed file(s) with 319 addition(s) and 128 deletion(s). Raw diff Collapse all Expand all
00 Entries are sorted chronologically from oldest to youngest within each release,
11 releases are sorted from youngest to oldest.
2
3 version 2.8.9
4 - avcodec/flacdec: Fix undefined shift in decode_subframe()
5 - avcodec/get_bits: Fix get_sbits_long(0)
6 - avformat/ffmdec: Check media type for chunks
7 - avcodec/flacdec: Fix signed integer overflow in decode_subframe_fixed()
8 - avcodec/flacdsp_template: Fix undefined shift in flac_decorrelate_indep_c
9 - avformat/oggparsespeex: Check frames_per_packet and packet_size
10 - avformat/utils: Check start/end before computing duration in update_stream_timings()
11 - avcodec/flac_parser: Update nb_headers_buffered
12 - avformat/idroqdec: Check chunk_size for being too large
13 - filmstripdec: correctly check image dimensions
14 - mss2: only use error correction for matching block counts
15 - softfloat: decrease MIN_EXP to cover full float range
16 - libopusdec: default to stereo for invalid number of channels
17 - sbgdec: prevent NULL pointer access
18 - smacker: limit recursion depth of smacker_decode_bigtree
19 - mxfdec: fix NULL pointer dereference in mxf_read_packet_old
20 - libschroedingerdec: fix leaking of framewithpts
21 - libschroedingerdec: don't produce empty frames
22 - softfloat: handle -INT_MAX correctly
23 - pnmdec: make sure v is capped by maxval
24 - smvjpegdec: make sure cur_frame is not negative
25 - icodec: correctly check avio_read return value
26 - icodec: fix leaking pkt on error
27 - dvbsubdec: fix division by zero in compute_default_clut
28 - proresdec_lgpl: explicitly check coff[3] against slice_data_size
29 - escape124: reject codebook size 0
30 - mpegts: prevent division by zero
31 - matroskadec: fix NULL pointer dereference in webm_dash_manifest_read_header
32 - mpegaudio_parser: don't return AVERROR_PATCHWELCOME
33 - mxfdec: fix NULL pointer dereference
34 - diracdec: check return code of get_buffer_with_edge
35 - ppc: pixblockdsp: do unaligned block accesses correctly again
36 - mpeg12dec: unref discarded picture from extradata
37 - cavsdec: unref frame before referencing again
38 - avformat: prevent triggering request_probe assert in ff_read_packet
39 - avformat/mpeg: Adjust vid probe threshold to correct mis-detection
40 - avcodec/rv40: Test remaining space in loop of get_dimension()
41 - avcodec/ituh263dec: Avoid spending a long time in slice sync
42 - avcodec/movtextdec: Add error message for tsmb_size check
43 - avcodec/movtextdec: Fix tsmb_size check==0 check
44 - avcodec/movtextdec: Fix potential integer overflow
45 - avcodec/sunrast: Fix input buffer pointer check
46 - avcodec/tscc: Check side data size before use
47 - avcodec/rawdec: Check side data size before use
48 - avcodec/msvideo1: Check side data size before use
49 - avcodec/qpeg: Check side data size before use
50 - avcodec/qtrle: Check side data size before use
51 - avcodec/msrle: Check side data size before use
52 - avcodec/kmvc: Check side data size before use
53 - avcodec/idcinvideo: Check side data size before use
54 - avcodec/cinepak: Check side data size before use
55 - avcodec/8bps: Check side data size before use
56 - avcodec/dvdsubdec: Fix off by 1 error
57 - avcodec/dvdsubdec: Fix buf_size check
58 - vp9: change order of operations in adapt_prob().
59 - avcodec/interplayvideo: Check side data size before use
60 - avformat/mxfdec: Check size to avoid integer overflow in mxf_read_utf16_string()
61 - avcodec/mpegvideo_enc: Clear mmx state in ff_mpv_reallocate_putbitbuffer()
62 - avcodec/utils: Clear MMX state before returning from avcodec_default_execute*()
63 - cmdutils: fix typos
64 - lavfi: fix typos
65 - lavc: fix typos
66 - tools: fix grammar error
67 - avutil/mips/generic_macros_msa: rename macro variable which causes segfault for mips r6
68 - videodsp: fix 1-byte overread in top/bottom READ_NUM_BYTES iterations.
69 - avformat/avidec: Check nb_streams in read_gab2_sub()
70 - avformat/avidec: Remove ancient assert
71 - lavc/movtextdec.c: Avoid infinite loop on invalid data.
72 - avcodec/ansi: Check dimensions
73 - avcodec/cavsdsp: use av_clip_uint8() for idct
274
375 version 2.8.8
476 - avformat/movenc: Check packet in mov_write_single_packet() too
0 2.8.8
0 2.8.9
0 2.8.8
0 2.8.9
20742074 if (!fmt || !fmt->priv_class || !AV_IS_INPUT_DEVICE(fmt->priv_class->category))
20752075 return AVERROR(EINVAL);
20762076
2077 printf("Audo-detected sources for %s:\n", fmt->name);
2077 printf("Auto-detected sources for %s:\n", fmt->name);
20782078 if (!fmt->get_device_list) {
20792079 ret = AVERROR(ENOSYS);
20802080 printf("Cannot list sources. Not implemented.\n");
21042104 if (!fmt || !fmt->priv_class || !AV_IS_OUTPUT_DEVICE(fmt->priv_class->category))
21052105 return AVERROR(EINVAL);
21062106
2107 printf("Audo-detected sinks for %s:\n", fmt->name);
2107 printf("Auto-detected sinks for %s:\n", fmt->name);
21082108 if (!fmt->get_device_list) {
21092109 ret = AVERROR(ENOSYS);
21102110 printf("Cannot list sinks. Not implemented.\n");
449449
450450 #if CONFIG_AVDEVICE
451451 /**
452 * Print a listing containing audodetected sinks of the output device.
452 * Print a listing containing autodetected sinks of the output device.
453453 * Device name with options may be passed as an argument to limit results.
454454 */
455455 int show_sinks(void *optctx, const char *opt, const char *arg);
456456
457457 /**
458 * Print a listing containing audodetected sources of the input device.
458 * Print a listing containing autodetected sources of the input device.
459459 * Device name with options may be passed as an argument to limit results.
460460 */
461461 int show_sources(void *optctx, const char *opt, const char *arg);
3030 # This could be handy for archiving the generated documentation or
3131 # if some version control system is used.
3232
33 PROJECT_NUMBER = 2.8.8
33 PROJECT_NUMBER = 2.8.9
3434
3535 # With the PROJECT_LOGO tag one can specify a logo or icon that is included
3636 # in the documentation. The maximum height of the logo should not exceed 55
119119 }
120120
121121 if (avctx->bits_per_coded_sample <= 8) {
122 int size;
122123 const uint8_t *pal = av_packet_get_side_data(avpkt,
123124 AV_PKT_DATA_PALETTE,
124 NULL);
125 if (pal) {
125 &size);
126 if (pal && size == AVPALETTE_SIZE) {
126127 frame->palette_has_changed = 1;
127128 memcpy(c->pal, pal, AVPALETTE_SIZE);
129 } else if (pal) {
130 av_log(avctx, AV_LOG_ERROR, "Palette size %d is wrong\n", size);
128131 }
129132
130133 memcpy (frame->data[1], c->pal, AVPALETTE_SIZE);
9393 int ret = ff_set_dimensions(avctx, 80 << 3, 25 << 4);
9494 if (ret < 0)
9595 return ret;
96 } else if (avctx->width % FONT_WIDTH || avctx->height % s->font_height) {
97 av_log(avctx, AV_LOG_ERROR, "Invalid dimensions %d %d\n", avctx->width, avctx->height);
98 return AVERROR(EINVAL);
9699 }
97100 return 0;
98101 }
6060 } else {
6161 put_bits(pb, ff_asv2_level_tab[31][1], ff_asv2_level_tab[31][0]);
6262 if (level < -128 || level > 127) {
63 av_log(a->avctx, AV_LOG_WARNING, "Cliping level %d, increase qscale\n", level);
63 av_log(a->avctx, AV_LOG_WARNING, "Clipping level %d, increase qscale\n", level);
6464 level = av_clip_int8(level);
6565 }
6666 asv2_put_bits(pb, 8, level & 0xFF);
12171217 h->got_keyframe = 1;
12181218 }
12191219 case PIC_PB_START_CODE:
1220 if (*got_frame)
1221 av_frame_unref(data);
12201222 *got_frame = 0;
12211223 if (!h->got_keyframe)
12221224 break;
187187 static void cavs_idct8_add_c(uint8_t *dst, int16_t *block, int stride) {
188188 int i;
189189 int16_t (*src)[8] = (int16_t(*)[8])block;
190 const uint8_t *cm = ff_crop_tab + MAX_NEG_CROP;
191190
192191 src[0][0] += 8;
193192
242241 const int b2 = a5 - a7;
243242 const int b3 = a4 - a6;
244243
245 dst[i + 0*stride] = cm[ dst[i + 0*stride] + ((b0 + b4) >> 7)];
246 dst[i + 1*stride] = cm[ dst[i + 1*stride] + ((b1 + b5) >> 7)];
247 dst[i + 2*stride] = cm[ dst[i + 2*stride] + ((b2 + b6) >> 7)];
248 dst[i + 3*stride] = cm[ dst[i + 3*stride] + ((b3 + b7) >> 7)];
249 dst[i + 4*stride] = cm[ dst[i + 4*stride] + ((b3 - b7) >> 7)];
250 dst[i + 5*stride] = cm[ dst[i + 5*stride] + ((b2 - b6) >> 7)];
251 dst[i + 6*stride] = cm[ dst[i + 6*stride] + ((b1 - b5) >> 7)];
252 dst[i + 7*stride] = cm[ dst[i + 7*stride] + ((b0 - b4) >> 7)];
244 dst[i + 0*stride] = av_clip_uint8( dst[i + 0*stride] + ((b0 + b4) >> 7));
245 dst[i + 1*stride] = av_clip_uint8( dst[i + 1*stride] + ((b1 + b5) >> 7));
246 dst[i + 2*stride] = av_clip_uint8( dst[i + 2*stride] + ((b2 + b6) >> 7));
247 dst[i + 3*stride] = av_clip_uint8( dst[i + 3*stride] + ((b3 + b7) >> 7));
248 dst[i + 4*stride] = av_clip_uint8( dst[i + 4*stride] + ((b3 - b7) >> 7));
249 dst[i + 5*stride] = av_clip_uint8( dst[i + 5*stride] + ((b2 - b6) >> 7));
250 dst[i + 6*stride] = av_clip_uint8( dst[i + 6*stride] + ((b1 - b5) >> 7));
251 dst[i + 7*stride] = av_clip_uint8( dst[i + 7*stride] + ((b0 - b4) >> 7));
253252 }
254253 }
255254
442442 return ret;
443443
444444 if (s->palette_video) {
445 const uint8_t *pal = av_packet_get_side_data(avpkt, AV_PKT_DATA_PALETTE, NULL);
446 if (pal) {
445 int size;
446 const uint8_t *pal = av_packet_get_side_data(avpkt, AV_PKT_DATA_PALETTE, &size);
447 if (pal && size == AVPALETTE_SIZE) {
447448 s->frame->palette_has_changed = 1;
448449 memcpy(s->pal, pal, AVPALETTE_SIZE);
450 } else if (pal) {
451 av_log(avctx, AV_LOG_ERROR, "Palette size %d is wrong\n", size);
449452 }
450453 }
451454
17661766 for (j = 0; j < MAX_FRAMES; j++)
17671767 if (!s->all_frames[j].avframe->data[0]) {
17681768 s->ref_pics[i] = &s->all_frames[j];
1769 get_buffer_with_edge(s->avctx, s->ref_pics[i]->avframe, AV_GET_BUFFER_FLAG_REF);
1769 ret = get_buffer_with_edge(s->avctx, s->ref_pics[i]->avframe, AV_GET_BUFFER_FLAG_REF);
1770 if (ret < 0)
1771 return ret;
17701772 break;
17711773 }
17721774
809809 list_inv[ i ] = bestv;
810810 }
811811
812 count = i - 1;
812 count = FFMAX(i - 1, 1);
813813 for (i--; i>=0; i--) {
814814 int v = i*255/count;
815815 AV_WN32(frame->data[1] + 4*list_inv[i], RGBA(v/2,v,v/2,v));
184184 for(i = 0; i < 4; i++) {
185185 if (alpha[i] != 0) {
186186 if (!color_used[colormap[i]]) {
187 level = level_map[nb_opaque_colors][j];
187 level = level_map[nb_opaque_colors - 1][j];
188188 r = (((subtitle_color >> 16) & 0xff) * level) >> 8;
189189 g = (((subtitle_color >> 8) & 0xff) * level) >> 8;
190190 b = (((subtitle_color >> 0) & 0xff) * level) >> 8;
515515 {
516516 DVDSubContext *ctx = avctx->priv_data;
517517
518 if (ctx->buf_size >= sizeof(ctx->buf) - buf_size) {
518 av_assert0(buf_size >= 0 && ctx->buf_size <= sizeof(ctx->buf));
519 if (buf_size >= sizeof(ctx->buf) - ctx->buf_size) {
519520 av_log(avctx, AV_LOG_WARNING, "Attempt to reconstruct "
520521 "too large SPU packets aborted.\n");
521522 ctx->buf_size = 0;
249249 // This codebook can be cut off at places other than
250250 // powers of 2, leaving some of the entries undefined.
251251 cb_size = get_bits_long(&gb, 20);
252 if (!cb_size) {
253 av_log(avctx, AV_LOG_ERROR, "Invalid codebook size 0.\n");
254 return AVERROR_INVALIDDATA;
255 }
252256 cb_depth = av_log2(cb_size - 1) + 1;
253257 } else {
254258 cb_depth = get_bits(&gb, 4);
585585 temp = curr->next;
586586 av_freep(&curr->link_penalty);
587587 av_free(curr);
588 fpc->nb_headers_buffered--;
588589 }
589590 fpc->headers = fpc->best_header->next;
590591 av_freep(&fpc->best_header->link_penalty);
591592 av_freep(&fpc->best_header);
593 fpc->nb_headers_buffered--;
592594 }
593595
594596 /* Find and score new headers. */
267267 int pred_order, int bps)
268268 {
269269 const int blocksize = s->blocksize;
270 int av_uninit(a), av_uninit(b), av_uninit(c), av_uninit(d), i;
270 unsigned av_uninit(a), av_uninit(b), av_uninit(c), av_uninit(d);
271 int i;
271272 int ret;
272273
273274 /* warm up samples */
446447 if (wasted) {
447448 int i;
448449 for (i = 0; i < s->blocksize; i++)
449 decoded[i] <<= wasted;
450 decoded[i] = (unsigned)decoded[i] << wasted;
450451 }
451452
452453 return 0;
5555
5656 for (j = 0; j < len; j++)
5757 for (i = 0; i < channels; i++)
58 S(samples, i, j) = in[i][j] << shift;
58 S(samples, i, j) = (int)((unsigned)in[i][j] << shift);
5959 }
6060
6161 static void FUNC(flac_decorrelate_ls_c)(uint8_t **out, int32_t **in,
373373 */
374374 static inline int get_sbits_long(GetBitContext *s, int n)
375375 {
376 // sign_extend(x, 0) is undefined
377 if (!n)
378 return 0;
379
376380 return sign_extend(get_bits_long(s, n), n);
377381 }
378382
213213 const uint8_t *buf = avpkt->data;
214214 int buf_size = avpkt->size;
215215 IdcinContext *s = avctx->priv_data;
216 const uint8_t *pal = av_packet_get_side_data(avpkt, AV_PKT_DATA_PALETTE, NULL);
216 int pal_size;
217 const uint8_t *pal = av_packet_get_side_data(avpkt, AV_PKT_DATA_PALETTE, &pal_size);
217218 AVFrame *frame = data;
218219 int ret;
219220
226227 if (idcin_decode_vlcs(s, frame))
227228 return AVERROR_INVALIDDATA;
228229
229 if (pal) {
230 if (pal && pal_size == AVPALETTE_SIZE) {
230231 frame->palette_has_changed = 1;
231232 memcpy(s->pal, pal, AVPALETTE_SIZE);
233 } else if (pal) {
234 av_log(avctx, AV_LOG_ERROR, "Palette size %d is wrong\n", pal_size);
232235 }
233236 /* make the palette available on the way out */
234237 memcpy(frame->data[1], s->pal, AVPALETTE_SIZE);
10111011 return ret;
10121012
10131013 if (!s->is_16bpp) {
1014 const uint8_t *pal = av_packet_get_side_data(avpkt, AV_PKT_DATA_PALETTE, NULL);
1015 if (pal) {
1014 int size;
1015 const uint8_t *pal = av_packet_get_side_data(avpkt, AV_PKT_DATA_PALETTE, &size);
1016 if (pal && size == AVPALETTE_SIZE) {
10161017 frame->palette_has_changed = 1;
10171018 memcpy(s->pal, pal, AVPALETTE_SIZE);
1019 } else if (pal) {
1020 av_log(avctx, AV_LOG_ERROR, "Palette size %d is wrong\n", size);
10181021 }
10191022 }
10201023
166166 /* We have a GBSC probably with GSTUFF */
167167 skip_bits(&s->gb, 16); /* Drop the zeros */
168168 left= get_bits_left(&s->gb);
169 left = FFMIN(left, 32);
169170 //MN: we must check the bits left or we might end in a infinite loop (or segfault)
170171 for(;left>13; left--){
171172 if(get_bits1(&s->gb)) break; /* Seek the '1' bit */
267267 int i, ret;
268268 int header;
269269 int blocksize;
270 const uint8_t *pal = av_packet_get_side_data(avpkt, AV_PKT_DATA_PALETTE, NULL);
270 int pal_size;
271 const uint8_t *pal = av_packet_get_side_data(avpkt, AV_PKT_DATA_PALETTE, &pal_size);
271272
272273 bytestream2_init(&ctx->g, avpkt->data, avpkt->size);
273274
302303 }
303304 }
304305
305 if (pal) {
306 if (pal && pal_size == AVPALETTE_SIZE) {
306307 frame->palette_has_changed = 1;
307308 memcpy(ctx->pal, pal, AVPALETTE_SIZE);
309 } else if (pal) {
310 av_log(avctx, AV_LOG_ERROR, "Palette size %d is wrong\n", pal_size);
308311 }
309312
310313 if (ctx->setpal) {
4444 struct libopus_context *opus = avc->priv_data;
4545 int ret, channel_map = 0, gain_db = 0, nb_streams, nb_coupled;
4646 uint8_t mapping_arr[8] = { 0, 1 }, *mapping;
47
48 avc->channels = avc->extradata_size >= 10 ? avc->extradata[9] : (avc->channels == 1) ? 1 : 2;
49 if (avc->channels <= 0) {
50 av_log(avc, AV_LOG_WARNING,
51 "Invalid number of channels %d, defaulting to stereo\n", avc->channels);
52 avc->channels = 2;
53 }
4754
4855 avc->sample_rate = 48000;
4956 avc->sample_fmt = avc->request_sample_fmt == AV_SAMPLE_FMT_FLT ?
217217 int outer = 1;
218218 SchroParseUnitContext parse_ctx;
219219 LibSchroFrameContext *framewithpts = NULL;
220 int ret;
220221
221222 *got_frame = 0;
222223
306307 /* Grab next frame to be returned from the top of the queue. */
307308 framewithpts = ff_schro_queue_pop(&p_schro_params->dec_frame_queue);
308309
309 if (framewithpts && framewithpts->frame) {
310 int ret;
310 if (framewithpts && framewithpts->frame && framewithpts->frame->components[0].stride) {
311311
312312 if ((ret = ff_get_buffer(avctx, avframe, 0)) < 0)
313 return ret;
313 goto end;
314314
315315 memcpy(avframe->data[0],
316316 framewithpts->frame->components[0].data,
331331 avframe->linesize[2] = framewithpts->frame->components[2].stride;
332332
333333 *got_frame = 1;
334
335 /* Now free the frame resources. */
336 libschroedinger_decode_frame_free(framewithpts->frame);
337 av_free(framewithpts);
338334 } else {
339335 data = NULL;
340336 *got_frame = 0;
341337 }
342 return buf_size;
338 ret = buf_size;
339 end:
340 /* Now free the frame resources. */
341 if (framewithpts && framewithpts->frame)
342 libschroedinger_decode_frame_free(framewithpts->frame);
343 av_freep(&framewithpts);
344 return ret;
343345 }
344346
345347
485485 m->size_var = 8;
486486 //size_var is equal to 8 or 16 depending on the size of box
487487
488 if (m->tracksize + tsmb_size > avpkt->size)
488 if (tsmb_size == 0) {
489 av_log(avctx, AV_LOG_ERROR, "tsmb_size is 0\n");
490 return AVERROR_INVALIDDATA;
491 }
492
493 if (tsmb_size > avpkt->size - m->tracksize)
489494 break;
490495
491496 for (size_t i = 0; i < box_count; i++) {
24282428 tc = avctx->timecode_frame_start = get_bits(&s->gb, 25);
24292429
24302430 s->closed_gop = get_bits1(&s->gb);
2431 /* broken_link indicate that after editing the
2431 /* broken_link indicates that after editing the
24322432 * reference frames of the first B-Frames after GOP I-Frame
24332433 * are missing (open gop) */
24342434 broken_link = get_bits1(&s->gb);
28232823 avctx->extradata, avctx->extradata_size);
28242824 if (*got_output) {
28252825 av_log(avctx, AV_LOG_ERROR, "picture in extradata\n");
2826 av_frame_unref(picture);
28262827 *got_output = 0;
28272828 }
28282829 s->extradata_decoded = 1;
9797 } else if (codec_id == AV_CODEC_ID_MP3ADU) {
9898 avpriv_report_missing_feature(avctx,
9999 "MP3ADU full parser");
100 return AVERROR_PATCHWELCOME;
100 return 0; /* parsers must not return error codes */
101101 }
102102
103103 break;
27862786 av_log(s->avctx, AV_LOG_ERROR, "Cannot reallocate putbit buffer\n");
27872787 return AVERROR(ENOMEM);
27882788 }
2789
2790 emms_c();
27892791
27902792 av_fast_padded_malloc(&new_buffer, &new_buffer_size,
27912793 s->avctx->internal->byte_buffer_size + size_increase);
9898 return ret;
9999
100100 if (avctx->bits_per_coded_sample > 1 && avctx->bits_per_coded_sample <= 8) {
101 const uint8_t *pal = av_packet_get_side_data(avpkt, AV_PKT_DATA_PALETTE, NULL);
101 int size;
102 const uint8_t *pal = av_packet_get_side_data(avpkt, AV_PKT_DATA_PALETTE, &size);
102103
103 if (pal) {
104 if (pal && size == AVPALETTE_SIZE) {
104105 s->frame->palette_has_changed = 1;
105106 memcpy(s->pal, pal, AVPALETTE_SIZE);
107 } else if (pal) {
108 av_log(avctx, AV_LOG_ERROR, "Palette size %d is wrong\n", size);
106109 }
107110 /* make the palette available */
108111 memcpy(s->frame->data[1], s->pal, AVPALETTE_SIZE);
421421
422422 ff_vc1_decode_blocks(v);
423423
424 ff_er_frame_end(&s->er);
424 if (v->end_mb_x == s->mb_width && s->end_mb_y == s->mb_height) {
425 ff_er_frame_end(&s->er);
426 } else {
427 av_log(v->s.avctx, AV_LOG_WARNING,
428 "disabling error correction due to block count mismatch %dx%d != %dx%d\n",
429 v->end_mb_x, s->end_mb_y, s->mb_width, s->mb_height);
430 }
425431
426432 ff_mpv_frame_end(s);
427433
305305 return ret;
306306
307307 if (s->mode_8bit) {
308 const uint8_t *pal = av_packet_get_side_data(avpkt, AV_PKT_DATA_PALETTE, NULL);
309
310 if (pal) {
308 int size;
309 const uint8_t *pal = av_packet_get_side_data(avpkt, AV_PKT_DATA_PALETTE, &size);
310
311 if (pal && size == AVPALETTE_SIZE) {
311312 memcpy(s->pal, pal, AVPALETTE_SIZE);
312313 s->frame->palette_has_changed = 1;
314 } else if (pal) {
315 av_log(avctx, AV_LOG_ERROR, "Palette size %d is wrong\n", size);
313316 }
314317 }
315318
4242 int buf_size = avpkt->size;
4343 PNMContext * const s = avctx->priv_data;
4444 AVFrame * const p = data;
45 int i, j, n, linesize, h, upgrade = 0, is_mono = 0;
45 int i, j, k, n, linesize, h, upgrade = 0, is_mono = 0;
4646 unsigned char *ptr;
4747 int components, sample_len, ret;
4848
142142 v = (*s->bytestream++)&1;
143143 } else {
144144 /* read a sequence of digits */
145 do {
145 for (k = 0; k < 5 && c <= 9; k += 1) {
146146 v = 10*v + c;
147147 c = (*s->bytestream++) - '0';
148 } while (c <= 9);
148 }
149 if (v > s->maxval) {
150 av_log(avctx, AV_LOG_ERROR, "value %d larger than maxval %d\n", v, s->maxval);
151 return AVERROR_INVALIDDATA;
152 }
149153 }
150154 if (sample_len == 16) {
151155 ((uint16_t*)ptr)[j] = (((1<<sample_len)-1)*v + (s->maxval>>1))/s->maxval;
6666 ptrdiff_t line_size)
6767 {
6868 int i;
69 vec_u8 perm = vec_lvsl(0, pixels);
7069 const vec_u8 zero = (const vec_u8)vec_splat_u8(0);
7170
7271 for (i = 0; i < 8; i++) {
72 vec_u8 perm = vec_lvsl(0, pixels);
7373 /* Read potentially unaligned pixels.
7474 * We're reading 16 pixels, and actually only want 8,
7575 * but we simply ignore the extras. */
156156 const uint8_t *s2, int stride)
157157 {
158158 int i;
159 vec_u8 perm1 = vec_lvsl(0, s1);
160 vec_u8 perm2 = vec_lvsl(0, s2);
159 vec_u8 perm;
161160 const vec_u8 zero = (const vec_u8)vec_splat_u8(0);
162161 vec_s16 shorts1, shorts2;
163162
165164 /* Read potentially unaligned pixels.
166165 * We're reading 16 pixels, and actually only want 8,
167166 * but we simply ignore the extras. */
167 perm = vec_lvsl(0, s1);
168168 vec_u8 pixl = vec_ld(0, s1);
169169 vec_u8 pixr = vec_ld(15, s1);
170 vec_u8 bytes = vec_perm(pixl, pixr, perm1);
170 vec_u8 bytes = vec_perm(pixl, pixr, perm);
171171
172172 // Convert the bytes into shorts.
173173 shorts1 = (vec_s16)vec_mergeh(zero, bytes);
174174
175175 // Do the same for the second block of pixels.
176 perm = vec_lvsl(0, s2);
176177 pixl = vec_ld(0, s2);
177178 pixr = vec_ld(15, s2);
178 bytes = vec_perm(pixl, pixr, perm2);
179 bytes = vec_perm(pixl, pixr, perm);
179180
180181 // Convert the bytes into shorts.
181182 shorts2 = (vec_s16)vec_mergeh(zero, bytes);
196197 /* Read potentially unaligned pixels.
197198 * We're reading 16 pixels, and actually only want 8,
198199 * but we simply ignore the extras. */
200 perm = vec_lvsl(0, s1);
199201 pixl = vec_ld(0, s1);
200202 pixr = vec_ld(15, s1);
201 bytes = vec_perm(pixl, pixr, perm1);
203 bytes = vec_perm(pixl, pixr, perm);
202204
203205 // Convert the bytes into shorts.
204206 shorts1 = (vec_s16)vec_mergeh(zero, bytes);
205207
206208 // Do the same for the second block of pixels.
209 perm = vec_lvsl(0, s2);
207210 pixl = vec_ld(0, s2);
208211 pixr = vec_ld(15, s2);
209 bytes = vec_perm(pixl, pixr, perm2);
212 bytes = vec_perm(pixl, pixr, perm);
210213
211214 // Convert the bytes into shorts.
212215 shorts2 = (vec_s16)vec_mergeh(zero, bytes);
624624
625625 /* if V or alpha component size is negative that means that previous
626626 component sizes are too large */
627 if (v_data_size < 0 || a_data_size < 0 || hdr_size < 6) {
627 if (v_data_size < 0 || a_data_size < 0 || hdr_size < 6 || coff[3] > slice_data_size) {
628628 av_log(avctx, AV_LOG_ERROR, "invalid data size\n");
629629 return AVERROR_INVALIDDATA;
630630 }
259259 AVFrame * const ref = a->ref;
260260 uint8_t* outdata;
261261 int delta, ret;
262 const uint8_t *pal = av_packet_get_side_data(avpkt, AV_PKT_DATA_PALETTE, NULL);
262 int pal_size;
263 const uint8_t *pal = av_packet_get_side_data(avpkt, AV_PKT_DATA_PALETTE, &pal_size);
263264
264265 if (avpkt->size < 0x86) {
265266 av_log(avctx, AV_LOG_ERROR, "Packet is too small\n");
286287 }
287288
288289 /* make the palette available on the way out */
289 if (pal) {
290 if (pal && pal_size == AVPALETTE_SIZE) {
290291 p->palette_has_changed = 1;
291292 memcpy(a->pal, pal, AVPALETTE_SIZE);
293 } else if (pal) {
294 av_log(avctx, AV_LOG_ERROR, "Palette size %d is wrong\n", pal_size);
292295 }
293296 memcpy(p->data[1], a->pal, AVPALETTE_SIZE);
294297
484484 }
485485
486486 if(has_palette) {
487 const uint8_t *pal = av_packet_get_side_data(avpkt, AV_PKT_DATA_PALETTE, NULL);
488
489 if (pal) {
487 int size;
488 const uint8_t *pal = av_packet_get_side_data(avpkt, AV_PKT_DATA_PALETTE, &size);
489
490 if (pal && size == AVPALETTE_SIZE) {
490491 s->frame->palette_has_changed = 1;
491492 memcpy(s->pal, pal, AVPALETTE_SIZE);
493 } else if (pal) {
494 av_log(avctx, AV_LOG_ERROR, "Palette size %d is wrong\n", size);
492495 }
493496
494497 /* make the palette available on the way out */
270270 }
271271
272272 if (avctx->pix_fmt == AV_PIX_FMT_PAL8) {
273 int pal_size;
273274 const uint8_t *pal = av_packet_get_side_data(avpkt, AV_PKT_DATA_PALETTE,
274 NULL);
275 &pal_size);
276 if (pal_size != AVPALETTE_SIZE) {
277 av_log(avctx, AV_LOG_ERROR, "Palette size %d is wrong\n", pal_size);
278 pal = NULL;
279 }
275280
276281 if (pal) {
277282 av_buffer_unref(&context->palette);
108108 val = dim[get_bits1(gb) - val];
109109 if(!val){
110110 do{
111 if (get_bits_left(gb) < 8)
112 return AVERROR_INVALIDDATA;
111113 t = get_bits(gb, 8);
112114 val += t << 2;
113115 }while(t == 0xFF);
130130 /**
131131 * Decode header tree
132132 */
133 static int smacker_decode_bigtree(GetBitContext *gb, HuffContext *hc, DBCtx *ctx)
133 static int smacker_decode_bigtree(GetBitContext *gb, HuffContext *hc, DBCtx *ctx, int length)
134134 {
135 if(length > 500) { // Larger length can cause segmentation faults due to too deep recursion.
136 av_log(NULL, AV_LOG_ERROR, "length too long\n");
137 return AVERROR_INVALIDDATA;
138 }
135139 if (hc->current + 1 >= hc->length) {
136140 av_log(NULL, AV_LOG_ERROR, "Tree size exceeded!\n");
137141 return AVERROR_INVALIDDATA;
160164 int r = 0, r_new, t;
161165
162166 t = hc->current++;
163 r = smacker_decode_bigtree(gb, hc, ctx);
167 r = smacker_decode_bigtree(gb, hc, ctx, length + 1);
164168 if(r < 0)
165169 return r;
166170 hc->values[t] = SMK_NODE | r;
167171 r++;
168 r_new = smacker_decode_bigtree(gb, hc, ctx);
172 r_new = smacker_decode_bigtree(gb, hc, ctx, length + 1);
169173 if (r_new < 0)
170174 return r_new;
171175 return r + r_new;
276280 goto error;
277281 }
278282
279 if (smacker_decode_bigtree(gb, &huff, &ctx) < 0)
283 if (smacker_decode_bigtree(gb, &huff, &ctx, 0) < 0)
280284 err = -1;
281285 skip_bits1(gb);
282286 if(ctx.last[0] == -1) ctx.last[0] = huff.current++;
150150 int i, cur_frame = 0, ret = 0;
151151
152152 cur_frame = avpkt->pts % s->frames_per_jpeg;
153
154 /* cur_frame is later used to calculate the buffer offset, so it mustn't be negative */
155 if (cur_frame < 0)
156 cur_frame += s->frames_per_jpeg;
153157
154158 /* Are we at the start of a block? */
155159 if (!cur_frame) {
167167 }
168168 } else {
169169 for (y = 0; y < h; y++) {
170 if (buf_end - buf < len)
170 if (buf_end - buf < alen)
171171 break;
172172 memcpy(ptr, buf, len);
173173 ptr += stride;
9898
9999 /* make the palette available on the way out */
100100 if (c->avctx->pix_fmt == AV_PIX_FMT_PAL8) {
101 const uint8_t *pal = av_packet_get_side_data(avpkt, AV_PKT_DATA_PALETTE, NULL);
101 int size;
102 const uint8_t *pal = av_packet_get_side_data(avpkt, AV_PKT_DATA_PALETTE, &size);
102103
103 if (pal) {
104 if (pal && size == AVPALETTE_SIZE) {
104105 frame->palette_has_changed = 1;
105106 memcpy(c->pal, pal, AVPALETTE_SIZE);
107 } else if (pal) {
108 av_log(avctx, AV_LOG_ERROR, "Palette size %d is wrong\n", size);
106109 }
107110 memcpy(frame->data[1], c->pal, AVPALETTE_SIZE);
108111 }
11171117 if (ret)
11181118 ret[i] = r;
11191119 }
1120 emms_c();
11201121 return 0;
11211122 }
11221123
11291130 if (ret)
11301131 ret[i] = r;
11311132 }
1133 emms_c();
11321134 return 0;
11331135 }
11341136
37243724 if (!ct)
37253725 return;
37263726
3727 update_factor = FASTDIV(update_factor * FFMIN(ct, max_count), max_count);
37273728 p1 = *p;
3728 p2 = ((ct0 << 8) + (ct >> 1)) / ct;
3729 p2 = ((((int64_t) ct0) << 8) + (ct >> 1)) / ct;
37293730 p2 = av_clip(p2, 1, 255);
3730 ct = FFMIN(ct, max_count);
3731 update_factor = FASTDIV(update_factor * ct, max_count);
37323731
37333732 // (p1 * (256 - update_factor) + p2 * update_factor + 128) >> 8
37343733 *p = p1 + (((p2 - p1) * update_factor + 128) >> 8);
192192 mov valb, [srcq+%2-1]
193193 %elif (%2-%%off) == 2
194194 mov valw, [srcq+%2-2]
195 %elifidn %1, body
195 %else
196196 mov valb, [srcq+%2-1]
197 sal vald, 16
197 ror vald, 16
198198 mov valw, [srcq+%2-3]
199 %elifidn %1, bottom
200 movd mm %+ %%mmx_idx, [srcq+%2-4]
201 %else ; top
202 movd mm %+ %%mmx_idx, [srcq+%2-3]
203199 %endif
204200 %endif ; (%2-%%off) >= 1
205201 %endmacro ; READ_NUM_BYTES
252248 mov [dstq+%2-1], valb
253249 %elif (%2-%%off) == 2
254250 mov [dstq+%2-2], valw
255 %elifidn %1, body
251 %else
256252 mov [dstq+%2-3], valw
257 sar vald, 16
253 ror vald, 16
258254 mov [dstq+%2-1], valb
259 %else
260 movd vald, mm %+ %%mmx_idx
261 %ifidn %1, bottom
262 sar vald, 8
263 %endif
264 mov [dstq+%2-3], valw
265 sar vald, 16
266 mov [dstq+%2-1], valb
255 %ifnidn %1, body
256 ror vald, 16
257 %endif
267258 %endif
268259 %endif ; (%2-%%off) >= 1
269260 %endmacro ; WRITE_NUM_BYTES
108108 if (!pan->args) {
109109 av_log(ctx, AV_LOG_ERROR,
110110 "pan filter needs a channel layout and a set "
111 "of channels definitions as parameter\n");
111 "of channel definitions as parameter\n");
112112 return AVERROR(EINVAL);
113113 }
114114 if (!args)
273273 if (link->channels > MAX_CHANNELS ||
274274 pan->nb_output_channels > MAX_CHANNELS) {
275275 av_log(ctx, AV_LOG_ERROR,
276 "af_pan support a maximum of %d channels. "
276 "af_pan supports a maximum of %d channels. "
277277 "Feel free to ask for a higher limit.\n", MAX_CHANNELS);
278278 return AVERROR_PATCHWELCOME;
279279 }
103103 #define OFFSET(x) offsetof(BlackFrameContext, x)
104104 #define FLAGS AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_FILTERING_PARAM
105105 static const AVOption blackframe_options[] = {
106 { "amount", "Percentage of the pixels that have to be below the threshold "
107 "for the frame to be considered black.", OFFSET(bamount), AV_OPT_TYPE_INT, { .i64 = 98 }, 0, 100, FLAGS },
106 { "amount", "percentage of the pixels that have to be below the threshold "
107 "for the frame to be considered black", OFFSET(bamount), AV_OPT_TYPE_INT, { .i64 = 98 }, 0, 100, FLAGS },
108108 { "threshold", "threshold below which a pixel value is considered black",
109109 OFFSET(bthresh), AV_OPT_TYPE_INT, { .i64 = 32 }, 0, 255, FLAGS },
110110 { "thresh", "threshold below which a pixel value is considered black",
10891089 goto error;
10901090
10911091 if (!avformat_open_input(&ast->sub_ctx, "", sub_demuxer, NULL)) {
1092 if (ast->sub_ctx->nb_streams != 1)
1093 goto error;
10921094 ff_read_packet(ast->sub_ctx, &ast->sub_pkt);
10931095 *st->codec = *ast->sub_ctx->streams[0]->codec;
10941096 ast->sub_ctx->streams[0]->codec->extradata = NULL;
18431845 continue;
18441846
18451847 // av_assert1(st2->codec->block_align);
1846 av_assert0(fabs(av_q2d(st2->time_base) - ast2->scale / (double)ast2->rate) < av_q2d(st2->time_base) * 0.00000001);
18471848 index = av_index_search_timestamp(st2,
18481849 av_rescale_q(timestamp,
18491850 st->time_base,
350350 }
351351 break;
352352 case MKBETAG('S', 'T', 'V', 'I'):
353 if (f_stvi++) {
353 if (f_stvi++ || codec->codec_type != AVMEDIA_TYPE_VIDEO) {
354354 ret = AVERROR(EINVAL);
355355 goto fail;
356356 }
411411 codec->refs = avio_rb32(pb);
412412 break;
413413 case MKBETAG('S', 'T', 'A', 'U'):
414 if (f_stau++) {
414 if (f_stau++ || codec->codec_type != AVMEDIA_TYPE_AUDIO) {
415415 ret = AVERROR(EINVAL);
416416 goto fail;
417417 }
437437 }
438438 break;
439439 case MKBETAG('S', '2', 'V', 'I'):
440 if (f_stvi++ || !size) {
440 if (f_stvi++ || !size || codec->codec_type != AVMEDIA_TYPE_VIDEO) {
441441 ret = AVERROR(EINVAL);
442442 goto fail;
443443 }
452452 goto fail;
453453 break;
454454 case MKBETAG('S', '2', 'A', 'U'):
455 if (f_stau++ || !size) {
455 if (f_stau++ || !size || codec->codec_type != AVMEDIA_TYPE_AUDIO) {
456456 ret = AVERROR(EINVAL);
457457 goto fail;
458458 }
2424 */
2525
2626 #include "libavutil/intreadwrite.h"
27 #include "libavutil/imgutils.h"
2728 #include "avformat.h"
2829 #include "internal.h"
2930
6768 st->codec->height = avio_rb16(pb);
6869 film->leading = avio_rb16(pb);
6970
70 if (st->codec->width * 4LL * st->codec->height >= INT_MAX) {
71 av_log(s, AV_LOG_ERROR, "dimensions too large\n");
72 return AVERROR_PATCHWELCOME;
73 }
71 if (av_image_check_size(st->codec->width, st->codec->height, 0, s) < 0)
72 return AVERROR_INVALIDDATA;
7473
7574 avpriv_set_pts_info(st, 64, 1, avio_rb16(pb));
7675
8282 avio_skip(pb, 5);
8383
8484 ico->images[i].size = avio_rl32(pb);
85 if (ico->images[i].size <= 0) {
86 av_log(s, AV_LOG_ERROR, "Invalid image size %d\n", ico->images[i].size);
87 return AVERROR_INVALIDDATA;
88 }
8589 ico->images[i].offset = avio_rl32(pb);
8690
8791 if (avio_seek(pb, ico->images[i].offset, SEEK_SET) < 0)
147151 bytestream_put_le16(&buf, 0);
148152 bytestream_put_le32(&buf, 0);
149153
150 if ((ret = avio_read(pb, buf, image->size)) < 0)
151 return ret;
154 if ((ret = avio_read(pb, buf, image->size)) != image->size) {
155 av_packet_unref(pkt);
156 return ret < 0 ? ret : AVERROR_INVALIDDATA;
157 }
152158
153159 st->codec->bits_per_coded_sample = AV_RL16(buf + 14);
154160
155155 return AVERROR(EIO);
156156 chunk_size = AV_RL32(&preamble[2]) + RoQ_CHUNK_PREAMBLE_SIZE * 2 +
157157 codebook_size;
158
159 if (chunk_size > INT_MAX)
160 return AVERROR_INVALIDDATA;
158161
159162 /* rewind */
160163 avio_seek(pb, codebook_offset, SEEK_SET);
34643464 av_log(s, AV_LOG_ERROR, "Failed to read file headers\n");
34653465 return -1;
34663466 }
3467 if (!s->nb_streams) {
3468 matroska_read_close(s);
3469 av_log(s, AV_LOG_ERROR, "No streams found\n");
3470 return AVERROR_INVALIDDATA;
3471 }
34673472
34683473 if (!matroska->is_live) {
34693474 buf = av_asprintf("%g", matroska->duration);
111111 : AVPROBE_SCORE_EXTENSION / 2; // 1 more than .mpg
112112 if ((!!vid ^ !!audio) && (audio > 4 || vid > 1) && !sys &&
113113 !pspack && p->buf_size > 2048 && vid + audio > invalid) /* PES stream */
114 return (audio > 12 || vid > 3 + 2 * invalid) ? AVPROBE_SCORE_EXTENSION + 2
114 return (audio > 12 || vid > 6 + 2 * invalid) ? AVPROBE_SCORE_EXTENSION + 2
115115 : AVPROBE_SCORE_EXTENSION / 2;
116116
117117 // 02-Penguin.flac has sys:0 priv1:0 pspack:0 vid:0 audio:1
25872587 packet_count[nb_pcrs] = nb_packets;
25882588 pcrs[nb_pcrs] = pcr_h * 300 + pcr_l;
25892589 nb_pcrs++;
2590 if (nb_pcrs >= 2)
2591 break;
2590 if (nb_pcrs >= 2) {
2591 if (pcrs[1] - pcrs[0] > 0) {
2592 /* the difference needs to be positive to make sense for bitrate computation */
2593 break;
2594 } else {
2595 av_log(ts->stream, AV_LOG_WARNING, "invalid pcr pair %"PRId64" >= %"PRId64"\n", pcrs[0], pcrs[1]);
2596 pcrs[0] = pcrs[1];
2597 packet_count[0] = packet_count[1];
2598 nb_pcrs--;
2599 }
2600 }
25922601 } else {
25932602 finished_reading_packet(s, ts->raw_packet_size);
25942603 }
381381 for (i = 0; i < s->nb_streams; i++) {
382382 MXFTrack *track = s->streams[i]->priv_data;
383383 /* SMPTE 379M 7.3 */
384 if (!memcmp(klv->key + sizeof(mxf_essence_element_key), track->track_number, sizeof(track->track_number)))
384 if (track && !memcmp(klv->key + sizeof(mxf_essence_element_key), track->track_number, sizeof(track->track_number)))
385385 return i;
386386 }
387387 /* return 0 if only one stream, for OP Atom files with 0 as track number */
825825 int ret;
826826 size_t buf_size;
827827
828 if (size < 0)
828 if (size < 0 || size > INT_MAX/2)
829829 return AVERROR(EINVAL);
830830
831831 buf_size = size + size / 2 + 1;
29992999 if (mxf->nb_index_tables >= 1 && mxf->current_edit_unit < t->nb_ptses) {
30003000 pkt->dts = mxf->current_edit_unit + t->first_dts;
30013001 pkt->pts = t->ptses[mxf->current_edit_unit];
3002 } else if (track->intra_only) {
3002 } else if (track && track->intra_only) {
30033003 /* intra-only -> PTS = EditUnit.
30043004 * let utils.c figure out DTS since it can be < PTS if low_delay = 0 (Sony IMX30) */
30053005 pkt->pts = mxf->current_edit_unit;
7373
7474 spxp->packet_size = AV_RL32(p + 56);
7575 frames_per_packet = AV_RL32(p + 64);
76 if (spxp->packet_size < 0 ||
77 frames_per_packet < 0 ||
78 spxp->packet_size * (int64_t)frames_per_packet > INT32_MAX / 256) {
79 av_log(s, AV_LOG_ERROR, "invalid packet_size, frames_per_packet %d %d\n", spxp->packet_size, frames_per_packet);
80 spxp->packet_size = 0;
81 return AVERROR_INVALIDDATA;
82 }
7683 if (frames_per_packet)
7784 spxp->packet_size *= frames_per_packet;
7885
926926 }
927927 }
928928 if (s->start_ts == AV_NOPTS_VALUE)
929 s->start_ts = s->opt_start_at_first ? s->tseq[0].ts.t : now;
929 s->start_ts = (s->opt_start_at_first && s->tseq) ? s->tseq[0].ts.t : now;
930930 s->end_ts = s->opt_duration ? s->start_ts + s->opt_duration :
931931 AV_NOPTS_VALUE; /* may be overridden later by -E option */
932932 cur_ts = now;
674674 return ret;
675675 for (i = 0; i < s->nb_streams; i++) {
676676 st = s->streams[i];
677 if (st->probe_packets)
677 if (st->probe_packets || st->request_probe > 0)
678678 if ((err = probe_codec(s, st, NULL)) < 0)
679679 return err;
680680 av_assert0(st->request_probe <= 0);
23622362 if (ic->nb_programs) {
23632363 for (i = 0; i < ic->nb_programs; i++) {
23642364 p = ic->programs[i];
2365 if (p->start_time != AV_NOPTS_VALUE && p->end_time > p->start_time)
2365 if (p->start_time != AV_NOPTS_VALUE &&
2366 p->end_time > p->start_time &&
2367 p->end_time - (uint64_t)p->start_time <= INT64_MAX)
23662368 duration = FFMAX(duration, p->end_time - p->start_time);
23672369 }
2368 } else
2370 } else if (end_time >= start_time && end_time - (uint64_t)start_time <= INT64_MAX) {
23692371 duration = FFMAX(duration, end_time - start_time);
2372 }
23702373 }
23712374 }
23722375 if (duration != INT64_MIN && duration > 0 && ic->duration == AV_NOPTS_VALUE) {
8484 #else // !(__mips == 64)
8585 #define LD(psrc) \
8686 ( { \
87 uint8_t *psrc_m = (uint8_t *) (psrc); \
87 uint8_t *psrc_ld_m = (uint8_t *) (psrc); \
8888 uint32_t val0_m, val1_m; \
8989 uint64_t val_m = 0; \
9090 \
91 val0_m = LW(psrc_m); \
92 val1_m = LW(psrc_m + 4); \
91 val0_m = LW(psrc_ld_m); \
92 val1_m = LW(psrc_ld_m + 4); \
9393 \
9494 val_m = (uint64_t) (val1_m); \
9595 val_m = (uint64_t) ((val_m << 32) & 0xFFFFFFFF00000000); \
171171 #else // !(__mips == 64)
172172 #define LD(psrc) \
173173 ( { \
174 uint8_t *psrc_m1 = (uint8_t *) (psrc); \
174 uint8_t *psrc_ld_m = (uint8_t *) (psrc); \
175175 uint32_t val0_m, val1_m; \
176176 uint64_t val_m = 0; \
177177 \
178 val0_m = LW(psrc_m1); \
179 val1_m = LW(psrc_m1 + 4); \
178 val0_m = LW(psrc_ld_m); \
179 val1_m = LW(psrc_ld_m + 4); \
180180 \
181181 val_m = (uint64_t) (val1_m); \
182182 val_m = (uint64_t) ((val_m << 32) & 0xFFFFFFFF00000000); \
2626 #include "avassert.h"
2727 #include "softfloat_tables.h"
2828
29 #define MIN_EXP -126
29 #define MIN_EXP -149
3030 #define MAX_EXP 126
3131 #define ONE_BITS 29
3232
153153 */
154154 static inline av_const SoftFloat av_int2sf(int v, int frac_bits){
155155 int exp_offset = 0;
156 if(v == INT_MIN){
156 if(v <= INT_MIN + 1){
157157 exp_offset = 1;
158158 v>>=1;
159159 }
374374 track->duration -
375375 track->offsets[track->chunks - 1].time;
376376 }
377 // Now try and read the actual durations from the trun sample data.
377 // Now try to read the actual durations from the trun sample data.
378378 for (i = 0; i < track->chunks; i++) {
379379 int64_t duration = read_moof_duration(f, track->offsets[i].offset);
380380 if (duration > 0 && abs(duration - track->offsets[i].duration) > 3) {