FFmpeg
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Data Structures | Enumerations | Functions
subtitles.h File Reference
#include <stdint.h>
#include <stddef.h>
#include "avformat.h"
#include "libavutil/bprint.h"

Go to the source code of this file.

Data Structures

struct  FFTextReader
 
struct  FFDemuxSubtitlesQueue
 

Enumerations

enum  sub_sort { SUB_SORT_TS_POS = 0, SUB_SORT_POS_TS }
 
enum  ff_utf_type { FF_UTF_8, FF_UTF16LE, FF_UTF16BE }
 

Functions

void ff_text_init_avio (FFTextReader *r, AVIOContext *pb)
 Initialize the FFTextReader from the given AVIOContext.
 
void ff_text_init_buf (FFTextReader *r, void *buf, size_t size)
 Similar to ff_text_init_avio(), but sets it up to read from a bounded buffer.
 
int64_t ff_text_pos (FFTextReader *r)
 Return the byte position of the next byte returned by ff_text_r8().
 
int ff_text_r8 (FFTextReader *r)
 Return the next byte.
 
int ff_text_eof (FFTextReader *r)
 Return non-zero if EOF was reached.
 
int ff_text_peek_r8 (FFTextReader *r)
 Like ff_text_r8(), but don't remove the byte from the buffer.
 
void ff_text_read (FFTextReader *r, char *buf, size_t size)
 Read the given number of bytes (in UTF-8).
 
AVPacketff_subtitles_queue_insert (FFDemuxSubtitlesQueue *q, const uint8_t *event, int len, int merge)
 Insert a new subtitle event.
 
void ff_subtitles_queue_finalize (FFDemuxSubtitlesQueue *q)
 Set missing durations and sort subtitles by PTS, and then byte position.
 
int ff_subtitles_queue_read_packet (FFDemuxSubtitlesQueue *q, AVPacket *pkt)
 Generic read_packet() callback for subtitles demuxers using this queue system.
 
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.
 
void ff_subtitles_queue_clean (FFDemuxSubtitlesQueue *q)
 Remove and destroy all the subtitles packets.
 
int ff_smil_extract_next_text_chunk (FFTextReader *tr, AVBPrint *buf, char *c)
 SMIL helper to load next chunk ("<...>" or untagged content) in buf.
 
const char * ff_smil_get_attr_ptr (const char *s, const char *attr)
 SMIL helper to point on the value of an attribute in the given tag.
 
void ff_subtitles_read_chunk (AVIOContext *pb, AVBPrint *buf)
 Same as ff_subtitles_read_text_chunk(), but read from an AVIOContext.
 
void ff_subtitles_read_text_chunk (FFTextReader *tr, AVBPrint *buf)
 Read a subtitles chunk from FFTextReader.
 
static av_always_inline int ff_subtitles_next_line (const char *ptr)
 Get the number of characters to increment to jump to the next line, or to the end of the string.
 
ptrdiff_t ff_subtitles_read_line (FFTextReader *tr, char *buf, size_t size)
 Read a line of text.
 

Enumeration Type Documentation

enum sub_sort
Enumerator:
SUB_SORT_TS_POS 

sort by timestamps, then position

SUB_SORT_POS_TS 

sort by position, then timestamps

Definition at line 29 of file subtitles.h.

Enumerator:
FF_UTF_8 
FF_UTF16LE 
FF_UTF16BE 

Definition at line 34 of file subtitles.h.

Function Documentation

void ff_text_init_avio ( FFTextReader r,
AVIOContext pb 
)

Initialize the FFTextReader from the given AVIOContext.

This function will read some bytes from pb, and test for UTF-8 or UTF-16 BOMs. Further accesses to FFTextReader will read more data from pb.

The purpose of FFTextReader is to transparently convert read data to UTF-8 if the stream had a UTF-16 BOM.

Parameters
robject which will be initialized
pbstream to read from (referenced as long as FFTextReader is in use)

Definition at line 27 of file subtitles.c.

Referenced by ass_read_header(), ff_text_init_buf(), realtext_read_header(), sami_read_header(), and srt_read_header().

void ff_text_init_buf ( FFTextReader r,
void buf,
size_t  size 
)

Similar to ff_text_init_avio(), but sets it up to read from a bounded buffer.

Parameters
robject which will be initialized
bufbuffer to read from (referenced as long as FFTextReader is in use)
sizesize of buf

Definition at line 50 of file subtitles.c.

Referenced by ass_probe(), realtext_probe(), sami_probe(), and srt_probe().

int64_t ff_text_pos ( FFTextReader r)

Return the byte position of the next byte returned by ff_text_r8().

For UTF-16 source streams, this will return the original position, but it will be incorrect if a codepoint was only partially read with ff_text_r8().

Definition at line 57 of file subtitles.c.

Referenced by get_line(), realtext_read_header(), sami_read_header(), and srt_read_header().

int ff_text_r8 ( FFTextReader r)

Return the next byte.

The return value is always 0 - 255. Returns 0 on EOF. If the source stream is UTF-16, this reads from the stream converted to UTF-8. On invalid UTF-16, 0 is returned.

Definition at line 62 of file subtitles.c.

Referenced by ff_smil_extract_next_text_chunk(), ff_subtitles_read_line(), ff_subtitles_read_text_chunk(), ff_text_peek_r8(), ff_text_read(), get_line(), and srt_probe().

int ff_text_eof ( FFTextReader r)

Return non-zero if EOF was reached.

Definition at line 89 of file subtitles.c.

Referenced by ff_subtitles_read_line(), realtext_read_header(), sami_read_header(), and srt_read_header().

int ff_text_peek_r8 ( FFTextReader r)

Like ff_text_r8(), but don't remove the byte from the buffer.

Definition at line 94 of file subtitles.c.

Referenced by ff_subtitles_read_line(), and srt_probe().

void ff_text_read ( FFTextReader r,
char *  buf,
size_t  size 
)

Read the given number of bytes (in UTF-8).

On error or EOF, \0 bytes are written.

Definition at line 83 of file subtitles.c.

Referenced by ass_probe(), realtext_probe(), and sami_probe().

AVPacket* ff_subtitles_queue_insert ( FFDemuxSubtitlesQueue q,
const uint8_t event,
int  len,
int  merge 
)

Insert a new subtitle event.

Parameters
eventthe subtitle line, may not be zero terminated
lenthe length of the event (in strlen() sense, so without '\0')
mergeset to 1 if the current event should be concatenated with the previous one instead of adding a new entry, 0 otherwise

Definition at line 108 of file subtitles.c.

Referenced by aqt_read_header(), ass_read_header(), jacosub_read_header(), lrc_read_header(), microdvd_read_header(), mpl2_read_header(), mpsub_read_header(), parse_file(), pjs_read_header(), realtext_read_header(), sami_read_header(), srt_read_header(), subviewer1_read_header(), subviewer_read_header(), vplayer_read_header(), and webvtt_read_header().

void ff_subtitles_queue_finalize ( FFDemuxSubtitlesQueue q)
int ff_subtitles_queue_read_packet ( FFDemuxSubtitlesQueue q,
AVPacket pkt 
)
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.

Except the first parameter, it matches AVInputFormat->read_seek2 prototypes.

Definition at line 215 of file subtitles.c.

Referenced by aqt_read_seek(), ass_read_seek(), jacosub_read_seek(), lrc_read_seek(), microdvd_read_seek(), mpl2_read_seek(), mpsub_read_seek(), pjs_read_seek(), realtext_read_seek(), sami_read_seek(), srt_read_seek(), subviewer1_read_seek(), subviewer_read_seek(), tedcaptions_read_seek(), vplayer_read_seek(), and webvtt_read_seek().

void ff_subtitles_queue_clean ( FFDemuxSubtitlesQueue q)
int ff_smil_extract_next_text_chunk ( FFTextReader tr,
AVBPrint buf,
char *  c 
)

SMIL helper to load next chunk ("<...>" or untagged content) in buf.

Parameters
ccached character, to avoid a backward seek

Definition at line 277 of file subtitles.c.

Referenced by realtext_read_header(), and sami_read_header().

const char* ff_smil_get_attr_ptr ( const char *  s,
const char *  attr 
)

SMIL helper to point on the value of an attribute in the given tag.

Parameters
sSMIL tag ("<...>")
attrthe attribute to look for

Definition at line 300 of file subtitles.c.

Referenced by realtext_read_header(), and sami_read_header().

void ff_subtitles_read_chunk ( AVIOContext pb,
AVBPrint buf 
)

Same as ff_subtitles_read_text_chunk(), but read from an AVIOContext.

Definition at line 367 of file subtitles.c.

Referenced by mpsub_read_header(), and webvtt_read_header().

void ff_subtitles_read_text_chunk ( FFTextReader tr,
AVBPrint buf 
)

Read a subtitles chunk from FFTextReader.

A chunk is defined by a multiline "event", ending with a second line break. The trailing line breaks are trimmed. CRLF are supported. Example: "foo\r\nbar\r\n\r\nnext" will print "foo\r\nbar" into buf, and pb will focus on the 'n' of the "next" string.

Parameters
trI/O context
bufan initialized buf where the chunk is written
Note
buf is cleared before writing into it.

Definition at line 325 of file subtitles.c.

Referenced by ff_subtitles_read_chunk(), and srt_read_header().

static av_always_inline int ff_subtitles_next_line ( const char *  ptr)
static

Get the number of characters to increment to jump to the next line, or to the end of the string.

The function handles the following line breaks schemes: LF, CRLF (MS), or standalone CR (old MacOS).

Definition at line 183 of file subtitles.h.

Referenced by get_pts(), jacosub_probe(), microdvd_probe(), mpl2_probe(), and mpsub_probe().

ptrdiff_t ff_subtitles_read_line ( FFTextReader tr,
char *  buf,
size_t  size 
)

Read a line of text.

Discards line ending characters. The function handles the following line breaks schemes: LF, CRLF (MS), or standalone CR (old MacOS).

Returns the number of bytes written to buf. Always writes a terminating 0, similar as with snprintf.

Note
returns a negative error code if a \0 byte is found

Definition at line 376 of file subtitles.c.

Referenced by srt_probe().