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
e5e86db1
Commit
e5e86db1
authored
May 10, 2013
by
James Almer
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
RedSpark demuxer
Signed-off-by:
James Almer
<
jamrial@gmail.com
>
parent
d3710c51
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
166 additions
and
1 deletion
+166
-1
Changelog
Changelog
+1
-0
general.texi
doc/general.texi
+1
-0
Makefile
libavformat/Makefile
+1
-0
allformats.c
libavformat/allformats.c
+1
-0
redspark.c
libavformat/redspark.c
+157
-0
version.h
libavformat/version.h
+1
-1
demux.mak
tests/fate/demux.mak
+3
-0
redspark-demux
tests/ref/fate/redspark-demux
+1
-0
No files found.
Changelog
View file @
e5e86db1
...
...
@@ -43,6 +43,7 @@ version <next>:
- ADPCM DTK decoder
- ADP demuxer
- RSD demuxer
- RedSpark demuxer
version 1.2:
...
...
doc/general.texi
View file @
e5e86db1
...
...
@@ -350,6 +350,7 @@ library:
@tab File format used by RED Digital cameras, contains JPEG 2000 frames and PCM audio.
@item RealMedia @tab X @tab X
@item Redirector @tab @tab X
@item RedSpark @tab @tab X
@item Renderware TeXture Dictionary @tab @tab X
@item RL2 @tab @tab X
@tab Audio and video format used in some games by Entertainment Software Partners.
...
...
libavformat/Makefile
View file @
e5e86db1
...
...
@@ -308,6 +308,7 @@ OBJS-$(CONFIG_R3D_DEMUXER) += r3d.o
OBJS-$(CONFIG_RAWVIDEO_DEMUXER)
+=
rawvideodec.o
OBJS-$(CONFIG_RAWVIDEO_MUXER)
+=
rawenc.o
OBJS-$(CONFIG_REALTEXT_DEMUXER)
+=
realtextdec.o
subtitles.o
OBJS-$(CONFIG_REDSPARK_DEMUXER)
+=
redspark.o
OBJS-$(CONFIG_RL2_DEMUXER)
+=
rl2.o
OBJS-$(CONFIG_RM_DEMUXER)
+=
rmdec.o
rm.o
rmsipr.o
OBJS-$(CONFIG_RM_MUXER)
+=
rmenc.o
rm.o
...
...
libavformat/allformats.c
View file @
e5e86db1
...
...
@@ -233,6 +233,7 @@ void av_register_all(void)
REGISTER_DEMUXER
(
R3D
,
r3d
);
REGISTER_MUXDEMUX
(
RAWVIDEO
,
rawvideo
);
REGISTER_DEMUXER
(
REALTEXT
,
realtext
);
REGISTER_DEMUXER
(
REDSPARK
,
redspark
);
REGISTER_DEMUXER
(
RL2
,
rl2
);
REGISTER_MUXDEMUX
(
RM
,
rm
);
REGISTER_MUXDEMUX
(
ROQ
,
roq
);
...
...
libavformat/redspark.c
0 → 100644
View file @
e5e86db1
/*
* RedSpark demuxer
* Copyright (c) 2013 James Almer
*
* 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 "libavcodec/bytestream.h"
#include "libavutil/intreadwrite.h"
#include "avformat.h"
#include "avio.h"
#include "internal.h"
#define HEADER_SIZE 4096
typedef
struct
RedSparkContext
{
int
samples_count
;
}
RedSparkContext
;
static
int
redspark_probe
(
AVProbeData
*
p
)
{
uint32_t
key
,
data
;
uint8_t
header
[
8
];
/* Decrypt first 8 bytes of the header */
data
=
AV_RB32
(
p
->
buf
);
data
=
data
^
(
key
=
data
^
0x52656453
);
AV_WB32
(
header
,
data
);
key
=
(
key
<<
11
)
|
(
key
>>
21
);
data
=
AV_RB32
(
p
->
buf
+
4
)
^
(((
key
<<
3
)
|
(
key
>>
29
))
+
key
);
AV_WB32
(
header
+
4
,
data
);
if
(
AV_RB64
(
header
)
==
AV_RB64
(
"RedSpark"
))
return
AVPROBE_SCORE_MAX
;
return
0
;
}
static
int
redspark_read_header
(
AVFormatContext
*
s
)
{
AVIOContext
*
pb
=
s
->
pb
;
RedSparkContext
*
redspark
=
s
->
priv_data
;
AVCodecContext
*
codec
;
GetByteContext
gbc
;
int
i
,
coef_off
;
uint32_t
key
,
data
;
uint8_t
*
header
,
*
pbc
;
AVStream
*
st
;
st
=
avformat_new_stream
(
s
,
NULL
);
if
(
!
st
)
return
AVERROR
(
ENOMEM
);
codec
=
st
->
codec
;
header
=
av_malloc
(
HEADER_SIZE
);
if
(
!
header
)
return
AVERROR
(
ENOMEM
);
pbc
=
header
;
/* Decrypt header */
data
=
avio_rb32
(
pb
);
data
=
data
^
(
key
=
data
^
0x52656453
);
bytestream_put_be32
(
&
pbc
,
data
);
key
=
(
key
<<
11
)
|
(
key
>>
21
);
for
(
i
=
4
;
i
<
HEADER_SIZE
;
i
+=
4
)
{
data
=
avio_rb32
(
pb
)
^
(
key
=
((
key
<<
3
)
|
(
key
>>
29
))
+
key
);
bytestream_put_be32
(
&
pbc
,
data
);
}
codec
->
codec_id
=
AV_CODEC_ID_ADPCM_THP
;
codec
->
codec_type
=
AVMEDIA_TYPE_AUDIO
;
bytestream2_init
(
&
gbc
,
header
,
HEADER_SIZE
);
bytestream2_seek
(
&
gbc
,
0x3c
,
SEEK_SET
);
codec
->
sample_rate
=
bytestream2_get_be32u
(
&
gbc
);
if
(
codec
->
sample_rate
<=
0
||
codec
->
sample_rate
>
96000
)
{
av_log
(
s
,
AV_LOG_ERROR
,
"Invalid sample rate: %d
\n
"
,
codec
->
sample_rate
);
return
AVERROR_INVALIDDATA
;
}
st
->
duration
=
bytestream2_get_be32u
(
&
gbc
)
*
14
;
redspark
->
samples_count
=
0
;
bytestream2_skipu
(
&
gbc
,
10
);
codec
->
channels
=
bytestream2_get_byteu
(
&
gbc
);
if
(
!
codec
->
channels
)
return
AVERROR_INVALIDDATA
;
coef_off
=
0x54
+
codec
->
channels
*
8
;
if
(
bytestream2_get_byteu
(
&
gbc
))
// Loop flag
coef_off
+=
16
;
codec
->
extradata_size
=
32
*
codec
->
channels
;
codec
->
extradata
=
av_malloc
(
codec
->
extradata_size
);
if
(
!
codec
->
extradata
)
return
AVERROR
(
ENOMEM
);
/* Get the ADPCM table */
bytestream2_seek
(
&
gbc
,
coef_off
,
SEEK_SET
);
for
(
i
=
0
;
i
<
codec
->
channels
;
i
++
)
{
if
(
bytestream2_get_bufferu
(
&
gbc
,
codec
->
extradata
+
i
*
32
,
32
)
!=
32
)
return
AVERROR_INVALIDDATA
;
bytestream2_skipu
(
&
gbc
,
14
);
}
avpriv_set_pts_info
(
st
,
64
,
1
,
codec
->
sample_rate
);
return
0
;
}
static
int
redspark_read_packet
(
AVFormatContext
*
s
,
AVPacket
*
pkt
)
{
AVCodecContext
*
codec
=
s
->
streams
[
0
]
->
codec
;
RedSparkContext
*
redspark
=
s
->
priv_data
;
uint32_t
size
=
8
*
codec
->
channels
;
int
ret
;
if
(
url_feof
(
s
->
pb
)
||
redspark
->
samples_count
==
s
->
streams
[
0
]
->
duration
)
return
AVERROR_EOF
;
ret
=
av_get_packet
(
s
->
pb
,
pkt
,
size
);
if
(
ret
!=
size
)
{
av_free_packet
(
pkt
);
return
AVERROR
(
EIO
);
}
pkt
->
duration
=
14
;
redspark
->
samples_count
+=
pkt
->
duration
;
pkt
->
stream_index
=
0
;
return
ret
;
}
AVInputFormat
ff_redspark_demuxer
=
{
.
name
=
"redspark"
,
.
long_name
=
NULL_IF_CONFIG_SMALL
(
"RedSpark"
),
.
priv_data_size
=
sizeof
(
RedSparkContext
),
.
read_probe
=
redspark_probe
,
.
read_header
=
redspark_read_header
,
.
read_packet
=
redspark_read_packet
,
.
extensions
=
"rsd"
,
};
libavformat/version.h
View file @
e5e86db1
...
...
@@ -30,7 +30,7 @@
#include "libavutil/avutil.h"
#define LIBAVFORMAT_VERSION_MAJOR 55
#define LIBAVFORMAT_VERSION_MINOR
6
#define LIBAVFORMAT_VERSION_MINOR
7
#define LIBAVFORMAT_VERSION_MICRO 100
#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
...
...
tests/fate/demux.mak
View file @
e5e86db1
...
...
@@ -70,6 +70,9 @@ fate-pmp-demux: CMD = framecrc -i $(SAMPLES)/pmp/demo.pmp -vn -c:a copy
FATE_SAMPLES_DEMUX-$(CONFIG_RSD_DEMUXER) += fate-rsd-demux
fate-rsd-demux: CMD = crc -i $(SAMPLES)/rsd/hum01_partial.rsd -c:a copy
FATE_SAMPLES_DEMUX-$(CONFIG_REDSPARK_DEMUXER) += fate-redspark-demux
fate-redspark-demux: CMD = crc -i $(SAMPLES)/redspark/jingle04_partial.rsd -c:a copy
FATE_SAMPLES_DEMUX-$(CONFIG_STR_DEMUXER) += fate-psx-str-demux
fate-psx-str-demux: CMD = framecrc -i $(SAMPLES)/psx-str/descent-partial.str -c copy
...
...
tests/ref/fate/redspark-demux
0 → 100644
View file @
e5e86db1
CRC=0xc0fd1aa2
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