30 #define STYLE_FLAG_BOLD (1<<0) 31 #define STYLE_FLAG_ITALIC (1<<1) 32 #define STYLE_FLAG_UNDERLINE (1<<2) 34 #define BOX_SIZE_INITIAL 40 36 #define STYL_BOX (1<<0) 37 #define HLIT_BOX (1<<1) 38 #define HCLR_BOX (1<<2) 39 #define TWRP_BOX (1<<3) 42 #define BOTTOM_CENTER 2 43 #define BOTTOM_RIGHT 3 45 #define MIDDLE_CENTER 5 46 #define MIDDLE_RIGHT 6 115 for(i = 0; i < m->
count_s; i++) {
131 for(i = 0; i < m->
count_f; i++) {
142 int i, box_size, font_length;
143 int8_t v_align, h_align;
156 h_align = *tx3g_ptr++;
157 v_align = *tx3g_ptr++;
190 style_fontID =
AV_RB16(tx3g_ptr);
226 font_length = *tx3g_ptr++;
228 box_size = box_size + font_length;
247 tx3g_ptr = tx3g_ptr + font_length;
284 int style_entries =
AV_RB16(tsmb);
340 const char *
start = text;
359 if (text < text_end && m->box_flags &
TWRP_BOX) {
367 while (text < text_end) {
404 av_bprintf(buf,
"{\\1c&H000000&}{\\2c&HFFFFFF&}");
411 av_bprintf(buf,
"{\\1c&HFFFFFF&}{\\2c&H000000&}");
421 for (i = 0; i <
len; i++) {
466 char *ptr = avpkt->
data;
468 int text_length, tsmb_type, ret_tsmb;
473 if (!ptr || avpkt->
size < 2)
483 if (avpkt->
size == 2)
492 end = ptr +
FFMIN(2 + text_length, avpkt->
size);
504 if (text_length + 2 != avpkt->
size) {
513 if (tsmb_size == 1) {
523 if (tsmb_size == 0) {
532 if (tsmb_type == box_types[i].
type) {
535 ret_tsmb = box_types[i].
decode(tsmb, m, avpkt);
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
void av_bprintf(AVBPrint *buf, const char *fmt,...)
static const size_t box_count
#define GET_UTF8(val, GET_BYTE, ERROR)
Convert a UTF-8 character (up to 4 bytes) to its 32-bit UCS-4 encoded form.
static int decode_twrp(const uint8_t *tsmb, MovTextContext *m, AVPacket *avpkt)
static void flush(AVCodecContext *avctx)
#define ASS_DEFAULT_BORDERSTYLE
Memory handling functions.
int ff_ass_subtitle_header(AVCodecContext *avctx, const char *font, int font_size, int color, int back_color, int bold, int italic, int underline, int border_style, int alignment)
Generate a suitable AVCodecContext.subtitle_header for SUBTITLE_ASS.
static av_cold int init(AVCodecContext *avctx)
int ff_ass_add_rect(AVSubtitle *sub, const char *dialog, int readorder, int layer, const char *style, const char *speaker)
Add an ASS dialog to a subtitle.
static void decode(AVCodecContext *dec_ctx, AVPacket *pkt, AVFrame *frame, FILE *outfile)
int av_bprint_finalize(AVBPrint *buf, char **ret_str)
Finalize a print buffer.
static av_cold int end(AVCodecContext *avctx)
int ff_ass_subtitle_header_default(AVCodecContext *avctx)
Generate a suitable AVCodecContext.subtitle_header for SUBTITLE_ASS with default style.
uint8_t * extradata
some codecs need / can use extradata like Huffman tables.
static int get_utf8_length_at(const char *text, const char *text_end)
static int mov_text_init(AVCodecContext *avctx)
static void mov_text_cleanup(MovTextContext *m)
#define AV_CODEC_FLAG2_RO_FLUSH_NOOP
Do not reset ASS ReadOrder field on flush (subtitles decoding)
#define STYLE_FLAG_UNDERLINE
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
#define AV_BPRINT_SIZE_UNLIMITED
static const Box box_types[]
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
void av_bprint_init(AVBPrint *buf, unsigned size_init, unsigned size_max)
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
static int text_to_ass(AVBPrint *buf, const char *text, const char *text_end, AVCodecContext *avctx)
const char * name
Name of the codec implementation.
static void mov_text_flush(AVCodecContext *avctx)
#define STYLE_FLAG_ITALIC
static void error(const char *err)
#define FF_ARRAY_ELEMS(a)
static int decode_hlit(const uint8_t *tsmb, MovTextContext *m, AVPacket *avpkt)
int(* decode)(const uint8_t *tsmb, MovTextContext *m, AVPacket *avpkt)
Libavcodec external API header.
main external API structure.
static int decode_hclr(const uint8_t *tsmb, MovTextContext *m, AVPacket *avpkt)
common internal and external API header
static int decode_styl(const uint8_t *tsmb, MovTextContext *m, AVPacket *avpkt)
static int mov_text_decode_close(AVCodecContext *avctx)
AVCodec ff_movtext_decoder
#define MKBETAG(a, b, c, d)
void av_dynarray_add(void *tab_ptr, int *nb_ptr, void *elem)
Add the pointer to an element to a dynamic array.
static void mov_text_cleanup_ftab(MovTextContext *m)
int flags2
AV_CODEC_FLAG2_*.
static int mov_text_decode_frame(AVCodecContext *avctx, void *data, int *got_sub_ptr, AVPacket *avpkt)
This structure stores compressed data.
static int mov_text_tx3g(AVCodecContext *avctx, MovTextContext *m)
void av_bprint_chars(AVBPrint *buf, char c, unsigned n)
Append char c n times to a print buffer.