mirror of
https://github.com/webmproject/libwebp.git
synced 2024-12-27 06:08:21 +01:00
moved ALIGN_CST into util/utils.h and renamed WEBP_ALIGN_xxx
Note that ALIGN_CST is still kept different in dec/frame.c for now, because the values is 31 there, not 15. We might re-unite these two later. Change-Id: Ibbee607fac4eef02f175b56f0bb0ba359fda3b87
This commit is contained in:
parent
a26408389a
commit
12ec204ec7
@ -405,8 +405,8 @@ typedef struct {
|
||||
static int DoSegmentsJob(SegmentJob* const job, VP8EncIterator* const it) {
|
||||
int ok = 1;
|
||||
if (!VP8IteratorIsDone(it)) {
|
||||
uint8_t tmp[32 + ALIGN_CST];
|
||||
uint8_t* const scratch = (uint8_t*)DO_ALIGN(tmp);
|
||||
uint8_t tmp[32 + WEBP_ALIGN_CST];
|
||||
uint8_t* const scratch = (uint8_t*)WEBP_ALIGN(tmp);
|
||||
do {
|
||||
// Let's pretend we have perfect lossless reconstruction.
|
||||
VP8IteratorImport(it, scratch);
|
||||
|
@ -20,9 +20,6 @@
|
||||
#include "../dsp/lossless.h"
|
||||
#include "../utils/utils.h"
|
||||
|
||||
#define ALIGN_CST 15
|
||||
#define DO_ALIGN(PTR) ((uintptr_t)((PTR) + ALIGN_CST) & ~ALIGN_CST)
|
||||
|
||||
#define MAX_COST 1.e38
|
||||
|
||||
// Number of partitions for the three dominant (literal, red and blue) symbol
|
||||
@ -115,7 +112,8 @@ VP8LHistogramSet* VP8LAllocateHistogramSet(int size, int cache_bits) {
|
||||
VP8LHistogramSet* set;
|
||||
const int histo_size = VP8LGetHistogramSize(cache_bits);
|
||||
const size_t total_size =
|
||||
sizeof(*set) + size * (sizeof(*set->histograms) + histo_size + ALIGN_CST);
|
||||
sizeof(*set) + size * (sizeof(*set->histograms) +
|
||||
histo_size + WEBP_ALIGN_CST);
|
||||
uint8_t* memory = (uint8_t*)WebPSafeMalloc(total_size, sizeof(*memory));
|
||||
if (memory == NULL) return NULL;
|
||||
|
||||
@ -126,7 +124,7 @@ VP8LHistogramSet* VP8LAllocateHistogramSet(int size, int cache_bits) {
|
||||
set->max_size = size;
|
||||
set->size = size;
|
||||
for (i = 0; i < size; ++i) {
|
||||
memory = (uint8_t*)DO_ALIGN(memory);
|
||||
memory = (uint8_t*)WEBP_ALIGN(memory);
|
||||
set->histograms[i] = (VP8LHistogram*)memory;
|
||||
// literal_ won't necessary be aligned.
|
||||
set->histograms[i]->literal_ = (uint32_t*)(memory + sizeof(VP8LHistogram));
|
||||
|
@ -70,13 +70,13 @@ void VP8IteratorInit(VP8Encoder* const enc, VP8EncIterator* const it) {
|
||||
it->enc_ = enc;
|
||||
it->y_stride_ = enc->pic_->y_stride;
|
||||
it->uv_stride_ = enc->pic_->uv_stride;
|
||||
it->yuv_in_ = (uint8_t*)DO_ALIGN(it->yuv_mem_);
|
||||
it->yuv_in_ = (uint8_t*)WEBP_ALIGN(it->yuv_mem_);
|
||||
it->yuv_out_ = it->yuv_in_ + YUV_SIZE_ENC;
|
||||
it->yuv_out2_ = it->yuv_out_ + YUV_SIZE_ENC;
|
||||
it->yuv_p_ = it->yuv_out2_ + YUV_SIZE_ENC;
|
||||
it->lf_stats_ = enc->lf_stats_;
|
||||
it->percent0_ = enc->percent_;
|
||||
it->y_left_ = (uint8_t*)DO_ALIGN(it->yuv_left_mem_ + 1);
|
||||
it->y_left_ = (uint8_t*)WEBP_ALIGN(it->yuv_left_mem_ + 1);
|
||||
it->u_left_ = it->y_left_ + 16 + 16;
|
||||
it->v_left_ = it->u_left_ + 16;
|
||||
VP8IteratorReset(it);
|
||||
|
@ -19,6 +19,7 @@
|
||||
#include "../dsp/dsp.h"
|
||||
#include "../utils/bit_writer.h"
|
||||
#include "../utils/thread.h"
|
||||
#include "../utils/utils.h"
|
||||
#include "../webp/encode.h"
|
||||
|
||||
#ifdef WEBP_EXPERIMENTAL_FEATURES
|
||||
@ -78,9 +79,6 @@ typedef enum { // Rate-distortion optimization levels
|
||||
#define U_OFF_ENC (16)
|
||||
#define V_OFF_ENC (16 + 8)
|
||||
|
||||
#define ALIGN_CST 15
|
||||
#define DO_ALIGN(PTR) ((uintptr_t)((PTR) + ALIGN_CST) & ~ALIGN_CST)
|
||||
|
||||
extern const int VP8Scan[16]; // in quant.c
|
||||
extern const int VP8UVModeOffsets[4]; // in analyze.c
|
||||
extern const int VP8I16ModeOffsets[4];
|
||||
@ -254,9 +252,9 @@ typedef struct {
|
||||
uint8_t* uv_top_; // top u/v samples at position 'x_', packed as 16 bytes
|
||||
|
||||
// memory for storing y/u/v_left_
|
||||
uint8_t yuv_left_mem_[17 + 16 + 16 + 8 + ALIGN_CST];
|
||||
uint8_t yuv_left_mem_[17 + 16 + 16 + 8 + WEBP_ALIGN_CST];
|
||||
// memory for yuv_*
|
||||
uint8_t yuv_mem_[3 * YUV_SIZE_ENC + PRED_SIZE_ENC + ALIGN_CST];
|
||||
uint8_t yuv_mem_[3 * YUV_SIZE_ENC + PRED_SIZE_ENC + WEBP_ALIGN_CST];
|
||||
} VP8EncIterator;
|
||||
|
||||
// in iterator.c
|
||||
|
@ -145,16 +145,16 @@ static VP8Encoder* InitVP8Encoder(const WebPConfig* const config,
|
||||
const int preds_h = 4 * mb_h + 1;
|
||||
const size_t preds_size = preds_w * preds_h * sizeof(uint8_t);
|
||||
const int top_stride = mb_w * 16;
|
||||
const size_t nz_size = (mb_w + 1) * sizeof(uint32_t) + ALIGN_CST;
|
||||
const size_t nz_size = (mb_w + 1) * sizeof(uint32_t) + WEBP_ALIGN_CST;
|
||||
const size_t info_size = mb_w * mb_h * sizeof(VP8MBInfo);
|
||||
const size_t samples_size = 2 * top_stride * sizeof(uint8_t) // top-luma/u/v
|
||||
+ ALIGN_CST; // align all
|
||||
+ WEBP_ALIGN_CST; // align all
|
||||
const size_t lf_stats_size =
|
||||
config->autofilter ? sizeof(LFStats) + ALIGN_CST : 0;
|
||||
config->autofilter ? sizeof(LFStats) + WEBP_ALIGN_CST : 0;
|
||||
VP8Encoder* enc;
|
||||
uint8_t* mem;
|
||||
const uint64_t size = (uint64_t)sizeof(VP8Encoder) // main struct
|
||||
+ ALIGN_CST // cache alignment
|
||||
+ WEBP_ALIGN_CST // cache alignment
|
||||
+ info_size // modes info
|
||||
+ preds_size // prediction modes
|
||||
+ samples_size // top/left samples
|
||||
@ -171,7 +171,7 @@ static VP8Encoder* InitVP8Encoder(const WebPConfig* const config,
|
||||
" non-zero: %ld\n"
|
||||
" lf-stats: %ld\n"
|
||||
" total: %ld\n",
|
||||
sizeof(VP8Encoder) + ALIGN_CST, info_size,
|
||||
sizeof(VP8Encoder) + WEBP_ALIGN_CST, info_size,
|
||||
preds_size, samples_size, nz_size, lf_stats_size, size);
|
||||
printf("Transient object sizes:\n"
|
||||
" VP8EncIterator: %ld\n"
|
||||
@ -192,7 +192,7 @@ static VP8Encoder* InitVP8Encoder(const WebPConfig* const config,
|
||||
return NULL;
|
||||
}
|
||||
enc = (VP8Encoder*)mem;
|
||||
mem = (uint8_t*)DO_ALIGN(mem + sizeof(*enc));
|
||||
mem = (uint8_t*)WEBP_ALIGN(mem + sizeof(*enc));
|
||||
memset(enc, 0, sizeof(*enc));
|
||||
enc->num_parts_ = 1 << config->partitions;
|
||||
enc->mb_w_ = mb_w;
|
||||
@ -202,13 +202,13 @@ static VP8Encoder* InitVP8Encoder(const WebPConfig* const config,
|
||||
mem += info_size;
|
||||
enc->preds_ = ((uint8_t*)mem) + 1 + enc->preds_w_;
|
||||
mem += preds_w * preds_h * sizeof(uint8_t);
|
||||
enc->nz_ = 1 + (uint32_t*)DO_ALIGN(mem);
|
||||
enc->nz_ = 1 + (uint32_t*)WEBP_ALIGN(mem);
|
||||
mem += nz_size;
|
||||
enc->lf_stats_ = lf_stats_size ? (LFStats*)DO_ALIGN(mem) : NULL;
|
||||
enc->lf_stats_ = lf_stats_size ? (LFStats*)WEBP_ALIGN(mem) : NULL;
|
||||
mem += lf_stats_size;
|
||||
|
||||
// top samples (all 16-aligned)
|
||||
mem = (uint8_t*)DO_ALIGN(mem);
|
||||
mem = (uint8_t*)WEBP_ALIGN(mem);
|
||||
enc->y_top_ = (uint8_t*)mem;
|
||||
enc->uv_top_ = enc->y_top_ + top_stride;
|
||||
mem += 2 * top_stride;
|
||||
|
@ -43,6 +43,12 @@ WEBP_EXTERN(void*) WebPSafeCalloc(uint64_t nmemb, size_t size);
|
||||
// Companion deallocation function to the above allocations.
|
||||
WEBP_EXTERN(void) WebPSafeFree(void* const ptr);
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Alignment
|
||||
|
||||
#define WEBP_ALIGN_CST 15
|
||||
#define WEBP_ALIGN(PTR) ((uintptr_t)((PTR) + WEBP_ALIGN_CST) & ~WEBP_ALIGN_CST)
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Reading/writing data.
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user