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
c8f83a4c
Commit
c8f83a4c
authored
Jan 10, 2015
by
Michael Niedermayer
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
avformat/voc: add seeking support
Fixes Ticket1333 Signed-off-by:
Michael Niedermayer
<
michaelni@gmx.at
>
parent
87deebe1
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
80 additions
and
19 deletions
+80
-19
Changelog
Changelog
+1
-0
version.h
libavformat/version.h
+1
-1
voc.h
libavformat/voc.h
+1
-0
vocdec.c
libavformat/vocdec.c
+43
-1
lavf-voc
tests/ref/seek/lavf-voc
+34
-17
No files found.
Changelog
View file @
c8f83a4c
...
...
@@ -12,6 +12,7 @@ version <next>:
- cropdetect support for non 8bpp, absolute (if limit >= 1) and relative (if limit < 1.0) threshold
- Camellia symmetric block cipher
- OpenH264 encoder wrapper
- VOC seeking support
version 2.5:
...
...
libavformat/version.h
View file @
c8f83a4c
...
...
@@ -31,7 +31,7 @@
#define LIBAVFORMAT_VERSION_MAJOR 56
#define LIBAVFORMAT_VERSION_MINOR 18
#define LIBAVFORMAT_VERSION_MICRO 10
0
#define LIBAVFORMAT_VERSION_MICRO 10
1
#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
LIBAVFORMAT_VERSION_MINOR, \
...
...
libavformat/voc.h
View file @
c8f83a4c
...
...
@@ -27,6 +27,7 @@
typedef
struct
voc_dec_context
{
int64_t
remaining_size
;
int64_t
pts
;
}
VocDecContext
;
typedef
enum
voc_type
{
...
...
libavformat/vocdec.c
View file @
c8f83a4c
...
...
@@ -71,6 +71,15 @@ ff_voc_get_packet(AVFormatContext *s, AVPacket *pkt, AVStream *st, int max_size)
int
size
,
tmp_codec
=-
1
;
int
sample_rate
=
0
;
int
channels
=
1
;
int64_t
duration
;
int
ret
;
av_add_index_entry
(
st
,
avio_tell
(
pb
),
voc
->
pts
,
voc
->
remaining_size
,
0
,
AVINDEX_KEYFRAME
);
while
(
!
voc
->
remaining_size
)
{
type
=
avio_r8
(
pb
);
...
...
@@ -156,7 +165,17 @@ ff_voc_get_packet(AVFormatContext *s, AVPacket *pkt, AVStream *st, int max_size)
max_size
=
2048
;
size
=
FFMIN
(
voc
->
remaining_size
,
max_size
);
voc
->
remaining_size
-=
size
;
return
av_get_packet
(
pb
,
pkt
,
size
);
ret
=
av_get_packet
(
pb
,
pkt
,
size
);
pkt
->
dts
=
pkt
->
pts
=
voc
->
pts
;
duration
=
av_get_audio_frame_duration
(
st
->
codec
,
size
);
if
(
duration
>
0
&&
voc
->
pts
!=
AV_NOPTS_VALUE
)
voc
->
pts
+=
duration
;
else
voc
->
pts
=
AV_NOPTS_VALUE
;
return
ret
;
}
static
int
voc_read_packet
(
AVFormatContext
*
s
,
AVPacket
*
pkt
)
...
...
@@ -164,6 +183,28 @@ static int voc_read_packet(AVFormatContext *s, AVPacket *pkt)
return
ff_voc_get_packet
(
s
,
pkt
,
s
->
streams
[
0
],
0
);
}
static
int
voc_read_seek
(
AVFormatContext
*
s
,
int
stream_index
,
int64_t
timestamp
,
int
flags
)
{
VocDecContext
*
voc
=
s
->
priv_data
;
AVStream
*
st
=
s
->
streams
[
stream_index
];
int
index
=
av_index_search_timestamp
(
st
,
timestamp
,
flags
);
if
(
index
>=
0
&&
index
<
st
->
nb_index_entries
-
1
)
{
AVIndexEntry
*
e
=
&
st
->
index_entries
[
index
];
avio_seek
(
s
->
pb
,
e
->
pos
,
SEEK_SET
);
voc
->
pts
=
e
->
timestamp
;
voc
->
remaining_size
=
e
->
size
;
return
0
;
}
else
if
(
st
->
nb_index_entries
&&
st
->
index_entries
[
0
].
timestamp
<=
timestamp
)
{
AVIndexEntry
*
e
=
&
st
->
index_entries
[
st
->
nb_index_entries
-
1
];
// prepare context for seek_frame_generic()
voc
->
pts
=
e
->
timestamp
;
voc
->
remaining_size
=
e
->
size
;
}
return
-
1
;
}
AVInputFormat
ff_voc_demuxer
=
{
.
name
=
"voc"
,
.
long_name
=
NULL_IF_CONFIG_SMALL
(
"Creative Voice"
),
...
...
@@ -171,5 +212,6 @@ AVInputFormat ff_voc_demuxer = {
.
read_probe
=
voc_probe
,
.
read_header
=
voc_read_header
,
.
read_packet
=
voc_read_packet
,
.
read_seek
=
voc_read_seek
,
.
codec_tag
=
(
const
AVCodecTag
*
const
[]){
ff_voc_codec_tags
,
0
},
};
tests/ref/seek/lavf-voc
View file @
c8f83a4c
ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 32 size: 1024
ret:-1 st:-1 flags:0 ts:-1.000000
ret:-1 st:-1 flags:1 ts: 1.894167
ret:-1 st: 0 flags:0 ts: 0.788330
ret: 0 st:-1 flags:0 ts:-1.000000
ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 32 size: 1024
ret: 0 st:-1 flags:1 ts: 1.894167
ret:-EOF
ret: 0 st: 0 flags:0 ts: 0.788330
ret: 0 st: 0 flags:1 dts: 0.800773 pts: 0.800773 pos: 33956 size: 1024
ret:-1 st: 0 flags:1 ts:-0.317494
ret:-1 st:-1 flags:0 ts: 2.576668
ret:-1 st:-1 flags:1 ts: 1.470835
ret:-1 st: 0 flags:0 ts: 0.365012
ret: 0 st:-1 flags:1 ts: 1.470835
ret:-EOF
ret: 0 st: 0 flags:0 ts: 0.365012
ret: 0 st: 0 flags:1 dts: 0.376834 pts: 0.376834 pos: 15452 size: 1024
ret:-1 st: 0 flags:1 ts:-0.740834
ret:-1 st:-1 flags:0 ts: 2.153336
ret:-1 st:-1 flags:1 ts: 1.047503
ret:-1 st: 0 flags:0 ts:-0.058328
ret:-1 st: 0 flags:1 ts: 2.835848
ret: 0 st:-1 flags:1 ts: 1.047503
ret:-EOF
ret: 0 st: 0 flags:0 ts:-0.058328
ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 32 size: 1024
ret: 0 st: 0 flags:1 ts: 2.835848
ret:-EOF
ret:-1 st:-1 flags:0 ts: 1.730004
ret:-1 st:-1 flags:1 ts: 0.624171
ret:-1 st: 0 flags:0 ts:-0.481669
ret:-1 st: 0 flags:1 ts: 2.412507
ret: 0 st:-1 flags:1 ts: 0.624171
ret: 0 st: 0 flags:1 dts: 0.612356 pts: 0.612356 pos: 25732 size: 1024
ret: 0 st: 0 flags:0 ts:-0.481669
ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 32 size: 1024
ret: 0 st: 0 flags:1 ts: 2.412507
ret:-EOF
ret:-1 st:-1 flags:0 ts: 1.306672
ret:-1 st:-1 flags:1 ts: 0.200839
ret:-1 st: 0 flags:0 ts:-0.904986
ret:-1 st: 0 flags:1 ts: 1.989167
ret:-1 st:-1 flags:0 ts: 0.883340
ret: 0 st:-1 flags:1 ts: 0.200839
ret: 0 st: 0 flags:1 dts: 0.188417 pts: 0.188417 pos: 7228 size: 1024
ret: 0 st: 0 flags:0 ts:-0.904986
ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 32 size: 1024
ret: 0 st: 0 flags:1 ts: 1.989167
ret:-EOF
ret: 0 st:-1 flags:0 ts: 0.883340
ret: 0 st: 0 flags:1 dts: 0.894981 pts: 0.894981 pos: 38068 size: 1024
ret:-1 st:-1 flags:1 ts:-0.222493
ret:-1 st: 0 flags:0 ts: 2.671673
ret:-1 st: 0 flags:1 ts: 1.565849
ret:-1 st:-1 flags:0 ts: 0.460008
ret: 0 st: 0 flags:1 ts: 1.565849
ret:-EOF
ret: 0 st:-1 flags:0 ts: 0.460008
ret: 0 st: 0 flags:1 dts: 0.471043 pts: 0.471043 pos: 19564 size: 1024
ret:-1 st:-1 flags:1 ts:-0.645825
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