summaryrefslogtreecommitdiff
path: root/libavcodec/hapenc.c
diff options
context:
space:
mode:
authorTom Butterworth <bangnoise@gmail.com>2016-11-07 16:25:33 +0000
committerTom Butterworth <bangnoise@gmail.com>2016-11-08 17:05:27 +0000
commit0a245875887430fbdfa9cbd19eb4d337dae93d2e (patch)
tree16f8d9d1c3912a421334fffcfdf7e501e6dc7945 /libavcodec/hapenc.c
parent70c6a1bcf021b396c9186c4a46dd6c96cc9f59f8 (diff)
downloadffmpeg-0a245875887430fbdfa9cbd19eb4d337dae93d2e.tar.gz
avcodec/hap: pass texture-compression destination as argument, not in context
This allows a subsequent change to compress directly into the output packet when possible. Reviewed-by: Michael Niedermayer <michael@niedermayer.cc> Signed-off-by: Tom Butterworth <bangnoise@gmail.com>
Diffstat (limited to 'libavcodec/hapenc.c')
-rw-r--r--libavcodec/hapenc.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/libavcodec/hapenc.c b/libavcodec/hapenc.c
index 076923b87d..79b6074844 100644
--- a/libavcodec/hapenc.c
+++ b/libavcodec/hapenc.c
@@ -52,12 +52,14 @@ enum HapHeaderLength {
HAP_HDR_LONG = 8,
};
-static void compress_texture(AVCodecContext *avctx, const AVFrame *f)
+static int compress_texture(AVCodecContext *avctx, uint8_t *out, int out_length, const AVFrame *f)
{
HapContext *ctx = avctx->priv_data;
- uint8_t *out = ctx->tex_buf;
int i, j;
+ if (ctx->tex_size > out_length)
+ return AVERROR_BUFFER_TOO_SMALL;
+
for (j = 0; j < avctx->height; j += 4) {
for (i = 0; i < avctx->width; i += 4) {
uint8_t *p = f->data[0] + i * 4 + j * f->linesize[0];
@@ -65,6 +67,8 @@ static void compress_texture(AVCodecContext *avctx, const AVFrame *f)
out += step;
}
}
+
+ return 0;
}
/* section_length does not include the header */
@@ -201,7 +205,9 @@ static int hap_encode(AVCodecContext *avctx, AVPacket *pkt,
return ret;
/* DXTC compression. */
- compress_texture(avctx, frame);
+ ret = compress_texture(avctx, ctx->tex_buf, ctx->tex_size, frame);
+ if (ret < 0)
+ return ret;
/* Compress (using Snappy) the frame */
final_data_size = hap_compress_frame(avctx, pkt->data + header_length);