64 trailer = strstr(trailer,
"Format:");
66 trailer = strstr(trailer,
"\n");
69 header_size = (trailer - avctx->
extradata);
76 if (avctx->
extradata[header_size - 1] !=
'\n')
79 if (!strstr(avctx->
extradata,
"\n[Events]"))
80 avio_printf(s->
pb,
"[Events]\r\nFormat: %s, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text\r\n",
114 av_log(s,
AV_LOG_DEBUG,
"wrote %d ASS lines, cached dialogues: %d, waiting for event id %d\n",
144 prev->
next = dialogue;
145 dialogue->
prev = prev;
151 next->
prev = dialogue;
152 dialogue->
next = next;
167 int hh1, mm1, ss1, ms1;
168 int hh2, mm2, ss2, ms2;
181 if (ass->
ssa_mode && !strncmp(p,
"Marked=", 7))
184 layer = strtol(p, &p, 10);
187 hh1 = (int)(start / 360000); mm1 = (int)(start / 6000) % 60;
188 hh2 = (int)(end / 360000); mm2 = (int)(end / 6000) % 60;
189 ss1 = (int)(start / 100) % 60; ms1 = (int)(start % 100);
190 ss2 = (int)(end / 100) % 60; ms2 = (int)(end % 100);
191 if (hh1 > 9) hh1 = 9, mm1 = 59, ss1 = 59, ms1 = 99;
192 if (hh2 > 9) hh2 = 9, mm2 = 59, ss2 = 59, ms2 = 99;
194 dialogue->
line =
av_asprintf(
"%s%ld,%d:%02d:%02d.%02d,%d:%02d:%02d.%02d,%s",
196 layer, hh1, mm1, ss1, ms1, hh2, mm2, ss2, ms2, p);
197 if (!dialogue->
line) {
223 #define OFFSET(x) offsetof(ASSContext, x)
224 #define E AV_OPT_FLAG_ENCODING_PARAM
226 {
"ignore_readorder",
"write events immediately, even if they're out-of-order",
OFFSET(ignore_readorder),
AV_OPT_TYPE_BOOL, {.i64 = 0}, 0, 1,
E },
240 .mime_type =
"text/x-ssa",
241 .extensions =
"ass,ssa",
248 .priv_class = &ass_class,
#define AV_LOG_WARNING
Something somehow does not look correct.
#define LIBAVUTIL_VERSION_INT
struct DialogueLine * next
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
static av_cold int end(AVCodecContext *avctx)
int64_t duration
Duration of this packet in AVStream->time_base units, 0 if unknown.
uint8_t * extradata
some codecs need / can use extradata like Huffman tables.
AVStream ** streams
A list of all streams in the file.
void avio_write(AVIOContext *s, const unsigned char *buf, int size)
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
AVCodecContext * codec
Codec context associated with this stream.
struct DialogueLine * prev
char * av_asprintf(const char *fmt,...)
unsigned int nb_streams
Number of elements in AVFormatContext.streams.
int void avio_flush(AVIOContext *s)
Force flushing of buffered data.
DialogueLine * dialogue_cache
AVIOContext * pb
I/O context.
main external API structure.
Describe the class of an AVClass context structure.
DialogueLine * last_added_dialogue
void * priv_data
Format private data.
This structure stores compressed data.
void * av_mallocz(size_t size)
Allocate a block of size bytes with alignment suitable for all memory accesses (including vectors if ...
int64_t pts
Presentation timestamp in AVStream->time_base units; the time at which the decompressed packet will b...
int avio_printf(AVIOContext *s, const char *fmt,...) av_printf_format(2