Merge commit '3c650efb81aaa3b395ba4606ee68a47ee4efb57b'
[ffmpeg.git] / libavcodec / dvdsubenc.c
index cd041c3..d19d071 100644 (file)
@@ -207,7 +207,7 @@ static void select_palette(AVCodecContext *avctx, int out_palette[4],
 
 static void build_color_map(AVCodecContext *avctx, int cmap[],
                             const uint32_t palette[],
-                            const int out_palette[], int const out_alpha[])
+                            const int out_palette[], unsigned int const out_alpha[])
 {
     DVDSubtitleContext *dvdc = avctx->priv_data;
     int i, j, d, best_d;
@@ -259,6 +259,7 @@ static int encode_dvd_subtitles(AVCodecContext *avctx,
     AVSubtitleRect vrect;
     uint8_t *vrect_data = NULL;
     int x2, y2;
+    int forced = 0;
 
     if (rects == 0 || h->rects == NULL)
         return AVERROR(EINVAL);
@@ -267,6 +268,12 @@ static int encode_dvd_subtitles(AVCodecContext *avctx,
             av_log(avctx, AV_LOG_ERROR, "Bitmap subtitle required\n");
             return AVERROR(EINVAL);
         }
+    /* Mark this subtitle forced if any of the rectangles is forced. */
+    for (i = 0; i < rects; i++)
+        if ((h->rects[i]->flags & AV_SUBTITLE_FLAG_FORCED) != 0) {
+            forced = 1;
+            break;
+        }
     vrect = *h->rects[0];
 
     if (rects > 1) {
@@ -371,7 +378,7 @@ static int encode_dvd_subtitles(AVCodecContext *avctx,
     bytestream_put_be16(&q, offset1);
     bytestream_put_be16(&q, offset2);
 
-    *q++ = 0x01; // start command
+    *q++ = forced ? 0x00 : 0x01; // start command
     *q++ = 0xff; // terminating command
 
     // send stop display command last
@@ -383,7 +390,7 @@ static int encode_dvd_subtitles(AVCodecContext *avctx,
     qq = outbuf;
     bytestream_put_be16(&qq, q - outbuf);
 
-    av_log(NULL, AV_LOG_DEBUG, "subtitle_packet size=%td\n", q - outbuf);
+    av_log(NULL, AV_LOG_DEBUG, "subtitle_packet size=%"PTRDIFF_SPECIFIER"\n", q - outbuf);
     ret = q - outbuf;
 
 fail:
@@ -434,10 +441,10 @@ static int dvdsub_encode(AVCodecContext *avctx,
 
 AVCodec ff_dvdsub_encoder = {
     .name           = "dvdsub",
+    .long_name      = NULL_IF_CONFIG_SMALL("DVD subtitles"),
     .type           = AVMEDIA_TYPE_SUBTITLE,
     .id             = AV_CODEC_ID_DVD_SUBTITLE,
     .init           = dvdsub_init,
     .encode_sub     = dvdsub_encode,
-    .long_name      = NULL_IF_CONFIG_SMALL("DVD subtitles"),
     .priv_data_size = sizeof(DVDSubtitleContext),
 };