mirror of https://git.ffmpeg.org/ffmpeg.git
Exposing forced flag for DVD and PGS subtitles
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
1f46b50a95
commit
79e5902cf1
|
@ -3158,6 +3158,12 @@ typedef struct AVSubtitleRect {
|
||||||
* struct.
|
* struct.
|
||||||
*/
|
*/
|
||||||
char *ass;
|
char *ass;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 1 indicates this subtitle is a forced subtitle.
|
||||||
|
* A forced subtitle should be displayed even when subtitles are hidden.
|
||||||
|
*/
|
||||||
|
int forced;
|
||||||
} AVSubtitleRect;
|
} AVSubtitleRect;
|
||||||
|
|
||||||
typedef struct AVSubtitle {
|
typedef struct AVSubtitle {
|
||||||
|
|
|
@ -356,6 +356,7 @@ static int decode_dvd_subtitles(DVDSubContext *ctx, AVSubtitle *sub_header,
|
||||||
sub_header->rects[0]->h = h;
|
sub_header->rects[0]->h = h;
|
||||||
sub_header->rects[0]->type = SUBTITLE_BITMAP;
|
sub_header->rects[0]->type = SUBTITLE_BITMAP;
|
||||||
sub_header->rects[0]->pict.linesize[0] = w;
|
sub_header->rects[0]->pict.linesize[0] = w;
|
||||||
|
sub_header->rects[0]->forced = is_menu;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (next_cmd_pos < cmd_pos) {
|
if (next_cmd_pos < cmd_pos) {
|
||||||
|
|
|
@ -264,6 +264,7 @@ static const AVOption subtitle_rect_options[]={
|
||||||
{"w", "", SROFFSET(w), AV_OPT_TYPE_INT, {.dbl = 0 }, 0, INT_MAX, 0},
|
{"w", "", SROFFSET(w), AV_OPT_TYPE_INT, {.dbl = 0 }, 0, INT_MAX, 0},
|
||||||
{"h", "", SROFFSET(h), AV_OPT_TYPE_INT, {.dbl = 0 }, 0, INT_MAX, 0},
|
{"h", "", SROFFSET(h), AV_OPT_TYPE_INT, {.dbl = 0 }, 0, INT_MAX, 0},
|
||||||
{"type", "", SROFFSET(type), AV_OPT_TYPE_INT, {.dbl = 0 }, 0, INT_MAX, 0},
|
{"type", "", SROFFSET(type), AV_OPT_TYPE_INT, {.dbl = 0 }, 0, INT_MAX, 0},
|
||||||
|
{"forced", "", SROFFSET(forced), AV_OPT_TYPE_INT, {.dbl = 0}, 0, 1, 0},
|
||||||
{NULL},
|
{NULL},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -423,6 +423,9 @@ static int display_end_segment(AVCodecContext *avctx, void *data,
|
||||||
sub->rects[rect]->nb_colors = 256;
|
sub->rects[rect]->nb_colors = 256;
|
||||||
sub->rects[rect]->pict.data[1] = av_mallocz(AVPALETTE_SIZE);
|
sub->rects[rect]->pict.data[1] = av_mallocz(AVPALETTE_SIZE);
|
||||||
|
|
||||||
|
/* Copy the forced flag */
|
||||||
|
sub->rects[rect]->forced = (ctx->presentation.objects[rect].composition & 0x40) != 0;
|
||||||
|
|
||||||
if (!ctx->forced_subs_only || ctx->presentation.objects[rect].composition & 0x40)
|
if (!ctx->forced_subs_only || ctx->presentation.objects[rect].composition & 0x40)
|
||||||
memcpy(sub->rects[rect]->pict.data[1], ctx->clut, sub->rects[rect]->nb_colors * sizeof(uint32_t));
|
memcpy(sub->rects[rect]->pict.data[1], ctx->clut, sub->rects[rect]->nb_colors * sizeof(uint32_t));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue