diff mbox

[FFmpeg-devel,1/2] avcodec/hap: pass texture-compression destination as argument, not in context

Message ID 20161108133054.90950-1-bangnoise@gmail.com
State Accepted
Commit 0a245875887430fbdfa9cbd19eb4d337dae93d2e
Headers show

Commit Message

Tom Butterworth Nov. 8, 2016, 1:30 p.m. UTC
This allows a subsequent change to compress directly into the output packet when possible.
---
 libavcodec/hapenc.c | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

Comments

Michael Niedermayer Nov. 8, 2016, 2:13 p.m. UTC | #1
On Tue, Nov 08, 2016 at 01:30:53PM +0000, Tom Butterworth wrote:
> This allows a subsequent change to compress directly into the output packet when possible.
> ---
>  libavcodec/hapenc.c | 12 +++++++++---
>  1 file changed, 9 insertions(+), 3 deletions(-)

LGTM

thx

[...]
Tom Butterworth Nov. 8, 2016, 5:10 p.m. UTC | #2
thanks, pushed

On Tue, 8 Nov 2016 at 14:14 Michael Niedermayer <michael@niedermayer.cc>
wrote:

> On Tue, Nov 08, 2016 at 01:30:53PM +0000, Tom Butterworth wrote:
> > This allows a subsequent change to compress directly into the output
> packet when possible.
> > ---
> >  libavcodec/hapenc.c | 12 +++++++++---
> >  1 file changed, 9 insertions(+), 3 deletions(-)
>
> LGTM
>
> thx
>
> [...]
> --
> Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
>
> The misfortune of the wise is better than the prosperity of the fool.
> -- Epicurus
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
diff mbox

Patch

diff --git a/libavcodec/hapenc.c b/libavcodec/hapenc.c
index 076923b..79b6074 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);