diff mbox series

[FFmpeg-devel,01/46] avcodec/a64multienc: Avoid intermediate buffer

Message ID HE1PR0301MB2154FA2BF76462B67F0D851C8F5F9@HE1PR0301MB2154.eurprd03.prod.outlook.com
State Accepted
Commit 8dbf0cc89330011bbb4b7a34abe3e86bf64859a6
Headers show
Series [FFmpeg-devel,01/46] avcodec/a64multienc: Avoid intermediate buffer
Related show

Checks

Context Check Description
andriy/x86_make success Make finished
andriy/x86_make_fate success Make fate finished
andriy/PPC64_make success Make finished
andriy/PPC64_make_fate success Make fate finished

Commit Message

Andreas Rheinhardt April 29, 2021, 11:25 p.m. UTC
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
---
This patchset is the first batch of patches to implement support for
user-supplied buffers in encoders; those who can't wait can already look
here for the second part dealing with encoders with external libs:
https://github.com/mkver/FFmpeg/commits/ff_alloc_packet2
This patchset supersedes
https://ffmpeg.org/pipermail/ffmpeg-devel/2021-April/279571.html

 libavcodec/a64multienc.c | 11 ++---------
 1 file changed, 2 insertions(+), 9 deletions(-)

Comments

Andreas Rheinhardt May 2, 2021, 4:12 a.m. UTC | #1
Andreas Rheinhardt:
> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
> ---
> This patchset is the first batch of patches to implement support for
> user-supplied buffers in encoders; those who can't wait can already look
> here for the second part dealing with encoders with external libs:
> https://github.com/mkver/FFmpeg/commits/ff_alloc_packet2
> This patchset supersedes
> https://ffmpeg.org/pipermail/ffmpeg-devel/2021-April/279571.html
> 
>  libavcodec/a64multienc.c | 11 ++---------
>  1 file changed, 2 insertions(+), 9 deletions(-)
> 
> diff --git a/libavcodec/a64multienc.c b/libavcodec/a64multienc.c
> index 9dc859b271..1b52631193 100644
> --- a/libavcodec/a64multienc.c
> +++ b/libavcodec/a64multienc.c
> @@ -50,7 +50,6 @@ typedef struct A64Context {
>      int *mc_charmap;
>      int *mc_best_cb;
>      int mc_luma_vals[5];
> -    uint8_t *mc_charset;
>      uint8_t *mc_colram;
>      uint8_t *mc_palette;
>      int mc_pal_size;
> @@ -197,7 +196,6 @@ static av_cold int a64multi_close_encoder(AVCodecContext *avctx)
>      A64Context *c = avctx->priv_data;
>      av_freep(&c->mc_meta_charset);
>      av_freep(&c->mc_best_cb);
> -    av_freep(&c->mc_charset);
>      av_freep(&c->mc_charmap);
>      av_freep(&c->mc_colram);
>      return 0;
> @@ -231,8 +229,7 @@ static av_cold int a64multi_encode_init(AVCodecContext *avctx)
>      if (!(c->mc_meta_charset = av_mallocz_array(c->mc_lifetime, 32000 * sizeof(int))) ||
>         !(c->mc_best_cb       = av_malloc(CHARSET_CHARS * 32 * sizeof(int)))     ||
>         !(c->mc_charmap       = av_mallocz_array(c->mc_lifetime, 1000 * sizeof(int))) ||
> -       !(c->mc_colram        = av_mallocz(CHARSET_CHARS * sizeof(uint8_t)))     ||
> -       !(c->mc_charset       = av_malloc(0x800 * (INTERLACED+1) * sizeof(uint8_t)))) {
> +       !(c->mc_colram        = av_mallocz(CHARSET_CHARS * sizeof(uint8_t)))) {
>          av_log(avctx, AV_LOG_ERROR, "Failed to allocate buffer memory.\n");
>          return AVERROR(ENOMEM);
>      }
> @@ -284,7 +281,6 @@ static int a64multi_encode_frame(AVCodecContext *avctx, AVPacket *pkt,
>  
>      int *charmap     = c->mc_charmap;
>      uint8_t *colram  = c->mc_colram;
> -    uint8_t *charset = c->mc_charset;
>      int *meta        = c->mc_meta_charset;
>      int *best_cb     = c->mc_best_cb;
>  
> @@ -346,10 +342,7 @@ static int a64multi_encode_frame(AVCodecContext *avctx, AVPacket *pkt,
>                  return ret;
>  
>              /* create colorram map and a c64 readable charset */
> -            render_charset(avctx, charset, colram);
> -
> -            /* copy charset to buf */
> -            memcpy(buf, charset, charset_size);
> +            render_charset(avctx, buf, colram);
>  
>              /* advance pointers */
>              buf      += charset_size;
> 
Will apply this patchset tomorrow unless there are objections.

- Andreas
diff mbox series

Patch

diff --git a/libavcodec/a64multienc.c b/libavcodec/a64multienc.c
index 9dc859b271..1b52631193 100644
--- a/libavcodec/a64multienc.c
+++ b/libavcodec/a64multienc.c
@@ -50,7 +50,6 @@  typedef struct A64Context {
     int *mc_charmap;
     int *mc_best_cb;
     int mc_luma_vals[5];
-    uint8_t *mc_charset;
     uint8_t *mc_colram;
     uint8_t *mc_palette;
     int mc_pal_size;
@@ -197,7 +196,6 @@  static av_cold int a64multi_close_encoder(AVCodecContext *avctx)
     A64Context *c = avctx->priv_data;
     av_freep(&c->mc_meta_charset);
     av_freep(&c->mc_best_cb);
-    av_freep(&c->mc_charset);
     av_freep(&c->mc_charmap);
     av_freep(&c->mc_colram);
     return 0;
@@ -231,8 +229,7 @@  static av_cold int a64multi_encode_init(AVCodecContext *avctx)
     if (!(c->mc_meta_charset = av_mallocz_array(c->mc_lifetime, 32000 * sizeof(int))) ||
        !(c->mc_best_cb       = av_malloc(CHARSET_CHARS * 32 * sizeof(int)))     ||
        !(c->mc_charmap       = av_mallocz_array(c->mc_lifetime, 1000 * sizeof(int))) ||
-       !(c->mc_colram        = av_mallocz(CHARSET_CHARS * sizeof(uint8_t)))     ||
-       !(c->mc_charset       = av_malloc(0x800 * (INTERLACED+1) * sizeof(uint8_t)))) {
+       !(c->mc_colram        = av_mallocz(CHARSET_CHARS * sizeof(uint8_t)))) {
         av_log(avctx, AV_LOG_ERROR, "Failed to allocate buffer memory.\n");
         return AVERROR(ENOMEM);
     }
@@ -284,7 +281,6 @@  static int a64multi_encode_frame(AVCodecContext *avctx, AVPacket *pkt,
 
     int *charmap     = c->mc_charmap;
     uint8_t *colram  = c->mc_colram;
-    uint8_t *charset = c->mc_charset;
     int *meta        = c->mc_meta_charset;
     int *best_cb     = c->mc_best_cb;
 
@@ -346,10 +342,7 @@  static int a64multi_encode_frame(AVCodecContext *avctx, AVPacket *pkt,
                 return ret;
 
             /* create colorram map and a c64 readable charset */
-            render_charset(avctx, charset, colram);
-
-            /* copy charset to buf */
-            memcpy(buf, charset, charset_size);
+            render_charset(avctx, buf, colram);
 
             /* advance pointers */
             buf      += charset_size;