30 #define SRT_STACK_SIZE 64
43 __attribute__ ((__format__ (__printf__, 2, 3)))
57 s->stack[
s->stack_ptr++] =
c;
63 if (
s->stack_ptr <= 0)
65 return s->stack[--
s->stack_ptr];
71 for (
i =
s->stack_ptr-1;
i >= 0;
i--)
88 while (
s->stack_ptr !=
i)
109 (
c & 0xFF0000) >> 16 |
c & 0xFF00 | (
c & 0xFF) << 16);
127 s->alignment_applied = 1;
165 if (
color != 0xFFFFFFFF)
166 srt_print(priv,
"<font color=\"#%06x\">",
187 if (!
s->alignment_applied && alignment >= 0) {
189 s->alignment_applied = 1;
199 static void srt_move_cb(
void *priv,
int x1,
int y1,
int x2,
int y2,
239 for (
i=0;
i<
sub->num_rects;
i++) {
240 const char *ass =
sub->rects[
i]->ass;
247 #if FF_API_ASS_TIMING
248 if (!strncmp(ass,
"Dialogue: ", 10)) {
251 for (; dialog && num--; dialog++) {
252 s->alignment_applied = 0;
262 s->alignment_applied = 0;
267 #if FF_API_ASS_TIMING
277 if (
s->buffer.len > bufsize) {
281 memcpy(buf,
s->buffer.str,
s->buffer.len);
283 return s->buffer.len;
306 #if CONFIG_SRT_ENCODER
320 #if CONFIG_SUBRIP_ENCODER
333 #if CONFIG_TEXT_ENCODER
AVCodec ff_subrip_encoder
#define ASS_DEFAULT_ALIGNMENT
#define ASS_DEFAULT_FONT_SIZE
#define ASS_DEFAULT_COLOR
#define ASS_DEFAULT_UNDERLINE
#define ASS_DEFAULT_ITALIC
ASSDialog * ff_ass_split_dialog2(ASSSplitContext *ctx, const char *buf)
Split one ASS Dialogue line from a string buffer.
void ff_ass_free_dialog(ASSDialog **dialogp)
Free a dialogue obtained from ff_ass_split_dialog2().
ASSDialog * ff_ass_split_dialog(ASSSplitContext *ctx, const char *buf, int cache, int *number)
Split one or several ASS "Dialogue" lines from a string buffer and store them in an already initializ...
int ff_ass_split_override_codes(const ASSCodesCallbacks *callbacks, void *priv, const char *buf)
Split override codes out of a ASS "Dialogue" Text field.
ASSSplitContext * ff_ass_split(const char *buf)
Split a full ASS file or a ASS header from a string buffer and store the split structure in a newly a...
ASSStyle * ff_ass_style_get(ASSSplitContext *ctx, const char *style)
Find an ASSStyle structure by its name.
void ff_ass_split_free(ASSSplitContext *ctx)
Free all the memory allocated for an ASSSplitContext.
Libavcodec external API header.
static av_cold int init(AVCodecContext *avctx)
void av_bprint_init(AVBPrint *buf, unsigned size_init, unsigned size_max)
int av_bprint_finalize(AVBPrint *buf, char **ret_str)
Finalize a print buffer.
void av_vbprintf(AVBPrint *buf, const char *fmt, va_list vl_arg)
Append a formatted string to a print buffer.
void av_bprint_append_data(AVBPrint *buf, const char *data, unsigned size)
Append data to a print buffer.
void av_bprint_clear(AVBPrint *buf)
Reset the string to "" but keep internal allocated data.
#define AV_BPRINT_SIZE_UNLIMITED
static int av_bprint_is_complete(const AVBPrint *buf)
Test if the print buffer is complete (not truncated).
static float sub(float src0, float src1)
void(* text)(void *priv, const char *text, int len)
@ SUBTITLE_ASS
Formatted text, the ass field must be set by the decoder and is authoritative.
@ AV_CODEC_ID_TEXT
raw UTF-8 text
#define AVERROR_BUFFER_TOO_SMALL
Buffer too small.
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
static void srt_alignment_cb(void *priv, int alignment)
static int srt_encode_close(AVCodecContext *avctx)
static int text_encode_frame(AVCodecContext *avctx, unsigned char *buf, int bufsize, const AVSubtitle *sub)
static void srt_cancel_overrides_cb(void *priv, const char *style)
static void srt_close_tag(SRTContext *s, char tag)
static void srt_move_cb(void *priv, int x1, int y1, int x2, int y2, int t1, int t2)
static void srt_color_cb(void *priv, unsigned int color, unsigned int color_id)
static void srt_style_apply(SRTContext *s, const char *style)
static int srt_stack_find(SRTContext *s, const char c)
static void srt_font_name_cb(void *priv, const char *name)
static const ASSCodesCallbacks srt_callbacks
static void srt_new_line_cb(void *priv, int forced)
static int srt_stack_push(SRTContext *s, const char c)
static void srt_text_cb(void *priv, const char *text, int len)
static char srt_stack_pop(SRTContext *s)
static int encode_frame(AVCodecContext *avctx, unsigned char *buf, int bufsize, const AVSubtitle *sub, const ASSCodesCallbacks *cb)
static int srt_encode_frame(AVCodecContext *avctx, unsigned char *buf, int bufsize, const AVSubtitle *sub)
static const ASSCodesCallbacks text_callbacks
static void srt_print(SRTContext *s, const char *str,...)
static void srt_font_size_cb(void *priv, int size)
static void srt_style_cb(void *priv, char style, int close)
static av_cold int srt_encode_init(AVCodecContext *avctx)
static void srt_stack_push_pop(SRTContext *s, const char c, int close)
static void srt_end_cb(void *priv)
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
Set of callback functions corresponding to each override codes that can be encountered in a "Dialogue...
fields extracted from the [Events] section
char * style
name of the ASSStyle to use with this dialog
char * text
actual text which will be displayed as a subtitle, can include style override control codes (see ff_a...
This struct can be casted to ASS to access to the split data.
fields extracted from the [V4(+) Styles] section
int primary_color
color that a subtitle will normally appear in
int italic
whether text is italic (1) or not (0)
int bold
whether text is bold (1) or not (0)
int underline
whether text is underlined (1) or not (0)
char * font_name
font face (case sensitive)
int alignment
position of the text (left, center, top...), defined after the layout of the numpad (1-3 sub,...
main external API structure.
uint8_t * subtitle_header
Header containing style information for text subtitles.
const char * name
Name of the codec implementation.
ASSSplitContext * ass_ctx
static double cb(void *priv, double x, double y)