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
036e12b2
Commit
036e12b2
authored
Jan 27, 2017
by
Paul B Mahol
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
avformat: add SCC muxer
Signed-off-by:
Paul B Mahol
<
onemda@gmail.com
>
parent
76331361
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
127 additions
and
2 deletions
+127
-2
Changelog
Changelog
+1
-0
Makefile
libavformat/Makefile
+1
-0
allformats.c
libavformat/allformats.c
+1
-1
sccenc.c
libavformat/sccenc.c
+123
-0
version.h
libavformat/version.h
+1
-1
No files found.
Changelog
View file @
036e12b2
...
@@ -18,6 +18,7 @@ version <next>:
...
@@ -18,6 +18,7 @@ version <next>:
- readeia608 filter
- readeia608 filter
- Sample Dump eXchange demuxer
- Sample Dump eXchange demuxer
- abitscope multimedia filter
- abitscope multimedia filter
- Scenarist Closed Captions demuxer and muxer
version 3.2:
version 3.2:
- libopenmpt demuxer
- libopenmpt demuxer
...
...
libavformat/Makefile
View file @
036e12b2
...
@@ -435,6 +435,7 @@ OBJS-$(CONFIG_SAP_DEMUXER) += sapdec.o
...
@@ -435,6 +435,7 @@ OBJS-$(CONFIG_SAP_DEMUXER) += sapdec.o
OBJS-$(CONFIG_SAP_MUXER)
+=
sapenc.o
OBJS-$(CONFIG_SAP_MUXER)
+=
sapenc.o
OBJS-$(CONFIG_SBG_DEMUXER)
+=
sbgdec.o
OBJS-$(CONFIG_SBG_DEMUXER)
+=
sbgdec.o
OBJS-$(CONFIG_SCC_DEMUXER)
+=
sccdec.o
subtitles.o
OBJS-$(CONFIG_SCC_DEMUXER)
+=
sccdec.o
subtitles.o
OBJS-$(CONFIG_SCC_MUXER)
+=
sccenc.o
subtitles.o
OBJS-$(CONFIG_SDP_DEMUXER)
+=
rtsp.o
OBJS-$(CONFIG_SDP_DEMUXER)
+=
rtsp.o
OBJS-$(CONFIG_SDR2_DEMUXER)
+=
sdr2.o
OBJS-$(CONFIG_SDR2_DEMUXER)
+=
sdr2.o
OBJS-$(CONFIG_SDS_DEMUXER)
+=
sdsdec.o
OBJS-$(CONFIG_SDS_DEMUXER)
+=
sdsdec.o
...
...
libavformat/allformats.c
View file @
036e12b2
...
@@ -273,7 +273,7 @@ void av_register_all(void)
...
@@ -273,7 +273,7 @@ void av_register_all(void)
REGISTER_DEMUXER
(
SAMI
,
sami
);
REGISTER_DEMUXER
(
SAMI
,
sami
);
REGISTER_MUXDEMUX
(
SAP
,
sap
);
REGISTER_MUXDEMUX
(
SAP
,
sap
);
REGISTER_DEMUXER
(
SBG
,
sbg
);
REGISTER_DEMUXER
(
SBG
,
sbg
);
REGISTER_
DEMUXER
(
SCC
,
scc
);
REGISTER_
MUXDEMUX
(
SCC
,
scc
);
REGISTER_DEMUXER
(
SDP
,
sdp
);
REGISTER_DEMUXER
(
SDP
,
sdp
);
REGISTER_DEMUXER
(
SDR2
,
sdr2
);
REGISTER_DEMUXER
(
SDR2
,
sdr2
);
REGISTER_DEMUXER
(
SDS
,
sds
);
REGISTER_DEMUXER
(
SDS
,
sds
);
...
...
libavformat/sccenc.c
0 → 100644
View file @
036e12b2
/*
* SCC muxer
* Copyright (c) 2017 Paul B Mahol
*
* 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
*/
#include "avformat.h"
#include "internal.h"
#include "libavutil/log.h"
#include "libavutil/intreadwrite.h"
typedef
struct
SCCContext
{
int
prev_h
,
prev_m
,
prev_s
,
prev_f
;
int
inside
;
int
n
;
}
SCCContext
;
static
int
scc_write_header
(
AVFormatContext
*
avf
)
{
SCCContext
*
scc
=
avf
->
priv_data
;
if
(
avf
->
nb_streams
!=
1
||
avf
->
streams
[
0
]
->
codecpar
->
codec_type
!=
AVMEDIA_TYPE_SUBTITLE
)
{
av_log
(
avf
,
AV_LOG_ERROR
,
"SCC supports only a single subtitles stream.
\n
"
);
return
AVERROR
(
EINVAL
);
}
if
(
avf
->
streams
[
0
]
->
codecpar
->
codec_id
!=
AV_CODEC_ID_EIA_608
)
{
av_log
(
avf
,
AV_LOG_ERROR
,
"Unsupported subtitles codec: %s
\n
"
,
avcodec_get_name
(
avf
->
streams
[
0
]
->
codecpar
->
codec_id
));
return
AVERROR
(
EINVAL
);
}
avpriv_set_pts_info
(
avf
->
streams
[
0
],
64
,
1
,
1000
);
avio_printf
(
avf
->
pb
,
"Scenarist_SCC V1.0
\n
"
);
scc
->
prev_h
=
scc
->
prev_m
=
scc
->
prev_s
=
scc
->
prev_f
=
-
1
;
scc
->
inside
=
0
;
return
0
;
}
static
int
scc_write_packet
(
AVFormatContext
*
avf
,
AVPacket
*
pkt
)
{
SCCContext
*
scc
=
avf
->
priv_data
;
int64_t
pts
=
pkt
->
pts
;
int
i
,
h
,
m
,
s
,
f
;
if
(
pts
==
AV_NOPTS_VALUE
)
{
av_log
(
avf
,
AV_LOG_WARNING
,
"Insufficient timestamps.
\n
"
);
return
0
;
}
h
=
(
int
)(
pts
/
(
3600000
));
m
=
(
int
)(
pts
/
(
60000
))
%
60
;
s
=
(
int
)(
pts
/
1000
)
%
60
;
f
=
(
int
)(
pts
%
1000
)
/
33
;
for
(
i
=
0
;
i
<
pkt
->
size
;
i
+=
3
)
{
if
(
pkt
->
data
[
i
]
==
0xfc
&&
((
pkt
->
data
[
i
+
1
]
!=
0x80
||
pkt
->
data
[
i
+
2
]
!=
0x80
)))
break
;
}
if
(
i
>=
pkt
->
size
)
return
0
;
if
(
!
scc
->
inside
&&
(
scc
->
prev_h
!=
h
||
scc
->
prev_m
!=
m
||
scc
->
prev_s
!=
s
||
scc
->
prev_f
!=
f
))
{
avio_printf
(
avf
->
pb
,
"
\n
%02d:%02d:%02d:%02d
\t
"
,
h
,
m
,
s
,
f
);
scc
->
inside
=
1
;
}
for
(
i
=
0
;
i
<
pkt
->
size
;
i
+=
3
)
{
if
(
i
+
3
>
pkt
->
size
)
break
;
if
(
pkt
->
data
[
i
]
!=
0xfc
||
(
pkt
->
data
[
i
+
1
]
==
0x80
&&
pkt
->
data
[
i
+
2
]
==
0x80
))
continue
;
if
(
!
scc
->
inside
)
{
avio_printf
(
avf
->
pb
,
"
\n
%02d:%02d:%02d:%02d
\t
"
,
h
,
m
,
s
,
f
);
scc
->
inside
=
1
;
}
if
(
scc
->
n
>
0
)
avio_printf
(
avf
->
pb
,
" "
);
avio_printf
(
avf
->
pb
,
"%02x%02x"
,
pkt
->
data
[
i
+
1
],
pkt
->
data
[
i
+
2
]);
scc
->
n
++
;
}
if
(
scc
->
inside
&&
(
scc
->
prev_h
!=
h
||
scc
->
prev_m
!=
m
||
scc
->
prev_s
!=
s
||
scc
->
prev_f
!=
f
))
{
avio_printf
(
avf
->
pb
,
"
\n
"
);
scc
->
n
=
0
;
scc
->
inside
=
0
;
}
scc
->
prev_h
=
h
;
scc
->
prev_m
=
m
;
scc
->
prev_s
=
s
;
scc
->
prev_f
=
f
;
return
0
;
}
AVOutputFormat
ff_scc_muxer
=
{
.
name
=
"scc"
,
.
long_name
=
NULL_IF_CONFIG_SMALL
(
"Scenarist Closed Captions"
),
.
extensions
=
"scc"
,
.
priv_data_size
=
sizeof
(
SCCContext
),
.
write_header
=
scc_write_header
,
.
write_packet
=
scc_write_packet
,
.
flags
=
AVFMT_GLOBALHEADER
|
AVFMT_VARIABLE_FPS
|
AVFMT_TS_NONSTRICT
,
.
subtitle_codec
=
AV_CODEC_ID_EIA_608
,
};
libavformat/version.h
View file @
036e12b2
...
@@ -32,7 +32,7 @@
...
@@ -32,7 +32,7 @@
// Major bumping may affect Ticket5467, 5421, 5451(compatibility with Chromium)
// Major bumping may affect Ticket5467, 5421, 5451(compatibility with Chromium)
// Also please add any ticket numbers that you believe might be affected here
// Also please add any ticket numbers that you believe might be affected here
#define LIBAVFORMAT_VERSION_MAJOR 57
#define LIBAVFORMAT_VERSION_MAJOR 57
#define LIBAVFORMAT_VERSION_MINOR 6
5
#define LIBAVFORMAT_VERSION_MINOR 6
6
#define LIBAVFORMAT_VERSION_MICRO 100
#define LIBAVFORMAT_VERSION_MICRO 100
#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_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