#define STYL_BOX (1<<0)
#define HLIT_BOX (1<<1)
#define HCLR_BOX (1<<2)
+#define TWRP_BOX (1<<3)
#define BOTTOM_LEFT 1
#define BOTTOM_CENTER 2
uint8_t hlit_color[4];
} HilightcolorBox;
+typedef struct {
+ uint8_t wrap_flag;
+} TextWrapBox;
+
typedef struct {
StyleBox **s;
StyleBox *s_temp;
HilightcolorBox c;
FontRecord **ftab;
FontRecord *ftab_temp;
+ TextWrapBox w;
MovTextDefault d;
uint8_t box_flags;
uint16_t style_entries, ftab_entries;
return 0;
}
+static int decode_twrp(const uint8_t *tsmb, MovTextContext *m, AVPacket *avpkt)
+{
+ m->box_flags |= TWRP_BOX;
+ m->w.wrap_flag = *tsmb++;
+ return 0;
+}
+
static int decode_hlit(const uint8_t *tsmb, MovTextContext *m, AVPacket *avpkt)
{
m->box_flags |= HLIT_BOX;
static const Box box_types[] = {
{ MKBETAG('s','t','y','l'), 2, decode_styl },
{ MKBETAG('h','l','i','t'), 4, decode_hlit },
- { MKBETAG('h','c','l','r'), 4, decode_hclr }
+ { MKBETAG('h','c','l','r'), 4, decode_hclr },
+ { MKBETAG('t','w','r','p'), 1, decode_twrp }
};
const static size_t box_count = FF_ARRAY_ELEMS(box_types);
int i = 0;
int j = 0;
int text_pos = 0;
+
+ if (text < text_end && m->box_flags & TWRP_BOX) {
+ if (m->w.wrap_flag == 1) {
+ av_bprintf(buf, "{\\q1}"); /* End of line wrap */
+ } else {
+ av_bprintf(buf, "{\\q2}"); /* No wrap */
+ }
+ }
+
while (text < text_end) {
if (m->box_flags & STYL_BOX) {
for (i = 0; i < m->style_entries; i++) {