FFmpeg
Main Page
Related Pages
Modules
Namespaces
Namespace List
Namespace Members
All
Functions
Variables
Data Structures
Data Structures
Data Structure Index
Class Hierarchy
Data Fields
All
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
~
Functions
_
a
c
d
g
h
i
o
q
r
s
v
~
Variables
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Enumerations
Enumerator
a
d
e
f
h
i
j
l
m
n
p
r
s
v
Files
File List
Globals
All
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Functions
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Variables
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Typedefs
a
b
c
d
e
f
g
h
i
l
m
o
p
q
r
s
t
u
v
w
x
y
Enumerations
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Enumerator
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Macros
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Examples
•
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Modules
Pages
libavcodec
subviewerdec.c
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2012 Clément Bœsch
3
*
4
* This file is part of FFmpeg.
5
*
6
* FFmpeg is free software; you can redistribute it and/or
7
* modify it under the terms of the GNU Lesser General Public
8
* License as published by the Free Software Foundation; either
9
* version 2.1 of the License, or (at your option) any later version.
10
*
11
* FFmpeg is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
* Lesser General Public License for more details.
15
*
16
* You should have received a copy of the GNU Lesser General Public
17
* License along with FFmpeg; if not, write to the Free Software
18
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19
*/
20
21
/**
22
* @file
23
* SubViewer subtitle decoder
24
* @see https://en.wikipedia.org/wiki/SubViewer
25
*/
26
27
#include "
avcodec.h
"
28
#include "
ass.h
"
29
#include "
codec_internal.h
"
30
#include "
libavutil/bprint.h
"
31
32
static
int
subviewer_event_to_ass
(AVBPrint *buf,
const
char
*p)
33
{
34
while
(*p) {
35
if
(!strncmp(p,
"[br]"
, 4)) {
36
av_bprintf
(buf,
"\\N"
);
37
p += 4;
38
}
else
{
39
if
(p[0] ==
'\n'
&& p[1])
40
av_bprintf
(buf,
"\\N"
);
41
else
if
(*p !=
'\n'
&& *p !=
'\r'
)
42
av_bprint_chars
(buf, *p, 1);
43
p++;
44
}
45
}
46
47
return
0;
48
}
49
50
static
int
subviewer_decode_frame
(
AVCodecContext
*avctx,
AVSubtitle
*sub,
51
int
*got_sub_ptr,
const
AVPacket
*avpkt)
52
{
53
int
ret
= 0;
54
const
char
*ptr = avpkt->
data
;
55
FFASSDecoderContext
*
s
= avctx->
priv_data
;
56
AVBPrint buf;
57
58
av_bprint_init
(&buf, 0,
AV_BPRINT_SIZE_UNLIMITED
);
59
if
(ptr && avpkt->
size
> 0 && !
subviewer_event_to_ass
(&buf, ptr))
60
ret
=
ff_ass_add_rect
(sub, buf.str,
s
->readorder++, 0,
NULL
,
NULL
);
61
av_bprint_finalize
(&buf,
NULL
);
62
if
(
ret
< 0)
63
return
ret
;
64
*got_sub_ptr = sub->
num_rects
> 0;
65
return
avpkt->
size
;
66
}
67
68
const
FFCodec
ff_subviewer_decoder
= {
69
.
p
.
name
=
"subviewer"
,
70
CODEC_LONG_NAME
(
"SubViewer subtitle"
),
71
.p.type =
AVMEDIA_TYPE_SUBTITLE
,
72
.p.id =
AV_CODEC_ID_SUBVIEWER
,
73
FF_CODEC_DECODE_SUB_CB
(
subviewer_decode_frame
),
74
.init =
ff_ass_subtitle_header_default
,
75
.flush =
ff_ass_decoder_flush
,
76
.priv_data_size =
sizeof
(
FFASSDecoderContext
),
77
};
AVSubtitle
Definition:
avcodec.h:2257
AVMEDIA_TYPE_SUBTITLE
@ AVMEDIA_TYPE_SUBTITLE
Definition:
avutil.h:204
AV_BPRINT_SIZE_UNLIMITED
#define AV_BPRINT_SIZE_UNLIMITED
ff_ass_subtitle_header_default
int ff_ass_subtitle_header_default(AVCodecContext *avctx)
Generate a suitable AVCodecContext.subtitle_header for SUBTITLE_ASS with default style.
Definition:
ass.c:98
av_bprint_init
void av_bprint_init(AVBPrint *buf, unsigned size_init, unsigned size_max)
Definition:
bprint.c:69
AVSubtitle::num_rects
unsigned num_rects
Definition:
avcodec.h:2261
ff_ass_add_rect
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.
Definition:
ass.c:159
AVPacket::data
uint8_t * data
Definition:
packet.h:539
FFCodec
Definition:
codec_internal.h:127
FFCodec::p
AVCodec p
The public AVCodec.
Definition:
codec_internal.h:131
AV_CODEC_ID_SUBVIEWER
@ AV_CODEC_ID_SUBVIEWER
Definition:
codec_id.h:574
ass.h
s
#define s(width, name)
Definition:
cbs_vp9.c:198
CODEC_LONG_NAME
#define CODEC_LONG_NAME(str)
Definition:
codec_internal.h:326
NULL
#define NULL
Definition:
coverity.c:32
AVPacket::size
int size
Definition:
packet.h:540
av_bprint_finalize
int av_bprint_finalize(AVBPrint *buf, char **ret_str)
Finalize a print buffer.
Definition:
bprint.c:240
codec_internal.h
ff_ass_decoder_flush
void ff_ass_decoder_flush(AVCodecContext *avctx)
Helper to flush a text subtitles decoder making use of the FFASSDecoderContext.
Definition:
ass.c:166
bprint.h
AVCodec::name
const char * name
Name of the codec implementation.
Definition:
codec.h:194
avcodec.h
ret
ret
Definition:
filter_design.txt:187
av_bprintf
void av_bprintf(AVBPrint *buf, const char *fmt,...)
Definition:
bprint.c:99
AVCodecContext
main external API structure.
Definition:
avcodec.h:451
FF_CODEC_DECODE_SUB_CB
#define FF_CODEC_DECODE_SUB_CB(func)
Definition:
codec_internal.h:345
subviewer_decode_frame
static int subviewer_decode_frame(AVCodecContext *avctx, AVSubtitle *sub, int *got_sub_ptr, const AVPacket *avpkt)
Definition:
subviewerdec.c:50
AVCodecContext::priv_data
void * priv_data
Definition:
avcodec.h:478
AVPacket
This structure stores compressed data.
Definition:
packet.h:516
ff_subviewer_decoder
const FFCodec ff_subviewer_decoder
Definition:
subviewerdec.c:68
FFASSDecoderContext
Definition:
ass.h:46
av_bprint_chars
void av_bprint_chars(AVBPrint *buf, char c, unsigned n)
Append char c n times to a print buffer.
Definition:
bprint.c:145
subviewer_event_to_ass
static int subviewer_event_to_ass(AVBPrint *buf, const char *p)
Definition:
subviewerdec.c:32
Generated on Sat Mar 22 2025 19:22:07 for FFmpeg by
1.8.17