[FFmpeg-devel] [PATCH] Add support for Display Definition Segment to DVB Subtitle encoder

Jernej jernej at jernej.org
Fri Jul 12 11:21:38 EEST 2019


Here's the fixed patch. I'm not familiar with providing patches via a
mailing list. If replying doesn't work, I'll just use a new git send-mail.

Signed-off-by: Jernej Fijacko <mikrohard at gmail.com>
---
 libavcodec/dvbsub.c | 19 ++++++++++++++++---
 1 file changed, 16 insertions(+), 3 deletions(-)

diff --git a/libavcodec/dvbsub.c b/libavcodec/dvbsub.c
index 8cce702a9e..a8d43d81d6 100644
--- a/libavcodec/dvbsub.c
+++ b/libavcodec/dvbsub.c
@@ -247,9 +247,10 @@ static void dvb_encode_rle8(uint8_t **pq,
     *pq = q;
 }

-static int encode_dvb_subtitles(DVBSubtitleContext *s,
+static int encode_dvb_subtitles(AVCodecContext *avctx,
                                 uint8_t *outbuf, const AVSubtitle *h)
 {
+    DVBSubtitleContext *s = avctx->priv_data;
     uint8_t *q, *pseg_len;
     int page_id, region_id, clut_id, object_id, i, bpp_index, page_state;

@@ -261,6 +262,19 @@ static int encode_dvb_subtitles(DVBSubtitleContext *s,
     if (h->num_rects && !h->rects)
         return -1;

+    if (avctx->width > 0 && avctx->height > 0) {
+        /* display definition segment */
+        *q++ = 0x0f; /* sync_byte */
+        *q++ = 0x14; /* segment_type */
+        bytestream_put_be16(&q, page_id);
+        pseg_len = q;
+        q += 2; /* segment length */
+        *q++ = 0x00; /* dds version number & display window flag */
+        bytestream_put_be16(&q, avctx->width - 1); /* display width */
+        bytestream_put_be16(&q, avctx->height - 1); /* display height */
+        bytestream_put_be16(&pseg_len, q - pseg_len - 2);
+    }
+
     /* page composition segment */

     *q++ = 0x0f; /* sync_byte */
@@ -446,10 +460,9 @@ static int dvbsub_encode(AVCodecContext *avctx,
                          unsigned char *buf, int buf_size,
                          const AVSubtitle *sub)
 {
-    DVBSubtitleContext *s = avctx->priv_data;
     int ret;

-    ret = encode_dvb_subtitles(s, buf, sub);
+    ret = encode_dvb_subtitles(avctx, buf, sub);
     return ret;
 }

-- 
2.21.0

>


More information about the ffmpeg-devel mailing list