#define G_shift 8
#define B_shift 0
-static inline int log2_ceil(uint32_t x)
-{
- int c = 0;
-
- for (--x; x > 0; x >>= 1)
- c++;
-
- return c;
-}
-
/* improved djb2 hash from http://www.cse.yorku.ca/~oz/hash.html */
static int djb2_hash(uint32_t key)
{
- int h = 5381;
+ uint32_t h = 5381;
h = (h * 33) ^ ((key >> 24) & 0xFF); // xxx: probably not needed at all
h = (h * 33) ^ ((key >> 16) & 0xFF);
B = ((pred >> B_shift) & 0xFF) - TOSIGNED(delta);
}
+ if (R<0 || G<0 || B<0) {
+ av_log(NULL, AV_LOG_ERROR, "RGB %d %d %d is out of range\n", R, G, B);
+ return 0;
+ }
+
return (R << R_shift) | (G << G_shift) | (B << B_shift);
}
if (!(above_row[pos] == pix))
break;
run = pos - start_pos - 1;
- idx = log2_ceil(run);
+ idx = av_ceil_log2(run);
if (ff_els_decode_bit(&dc->els_ctx, &dc->prev_row_rung[idx]))
*pRun += run;
else {
c->tile_stride = FFALIGN(c->tile_width, 16) * 3;
c->epic_buf_stride = FFALIGN(c->tile_width * 4, 16);
aligned_height = FFALIGN(c->tile_height, 16);
- av_free(c->synth_tile);
- av_free(c->jpeg_tile);
- av_free(c->kempf_buf);
- av_free(c->kempf_flags);
- av_free(c->epic_buf_base);
+ av_freep(&c->synth_tile);
+ av_freep(&c->jpeg_tile);
+ av_freep(&c->kempf_buf);
+ av_freep(&c->kempf_flags);
+ av_freep(&c->epic_buf_base);
+ c->epic_buf = NULL;
c->synth_tile = av_mallocz(c->tile_stride * aligned_height);
c->jpeg_tile = av_mallocz(c->tile_stride * aligned_height);
c->kempf_buf = av_mallocz((c->tile_width + 1) * aligned_height +
jpg_free_context(&c->jc);
av_freep(&c->epic_buf_base);
+ c->epic_buf = NULL;
av_freep(&c->kempf_buf);
av_freep(&c->kempf_flags);
av_freep(&c->synth_tile);