]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/pgssubdec.c
avcodec: Constify AVCodecs
[ffmpeg] / libavcodec / pgssubdec.c
index b897d72aab351c9002f3642f0e4927671493d984..8b088bda8f0ae7c068092c5d908b88d7fefcac28 100644 (file)
@@ -596,25 +596,11 @@ static int display_end_segment(AVCodecContext *avctx, void *data,
 
         if (!ctx->forced_subs_only || ctx->presentation.objects[i].composition_flag & 0x40)
         memcpy(sub->rects[i]->data[1], palette->clut, sub->rects[i]->nb_colors * sizeof(uint32_t));
-
-#if FF_API_AVPICTURE
-FF_DISABLE_DEPRECATION_WARNINGS
-{
-        AVSubtitleRect *rect;
-        int j;
-        rect = sub->rects[i];
-        for (j = 0; j < 4; j++) {
-            rect->pict.data[j] = rect->data[j];
-            rect->pict.linesize[j] = rect->linesize[j];
-        }
-}
-FF_ENABLE_DEPRECATION_WARNINGS
-#endif
     }
     return 1;
 }
 
-static int decode(AVCodecContext *avctx, void *data, int *data_size,
+static int decode(AVCodecContext *avctx, void *data, int *got_sub_ptr,
                   AVPacket *avpkt)
 {
     const uint8_t *buf = avpkt->data;
@@ -636,7 +622,7 @@ static int decode(AVCodecContext *avctx, void *data, int *data_size,
     if (i & 15)
         ff_dlog(avctx, "\n");
 
-    *data_size = 0;
+    *got_sub_ptr = 0;
 
     /* Ensure that we have received at a least a segment code and segment length */
     if (buf_size < 3)
@@ -676,9 +662,14 @@ static int decode(AVCodecContext *avctx, void *data, int *data_size,
              */
             break;
         case DISPLAY_SEGMENT:
+            if (*got_sub_ptr) {
+                av_log(avctx, AV_LOG_ERROR, "Duplicate display segment\n");
+                ret = AVERROR_INVALIDDATA;
+                break;
+            }
             ret = display_end_segment(avctx, data, buf, segment_length);
             if (ret >= 0)
-                *data_size = ret;
+                *got_sub_ptr = ret;
             break;
         default:
             av_log(avctx, AV_LOG_ERROR, "Unknown subtitle segment type 0x%x, length %d\n",
@@ -686,8 +677,11 @@ static int decode(AVCodecContext *avctx, void *data, int *data_size,
             ret = AVERROR_INVALIDDATA;
             break;
         }
-        if (ret < 0 && (avctx->err_recognition & AV_EF_EXPLODE))
+        if (ret < 0 && (avctx->err_recognition & AV_EF_EXPLODE)) {
+            avsubtitle_free(data);
+            *got_sub_ptr = 0;
             return ret;
+        }
 
         buf += segment_length;
     }
@@ -709,7 +703,7 @@ static const AVClass pgsdec_class = {
     .version    = LIBAVUTIL_VERSION_INT,
 };
 
-AVCodec ff_pgssub_decoder = {
+const AVCodec ff_pgssub_decoder = {
     .name           = "pgssub",
     .long_name      = NULL_IF_CONFIG_SMALL("HDMV Presentation Graphic Stream subtitles"),
     .type           = AVMEDIA_TYPE_SUBTITLE,