summaryrefslogtreecommitdiff
path: root/libavcodec/microdvddec.c
diff options
context:
space:
mode:
authorClément Bœsch <ubitux@gmail.com>2012-06-15 19:05:34 +0200
committerClément Bœsch <ubitux@gmail.com>2012-06-29 20:20:02 +0200
commit8f4ce626f8810899ff4f9eee3d29bf9d90445aeb (patch)
tree35d38d764b3dd1ad58dba0da17c42e7dc0ac86b2 /libavcodec/microdvddec.c
parent0e7782c08ec77739edb0b98ba5d896b45e98235f (diff)
lavc/microdvddec: support "DEFAULT" properties.
Diffstat (limited to 'libavcodec/microdvddec.c')
-rw-r--r--libavcodec/microdvddec.c50
1 files changed, 49 insertions, 1 deletions
diff --git a/libavcodec/microdvddec.c b/libavcodec/microdvddec.c
index fe70ea45dd..27645cccb1 100644
--- a/libavcodec/microdvddec.c
+++ b/libavcodec/microdvddec.c
@@ -311,11 +311,59 @@ end:
return avpkt->size;
}
+static int microdvd_init(AVCodecContext *avctx)
+{
+ int i, sidx;
+ AVBPrint font_buf;
+ int font_size = ASS_DEFAULT_FONT_SIZE;
+ int color = ASS_DEFAULT_COLOR;
+ int bold = ASS_DEFAULT_BOLD;
+ int italic = ASS_DEFAULT_ITALIC;
+ int underline = ASS_DEFAULT_UNDERLINE;
+ int alignment = ASS_DEFAULT_ALIGNMENT;
+ struct microdvd_tag tags[sizeof(MICRODVD_TAGS) - 1] = {{0}};
+
+ av_bprint_init(&font_buf, 0, AV_BPRINT_SIZE_AUTOMATIC);
+ av_bprintf(&font_buf, "%s", ASS_DEFAULT_FONT);
+
+ if (avctx->extradata) {
+ microdvd_load_tags(tags, avctx->extradata);
+ for (i = 0; i < sizeof(MICRODVD_TAGS) - 1; i++) {
+ switch (av_tolower(tags[i].key)) {
+ case 'y':
+ for (sidx = 0; sidx < sizeof(MICRODVD_STYLES) - 1; sidx++) {
+ if (tags[i].data1 & (1 << sidx)) {
+ switch (MICRODVD_STYLES[sidx]) {
+ case 'i': italic = 1; break;
+ case 'b': bold = 1; break;
+ case 'u': underline = 1; break;
+ }
+ }
+ }
+ break;
+
+ case 'c': color = tags[i].data1; break;
+ case 's': font_size = tags[i].data1; break;
+ case 'p': alignment = 8; break;
+
+ case 'f':
+ av_bprint_clear(&font_buf);
+ av_bprintf(&font_buf, "%.*s",
+ tags[i].data_string_len, tags[i].data_string);
+ break;
+ }
+ }
+ }
+ return ff_ass_subtitle_header(avctx, font_buf.str, font_size, color,
+ ASS_DEFAULT_BACK_COLOR, bold, italic,
+ underline, alignment);
+}
+
AVCodec ff_microdvd_decoder = {
.name = "microdvd",
.long_name = NULL_IF_CONFIG_SMALL("MicroDVD subtitle"),
.type = AVMEDIA_TYPE_SUBTITLE,
.id = CODEC_ID_MICRODVD,
- .init = ff_ass_subtitle_header_default,
+ .init = microdvd_init,
.decode = microdvd_decode_frame,
};