]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/assenc.c
avutil/mem: Also poison new av_realloc-allocated blocks
[ffmpeg] / libavcodec / assenc.c
index e54c1d8ec39b720cc64eea7abc66d31c8ec4a067..c8fcf45bedd32887cd9b78da28e468220aa2218c 100644 (file)
 #include "libavutil/internal.h"
 #include "libavutil/mem.h"
 
-typedef struct {
-    int id; ///< current event id, ReadOrder field
-} ASSEncodeContext;
-
 static av_cold int ass_encode_init(AVCodecContext *avctx)
 {
     avctx->extradata = av_malloc(avctx->subtitle_header_size + 1);
@@ -46,54 +42,21 @@ static int ass_encode_frame(AVCodecContext *avctx,
                             unsigned char *buf, int bufsize,
                             const AVSubtitle *sub)
 {
-    ASSEncodeContext *s = avctx->priv_data;
     int i, len, total_len = 0;
 
     for (i=0; i<sub->num_rects; i++) {
-        char ass_line[2048];
         const char *ass = sub->rects[i]->ass;
-        long int layer;
-        char *p;
 
         if (sub->rects[i]->type != SUBTITLE_ASS) {
             av_log(avctx, AV_LOG_ERROR, "Only SUBTITLE_ASS type supported.\n");
             return AVERROR(EINVAL);
         }
 
-#if FF_API_ASS_TIMING
-        if (!strncmp(ass, "Dialogue: ", 10)) {
-            if (i > 0) {
-                av_log(avctx, AV_LOG_ERROR, "ASS encoder supports only one "
-                       "ASS rectangle field.\n");
-                return AVERROR_INVALIDDATA;
-            }
-
-            ass += 10; // skip "Dialogue: "
-            /* parse Layer field. If it's a Marked field, the content
-             * will be "Marked=N" instead of the layer num, so we will
-             * have layer=0, which is fine. */
-            layer = strtol(ass, &p, 10);
-
-#define SKIP_ENTRY(ptr) do {        \
-    char *sep = strchr(ptr, ',');   \
-    if (sep)                        \
-        ptr = sep + 1;              \
-} while (0)
-
-            SKIP_ENTRY(p); // skip layer or marked
-            SKIP_ENTRY(p); // skip start timestamp
-            SKIP_ENTRY(p); // skip end timestamp
-            snprintf(ass_line, sizeof(ass_line), "%d,%ld,%s", ++s->id, layer, p);
-            ass_line[strcspn(ass_line, "\r\n")] = 0;
-            ass = ass_line;
-        }
-#endif
-
         len = av_strlcpy(buf+total_len, ass, bufsize-total_len);
 
         if (len > bufsize-total_len-1) {
             av_log(avctx, AV_LOG_ERROR, "Buffer too small for ASS event.\n");
-            return AVERROR(EINVAL);
+            return AVERROR_BUFFER_TOO_SMALL;
         }
 
         total_len += len;
@@ -103,25 +66,23 @@ static int ass_encode_frame(AVCodecContext *avctx,
 }
 
 #if CONFIG_SSA_ENCODER
-AVCodec ff_ssa_encoder = {
+const AVCodec ff_ssa_encoder = {
     .name         = "ssa",
     .long_name    = NULL_IF_CONFIG_SMALL("ASS (Advanced SubStation Alpha) subtitle"),
     .type         = AVMEDIA_TYPE_SUBTITLE,
     .id           = AV_CODEC_ID_ASS,
     .init         = ass_encode_init,
     .encode_sub   = ass_encode_frame,
-    .priv_data_size = sizeof(ASSEncodeContext),
 };
 #endif
 
 #if CONFIG_ASS_ENCODER
-AVCodec ff_ass_encoder = {
+const AVCodec ff_ass_encoder = {
     .name         = "ass",
     .long_name    = NULL_IF_CONFIG_SMALL("ASS (Advanced SubStation Alpha) subtitle"),
     .type         = AVMEDIA_TYPE_SUBTITLE,
     .id           = AV_CODEC_ID_ASS,
     .init         = ass_encode_init,
     .encode_sub   = ass_encode_frame,
-    .priv_data_size = sizeof(ASSEncodeContext),
 };
 #endif