42     while(p[offset] == 
' ' || p[offset] == 
'\t') {
 
   45     if(p[offset] == 
'[' && p[offset + 1] >= 
'a' && p[offset + 1] <= 
'z') {
 
   58         if(p[offset] == 
' ' || p[offset] == 
'\t') {
 
   60         } 
else if(p[offset] == 
'[') {
 
   63         } 
else if (p[offset] == 
']' && in_brackets) {
 
   66         } 
else if(in_brackets &&
 
   67                  (p[offset] == 
':' || p[offset] == 
'.' || p[offset] == 
'-' ||
 
   68                  (p[offset] >= 
'0' && p[offset] <= 
'9'))) {
 
   82     while(p[offset] == 
' ' || p[offset] == 
'\t') {
 
   85     if(p[offset] != 
'[') {
 
   88     if(sscanf(p, 
"[-%"SCNu64
":%"SCNu64
".%"SCNu64
"]", &mm, &ss, &cs) == 3) {
 
   90         *start = -(int64_t) (mm*60000 + ss*1000 + cs*10);
 
   91     } 
else if(sscanf(p, 
"[%"SCNu64
":%"SCNu64
".%"SCNu64
"]", &mm, &ss, &cs) == 3) {
 
   92         *start = mm*60000 + ss*1000 + cs*10;
 
   98     } 
while(p[offset] && p[offset-1] != 
']');
 
  126     if(!memcmp(p->
buf, 
"\xef\xbb\xbf", 3)) { 
 
  129     while(p->
buf[offset] == 
'\n' || p->
buf[offset] == 
'\r') {
 
  132     if(p->
buf[offset] != 
'[') {
 
  137     if(!memcmp(p->
buf + offset, 
"offset:", 7)) {
 
  140     if(sscanf(p->
buf + offset, 
"%"SCNd64
":%"SCNu64
".%"SCNu64
"]",
 
  141               &mm, &ss, &cs) == 3) {
 
  146         metadata_item->
native; metadata_item++) {
 
  147         size_t metadata_item_len = strlen(metadata_item->
native);
 
  148         if(p->
buf[offset + metadata_item_len] == 
':' &&
 
  149            !memcmp(p->
buf + offset, metadata_item->
native, metadata_item_len)) {
 
  175         if(header_offset >= 0) {
 
  176             char *comma_offset = strchr(line.str, 
':');
 
  178                 char *right_bracket_offset = strchr(line.str, 
']');
 
  179                 if(!right_bracket_offset) {
 
  183                 *right_bracket_offset = *comma_offset = 
'\0';
 
  184                 if(strcmp(line.str + 1, 
"offset") ||
 
  185                    sscanf(comma_offset + 1, 
"%"SCNd64, &lrc->
ts_offset) != 1) {
 
  189                 *right_bracket_offset = 
']';
 
  195             int64_t ts_stroffset = 0;
 
  196             int64_t ts_stroffset_incr = 0;
 
  197             int64_t ts_strlength = 
count_ts(line.str);
 
  199             while((ts_stroffset_incr = 
read_ts(line.str + ts_stroffset,
 
  201                 ts_stroffset += ts_stroffset_incr;
 
  203                                                 line.len - ts_strlength, 0);
 
  226                          int64_t min_ts, int64_t ts, int64_t max_ts, 
int flags)
 
  230                                    min_ts, ts, max_ts, flags);
 
static int64_t count_ts(const char *p)
 
AVInputFormat ff_lrc_demuxer
 
int64_t pos
byte position in stream, -1 if unknown 
 
enum AVCodecID codec_id
Specific type of the encoded data (the codec used). 
 
void ff_subtitles_queue_clean(FFDemuxSubtitlesQueue *q)
Remove and destroy all the subtitles packets. 
 
static int64_t read_ts(const char *p, int64_t *start)
 
int av_bprint_finalize(AVBPrint *buf, char **ret_str)
Finalize a print buffer. 
 
int ff_subtitles_queue_read_packet(FFDemuxSubtitlesQueue *q, AVPacket *pkt)
Generic read_packet() callback for subtitles demuxers using this queue system. 
 
int64_t duration
Duration of this packet in AVStream->time_base units, 0 if unknown. 
 
AVStream * avformat_new_stream(AVFormatContext *s, const AVCodec *c)
Add a new stream to a media file. 
 
static av_cold int read_close(AVFormatContext *ctx)
 
static av_always_inline int64_t avio_tell(AVIOContext *s)
ftell() equivalent for AVIOContext. 
 
AVDictionary * metadata
Metadata that applies to the whole file. 
 
static int lrc_read_close(AVFormatContext *s)
 
#define AV_BPRINT_SIZE_UNLIMITED
 
#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)
 
enum AVMediaType codec_type
General type of the encoded data. 
 
static int lrc_probe(AVProbeData *p)
 
static const uint8_t offset[127][2]
 
int avio_r8(AVIOContext *s)
 
unsigned char * buf
Buffer must have AVPROBE_PADDING_SIZE of extra allocated bytes filled with zero. 
 
const AVMetadataConv ff_lrc_metadata_conv[]
 
static int read_header(FFV1Context *f)
 
static int read_packet(void *opaque, uint8_t *buf, int buf_size)
 
int ff_subtitles_queue_seek(FFDemuxSubtitlesQueue *q, AVFormatContext *s, int stream_index, int64_t min_ts, int64_t ts, int64_t max_ts, int flags)
Update current_sub_idx to emulate a seek. 
 
AVIOContext * pb
I/O context. 
 
static int64_t find_header(const char *p)
 
int av_dict_set(AVDictionary **pm, const char *key, const char *value, int flags)
Set the given entry in *pm, overwriting an existing entry. 
 
static int64_t read_line(AVBPrint *buf, AVIOContext *pb)
 
static int lrc_read_header(AVFormatContext *s)
 
This structure contains the data a format has to probe a file. 
 
void av_bprint_clear(AVBPrint *buf)
Reset the string to "" but keep internal allocated data. 
 
static int lrc_read_packet(AVFormatContext *s, AVPacket *pkt)
 
void * priv_data
Format private data. 
 
AVCodecParameters * codecpar
Codec parameters associated with this stream. 
 
int avio_feof(AVIOContext *s)
feof() equivalent for AVIOContext. 
 
AVPacket * ff_subtitles_queue_insert(FFDemuxSubtitlesQueue *q, const uint8_t *event, size_t len, int merge)
Insert a new subtitle event. 
 
This structure stores compressed data. 
 
void ff_subtitles_queue_finalize(void *log_ctx, FFDemuxSubtitlesQueue *q)
Set missing durations, sort subtitles by PTS (and then byte position), and drop duplicated events...
 
int64_t pts
Presentation timestamp in AVStream->time_base units; the time at which the decompressed packet will b...
 
#define AV_NOPTS_VALUE
Undefined timestamp value. 
 
static int lrc_read_seek(AVFormatContext *s, int stream_index, int64_t min_ts, int64_t ts, int64_t max_ts, int flags)
 
void av_bprint_chars(AVBPrint *buf, char c, unsigned n)
Append char c n times to a print buffer.