for (slice_y = 0; bufsize > 0 && slice_y < s->lowdelay.num_y; slice_y++)
for (slice_x = 0; bufsize > 0 && slice_x < s->lowdelay.num_x; slice_x++) {
bytes = (slice_num+1) * s->lowdelay.bytes.num / s->lowdelay.bytes.den
- - slice_num * s->lowdelay.bytes.num / s->lowdelay.bytes.den;
+ - slice_num * s->lowdelay.bytes.num / s->lowdelay.bytes.den;
slices[slice_num].bytes = bytes;
slices[slice_num].slice_x = slice_x;
/* Luma and Chroma are equal. 11.2.3 */
idx = svq3_get_ue_golomb(gb); /* [DIRAC_STD] index */
- if (idx > 4)
- {
+ if (idx > 4) {
av_log(s->avctx, AV_LOG_ERROR, "Block prediction index too high\n");
return -1;
}
break;
data_unit_size = AV_RB32(buf+buf_idx+5);
- if (buf_idx + data_unit_size > buf_size) {
+ if (buf_idx + data_unit_size > buf_size || !data_unit_size) {
+ if(buf_idx + data_unit_size > buf_size)
av_log(s->avctx, AV_LOG_ERROR,
"Data unit with size %d is larger than input buffer, discarding\n",
data_unit_size);
}
AVCodec ff_dirac_decoder = {
- "dirac",
- AVMEDIA_TYPE_VIDEO,
- CODEC_ID_DIRAC,
- sizeof(DiracContext),
- dirac_decode_init,
- NULL,
- dirac_decode_end,
- dirac_decode_frame,
- CODEC_CAP_DELAY,
- .flush = dirac_decode_flush,
- .long_name = NULL_IF_CONFIG_SMALL("BBC Dirac VC-2"),
+ .name = "dirac",
+ .type = AVMEDIA_TYPE_VIDEO,
+ .id = CODEC_ID_DIRAC,
+ .priv_data_size = sizeof(DiracContext),
+ .init = dirac_decode_init,
+ .close = dirac_decode_end,
+ .decode = dirac_decode_frame,
+ .capabilities = CODEC_CAP_DELAY,
+ .flush = dirac_decode_flush,
+ .long_name = NULL_IF_CONFIG_SMALL("BBC Dirac VC-2"),
};