Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
F
ffmpeg
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
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
ffmpeg
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>:
...
@@ -12,6 +12,7 @@ version <next>:
- cropdetect support for non 8bpp, absolute (if limit >= 1) and relative (if limit < 1.0) threshold
- cropdetect support for non 8bpp, absolute (if limit >= 1) and relative (if limit < 1.0) threshold
- Camellia symmetric block cipher
- Camellia symmetric block cipher
- OpenH264 encoder wrapper
- OpenH264 encoder wrapper
- VOC seeking support
version 2.5:
version 2.5:
...
...
libavformat/version.h
View file @
c8f83a4c
...
@@ -31,7 +31,7 @@
...
@@ -31,7 +31,7 @@
#define LIBAVFORMAT_VERSION_MAJOR 56
#define LIBAVFORMAT_VERSION_MAJOR 56
#define LIBAVFORMAT_VERSION_MINOR 18
#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, \
#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
LIBAVFORMAT_VERSION_MINOR, \
LIBAVFORMAT_VERSION_MINOR, \
...
...
libavformat/voc.h
View file @
c8f83a4c
...
@@ -27,6 +27,7 @@
...
@@ -27,6 +27,7 @@
typedef
struct
voc_dec_context
{
typedef
struct
voc_dec_context
{
int64_t
remaining_size
;
int64_t
remaining_size
;
int64_t
pts
;
}
VocDecContext
;
}
VocDecContext
;
typedef
enum
voc_type
{
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)
...
@@ -71,6 +71,15 @@ ff_voc_get_packet(AVFormatContext *s, AVPacket *pkt, AVStream *st, int max_size)
int
size
,
tmp_codec
=-
1
;
int
size
,
tmp_codec
=-
1
;
int
sample_rate
=
0
;
int
sample_rate
=
0
;
int
channels
=
1
;
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
)
{
while
(
!
voc
->
remaining_size
)
{
type
=
avio_r8
(
pb
);
type
=
avio_r8
(
pb
);
...
@@ -156,7 +165,17 @@ ff_voc_get_packet(AVFormatContext *s, AVPacket *pkt, AVStream *st, int max_size)
...
@@ -156,7 +165,17 @@ ff_voc_get_packet(AVFormatContext *s, AVPacket *pkt, AVStream *st, int max_size)
max_size
=
2048
;
max_size
=
2048
;
size
=
FFMIN
(
voc
->
remaining_size
,
max_size
);
size
=
FFMIN
(
voc
->
remaining_size
,
max_size
);
voc
->
remaining_size
-=
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
)
static
int
voc_read_packet
(
AVFormatContext
*
s
,
AVPacket
*
pkt
)
...
@@ -164,6 +183,28 @@ 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
);
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
=
{
AVInputFormat
ff_voc_demuxer
=
{
.
name
=
"voc"
,
.
name
=
"voc"
,
.
long_name
=
NULL_IF_CONFIG_SMALL
(
"Creative Voice"
),
.
long_name
=
NULL_IF_CONFIG_SMALL
(
"Creative Voice"
),
...
@@ -171,5 +212,6 @@ AVInputFormat ff_voc_demuxer = {
...
@@ -171,5 +212,6 @@ AVInputFormat ff_voc_demuxer = {
.
read_probe
=
voc_probe
,
.
read_probe
=
voc_probe
,
.
read_header
=
voc_read_header
,
.
read_header
=
voc_read_header
,
.
read_packet
=
voc_read_packet
,
.
read_packet
=
voc_read_packet
,
.
read_seek
=
voc_read_seek
,
.
codec_tag
=
(
const
AVCodecTag
*
const
[]){
ff_voc_codec_tags
,
0
},
.
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: 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: 0 st:-1 flags:0 ts:-1.000000
ret:-1 st:-1 flags:1 ts: 1.894167
ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 32 size: 1024
ret:-1 st: 0 flags:0 ts: 0.788330
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: 0 flags:1 ts:-0.317494
ret:-1 st:-1 flags:0 ts: 2.576668
ret:-1 st:-1 flags:0 ts: 2.576668
ret:-1 st:-1 flags:1 ts: 1.470835
ret: 0 st:-1 flags:1 ts: 1.470835
ret:-1 st: 0 flags:0 ts: 0.365012
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: 0 flags:1 ts:-0.740834
ret:-1 st:-1 flags:0 ts: 2.153336
ret:-1 st:-1 flags:0 ts: 2.153336
ret:-1 st:-1 flags:1 ts: 1.047503
ret: 0 st:-1 flags:1 ts: 1.047503
ret:-1 st: 0 flags:0 ts:-0.058328
ret:-EOF
ret:-1 st: 0 flags:1 ts: 2.835848
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:0 ts: 1.730004
ret:-1 st:-1 flags:1 ts: 0.624171
ret: 0 st:-1 flags:1 ts: 0.624171
ret:-1 st: 0 flags:0 ts:-0.481669
ret: 0 st: 0 flags:1 dts: 0.612356 pts: 0.612356 pos: 25732 size: 1024
ret:-1 st: 0 flags:1 ts: 2.412507
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:0 ts: 1.306672
ret:-1 st:-1 flags:1 ts: 0.200839
ret: 0 st:-1 flags:1 ts: 0.200839
ret:-1 st: 0 flags:0 ts:-0.904986
ret: 0 st: 0 flags:1 dts: 0.188417 pts: 0.188417 pos: 7228 size: 1024
ret:-1 st: 0 flags:1 ts: 1.989167
ret: 0 st: 0 flags:0 ts:-0.904986
ret:-1 st:-1 flags:0 ts: 0.883340
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:-1 flags:1 ts:-0.222493
ret:-1 st: 0 flags:0 ts: 2.671673
ret:-1 st: 0 flags:0 ts: 2.671673
ret:-1 st: 0 flags:1 ts: 1.565849
ret: 0 st: 0 flags:1 ts: 1.565849
ret:-1 st:-1 flags:0 ts: 0.460008
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
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