[FFmpeg-devel] [PATCH 2/2] lavc/dvbsubdec.c: fix parsing of Display Definition Segment in DVB subtitles
Scott Theisen
scott.the.elm at gmail.com
Thu Nov 14 08:56:03 EET 2024
From: Mark Kendall <mkendall at mythtv.org>
from https://github.com/MythTV/mythtv/commit/14bea9593c44a8cd4c7c60bb6c0e1c85147ceb07
references https://code.mythtv.org/trac/ticket/8061
---
libavcodec/avcodec.h | 4 ++++
libavcodec/dvbsubdec.c | 20 ++++++++++++--------
2 files changed, 16 insertions(+), 8 deletions(-)
diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
index 77ca8dee1f..1b1eb13519 100644
--- a/libavcodec/avcodec.h
+++ b/libavcodec/avcodec.h
@@ -2214,6 +2214,10 @@ typedef struct AVSubtitleRect {
int w; ///< width of pict, undefined when pict is not set
int h; ///< height of pict, undefined when pict is not set
int nb_colors; ///< number of colors in pict, undefined when pict is not set
+ int display_x; ///< top left corner of region into which pict is displayed
+ int display_y; ///< top left corner of region into which pict is displayed
+ int display_w; ///< width of region into which pict is displayed
+ int display_h; ///< height of region into which pict is displayed
/**
* data+linesize for the bitmap of this subtitle.
diff --git a/libavcodec/dvbsubdec.c b/libavcodec/dvbsubdec.c
index 36596e0064..f37689d613 100644
--- a/libavcodec/dvbsubdec.c
+++ b/libavcodec/dvbsubdec.c
@@ -737,15 +737,9 @@ static int save_subtitle_set(AVCodecContext *avctx, AVSubtitle *sub, int *got_ou
const DVBSubCLUT *clut;
const uint32_t *clut_table;
int i;
- int offset_x=0, offset_y=0;
int ret = 0;
- if (display_def) {
- offset_x = display_def->x;
- offset_y = display_def->y;
- }
-
/* Not touching AVSubtitles again*/
if (sub->num_rects) {
avpriv_request_sample(ctx, "Different Version of Segment asked Twice");
@@ -792,10 +786,20 @@ static int save_subtitle_set(AVCodecContext *avctx, AVSubtitle *sub, int *got_ou
continue;
rect = sub->rects[i];
- rect->x = display->x_pos + offset_x;
- rect->y = display->y_pos + offset_y;
+ rect->x = display->x_pos;
+ rect->y = display->y_pos;
rect->w = region->width;
rect->h = region->height;
+ if (display_def) {
+ rect->display_x = display_def->x;
+ rect->display_y = display_def->y;
+ rect->display_w = display_def->width;
+ rect->display_h = display_def->height;
+ }
+ else {
+ rect->display_w = 720;
+ rect->display_h = 576;
+ }
rect->nb_colors = (1 << region->depth);
rect->type = SUBTITLE_BITMAP;
rect->linesize[0] = region->width;
--
2.43.0
More information about the ffmpeg-devel
mailing list