[FFmpeg-devel] [PATCH] libavcodec/ccaption_dec: remove unnecessary buffering of closed caption packets

Aman Gupta ffmpeg at tmm1.net
Sat Jan 2 01:40:06 CET 2016


From: Aman Gupta <aman at tmm1.net>

CC data is fed to in small chunks (usually 60 bytes at a time)
and is parsed fully by the eia608 decoder. There is no reason to copy it
into a secondary buffer first.
---
 libavcodec/ccaption_dec.c | 22 +---------------------
 1 file changed, 1 insertion(+), 21 deletions(-)

diff --git a/libavcodec/ccaption_dec.c b/libavcodec/ccaption_dec.c
index 9f67caa..4b1d376 100644
--- a/libavcodec/ccaption_dec.c
+++ b/libavcodec/ccaption_dec.c
@@ -167,8 +167,6 @@ typedef struct CCaptionSubContext {
     int64_t startv_time;
     int64_t end_time;
     char prev_cmd[2];
-    /* buffer to store pkt data */
-    AVBufferRef *pktbuf;
 }CCaptionSubContext;
 
 
@@ -185,11 +183,6 @@ static av_cold int init_decoder(AVCodecContext *avctx)
     if(ret < 0) {
         return ret;
     }
-    /* allocate pkt buffer */
-    ctx->pktbuf = av_buffer_alloc(128);
-    if( !ctx->pktbuf) {
-        ret = AVERROR(ENOMEM);
-    }
     return ret;
 }
 
@@ -197,7 +190,6 @@ static av_cold int close_decoder(AVCodecContext *avctx)
 {
     CCaptionSubContext *ctx = avctx->priv_data;
     av_bprint_finalize( &ctx->buffer, NULL);
-    av_buffer_unref(&ctx->pktbuf);
     return 0;
 }
 
@@ -524,23 +516,11 @@ static int decode(AVCodecContext *avctx, void *data, int *got_sub, AVPacket *avp
 {
     CCaptionSubContext *ctx = avctx->priv_data;
     AVSubtitle *sub = data;
-    uint8_t *bptr = NULL;
+    uint8_t *bptr = avpkt->data;
     int len = avpkt->size;
     int ret = 0;
     int i;
 
-    if ( ctx->pktbuf->size < len) {
-        ret = av_buffer_realloc(&ctx->pktbuf, len);
-         if(ret < 0) {
-            av_log(ctx, AV_LOG_WARNING, "Insufficient Memory of %d truncated to %d\n",len, ctx->pktbuf->size);
-            len = ctx->pktbuf->size;
-            ret = 0;
-        }
-    }
-    memcpy(ctx->pktbuf->data, avpkt->data, len);
-    bptr = ctx->pktbuf->data;
-
-
     for (i  = 0; i < len; i += 3) {
         uint8_t cc_type = *(bptr + i) & 3;
         if (validate_cc_data_pair( bptr + i) )
-- 
2.5.3



More information about the ffmpeg-devel mailing list