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

Submitted by Jernej on July 12, 2019, 8:21 a.m.

Details

Message ID CALNweXPiRxjsQnCd8JCDLrofrWjM=u_YW4EvAedT7kV5o6FvVQ@mail.gmail.com
State New
Headers show

Commit Message

Jernej July 12, 2019, 8:21 a.m.
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@gmail.com>
---
 libavcodec/dvbsub.c | 19 ++++++++++++++++---
 1 file changed, 16 insertions(+), 3 deletions(-)

Comments

Marton Balint July 12, 2019, 6:17 p.m.
On Fri, 12 Jul 2019, Jernej wrote:

> 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.

Yes, please, preferably with --in-reply-to=<messageId>

Thanks,
Marton

>
> Signed-off-by: Jernej Fijacko <mikrohard@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
>
>>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

Patch hide | download patch | download mbox

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;
 }