Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
F
ffmpeg.wasm-core
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Linshizhi
ffmpeg.wasm-core
Commits
e807a2b6
Commit
e807a2b6
authored
Oct 14, 2012
by
Clément Bœsch
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
lavc: add raw text subtitles decoder.
parent
c753b56b
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
129 additions
and
1 deletion
+129
-1
Changelog
Changelog
+1
-0
Makefile
libavcodec/Makefile
+1
-0
allcodecs.c
libavcodec/allcodecs.c
+1
-0
textdec.c
libavcodec/textdec.c
+125
-0
version.h
libavcodec/version.h
+1
-1
No files found.
Changelog
View file @
e807a2b6
...
...
@@ -13,6 +13,7 @@ version <next>:
- remove -same_quant, it hasn't worked for years
- X-Face image encoder and decoder
- metadata (INFO tag) support in WAV muxer
- subtitles raw text decoder
version 1.0:
...
...
libavcodec/Makefile
View file @
e807a2b6
...
...
@@ -402,6 +402,7 @@ OBJS-$(CONFIG_SVQ3_DECODER) += svq3.o svq13.o h263.o h264.o \
h264_loopfilter.o
h264_direct.o
\
h264_sei.o
h264_ps.o
h264_refs.o
\
h264_cavlc.o
h264_cabac.o
cabac.o
OBJS-$(CONFIG_TEXT_DECODER)
+=
textdec.o
ass.o
OBJS-$(CONFIG_TAK_DECODER)
+=
takdec.o
tak.o
OBJS-$(CONFIG_TARGA_DECODER)
+=
targa.o
OBJS-$(CONFIG_TARGA_ENCODER)
+=
targaenc.o
rle.o
...
...
libavcodec/allcodecs.c
View file @
e807a2b6
...
...
@@ -425,6 +425,7 @@ void avcodec_register_all(void)
REGISTER_ENCDEC
(
SRT
,
srt
);
REGISTER_ENCDEC
(
SUBRIP
,
subrip
);
REGISTER_DECODER
(
SUBVIEWER
,
subviewer
);
REGISTER_DECODER
(
TEXT
,
text
);
REGISTER_DECODER
(
WEBVTT
,
webvtt
);
REGISTER_ENCDEC
(
XSUB
,
xsub
);
...
...
libavcodec/textdec.c
0 → 100644
View file @
e807a2b6
/*
* Copyright (c) 2012 Clément Bœsch
*
* This file is part of FFmpeg.
*
* FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* FFmpeg is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
/**
* @file
* Raw subtitles decoder
*/
#include "avcodec.h"
#include "ass.h"
#include "libavutil/bprint.h"
#include "libavutil/opt.h"
typedef
struct
{
AVClass
*
class
;
char
*
linebreaks
;
int
keep_ass_markup
;
}
TextContext
;
#define OFFSET(x) offsetof(TextContext, x)
#define SD AV_OPT_FLAG_SUBTITLE_PARAM | AV_OPT_FLAG_DECODING_PARAM
static
const
AVOption
options
[]
=
{
{
"linebreaks"
,
"Extra line breaks characters"
,
OFFSET
(
linebreaks
),
AV_OPT_TYPE_STRING
,
{.
str
=
NULL
},
.
flags
=
SD
},
{
"keep_ass_markup"
,
"Set if ASS tags must be escaped"
,
OFFSET
(
keep_ass_markup
),
AV_OPT_TYPE_INT
,
{.
i64
=
0
},
0
,
1
,
.
flags
=
SD
},
{
NULL
}
};
static
const
AVClass
text_decoder_class
=
{
.
class_name
=
"text decoder"
,
.
item_name
=
av_default_item_name
,
.
option
=
options
,
.
version
=
LIBAVUTIL_VERSION_INT
,
};
static
int
text_event_to_ass
(
const
AVCodecContext
*
avctx
,
AVBPrint
*
buf
,
const
char
*
p
,
const
char
*
p_end
)
{
const
TextContext
*
text
=
avctx
->
priv_data
;
for
(;
p
<
p_end
&&
*
p
;
p
++
)
{
/* forced custom line breaks, not accounted as "normal" EOL */
if
(
text
->
linebreaks
&&
strchr
(
text
->
linebreaks
,
*
p
))
{
av_bprintf
(
buf
,
"
\\
N"
);
/* standard ASS escaping so random characters don't get mis-interpreted
* as ASS */
}
else
if
(
!
text
->
keep_ass_markup
&&
strchr
(
"{}
\\
"
,
*
p
))
{
av_bprintf
(
buf
,
"
\\
%c"
,
*
p
);
/* some packets might end abruptly (no \0 at the end, like for example
* in some cases of demuxing from a classic video container), some
* might be terminated with \n or \r\n which we have to remove (for
* consistency with those who haven't), and we also have to deal with
* evil cases such as \r at the end of the buffer (and no \0 terminated
* character) */
}
else
if
(
p
[
0
]
==
'\n'
)
{
/* some stuff left so we can insert a line break */
if
(
p
<
p_end
-
1
)
av_bprintf
(
buf
,
"
\\
N"
);
}
else
if
(
p
[
0
]
==
'\r'
&&
p
<
p_end
-
1
&&
p
[
1
]
==
'\n'
)
{
/* \r followed by a \n, we can skip it. We don't insert the \N yet
* because we don't know if it is followed by more text */
continue
;
/* finally, a sane character */
}
else
{
av_bprint_chars
(
buf
,
*
p
,
1
);
}
}
av_bprintf
(
buf
,
"
\r\n
"
);
return
0
;
}
static
int
text_decode_frame
(
AVCodecContext
*
avctx
,
void
*
data
,
int
*
got_sub_ptr
,
AVPacket
*
avpkt
)
{
AVBPrint
buf
;
AVSubtitle
*
sub
=
data
;
const
char
*
ptr
=
avpkt
->
data
;
const
int
ts_start
=
av_rescale_q
(
avpkt
->
pts
,
avctx
->
time_base
,
(
AVRational
){
1
,
100
});
const
int
ts_duration
=
avpkt
->
duration
!=
-
1
?
av_rescale_q
(
avpkt
->
duration
,
avctx
->
time_base
,
(
AVRational
){
1
,
100
})
:
-
1
;
av_bprint_init
(
&
buf
,
0
,
AV_BPRINT_SIZE_UNLIMITED
);
if
(
ptr
&&
avpkt
->
size
>
0
&&
*
ptr
&&
!
text_event_to_ass
(
avctx
,
&
buf
,
ptr
,
ptr
+
avpkt
->
size
))
{
if
(
!
av_bprint_is_complete
(
&
buf
))
{
av_bprint_finalize
(
&
buf
,
NULL
);
return
AVERROR
(
ENOMEM
);
}
ff_ass_add_rect
(
sub
,
buf
.
str
,
ts_start
,
ts_duration
,
0
);
}
*
got_sub_ptr
=
sub
->
num_rects
>
0
;
av_bprint_finalize
(
&
buf
,
NULL
);
return
avpkt
->
size
;
}
AVCodec
ff_text_decoder
=
{
.
name
=
"text"
,
.
priv_data_size
=
sizeof
(
TextContext
),
.
long_name
=
NULL_IF_CONFIG_SMALL
(
"Raw text subtitle"
),
.
type
=
AVMEDIA_TYPE_SUBTITLE
,
.
id
=
AV_CODEC_ID_TEXT
,
.
decode
=
text_decode_frame
,
.
init
=
ff_ass_subtitle_header_default
,
.
priv_class
=
&
text_decoder_class
,
};
libavcodec/version.h
View file @
e807a2b6
...
...
@@ -29,7 +29,7 @@
#include "libavutil/avutil.h"
#define LIBAVCODEC_VERSION_MAJOR 54
#define LIBAVCODEC_VERSION_MINOR 6
6
#define LIBAVCODEC_VERSION_MINOR 6
7
#define LIBAVCODEC_VERSION_MICRO 100
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment