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
cf543c65
Commit
cf543c65
authored
Oct 27, 2011
by
Janne Grunau
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
iv8: assemble packets to return complete frames
parent
c4b97fbd
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
47 additions
and
24 deletions
+47
-24
iv8.c
libavformat/iv8.c
+47
-24
No files found.
libavformat/iv8.c
View file @
cf543c65
...
...
@@ -55,33 +55,56 @@ static int read_header(AVFormatContext *s, AVFormatParameters *ap)
static
int
read_packet
(
AVFormatContext
*
s
,
AVPacket
*
pkt
)
{
int
ret
,
size
,
pts
,
type
;
retry:
type
=
avio_rb16
(
s
->
pb
);
// 257 or 258
size
=
avio_rb16
(
s
->
pb
);
avio_rb16
(
s
->
pb
);
//some flags, 0x80 indicates end of frame
avio_rb16
(
s
->
pb
);
//packet number
pts
=
avio_rb32
(
s
->
pb
);
avio_rb32
(
s
->
pb
);
//6A 13 E3 88
size
-=
12
;
if
(
size
<
1
)
return
-
1
;
if
(
type
==
258
){
avio_skip
(
s
->
pb
,
size
);
goto
retry
;
int
ret
,
size
,
pts
,
type
,
flags
;
int
first_pkt
=
0
;
int
frame_complete
=
0
;
while
(
!
frame_complete
)
{
type
=
avio_rb16
(
s
->
pb
);
// 257 or 258
size
=
avio_rb16
(
s
->
pb
);
flags
=
avio_rb16
(
s
->
pb
);
//some flags, 0x80 indicates end of frame
avio_rb16
(
s
->
pb
);
//packet number
pts
=
avio_rb32
(
s
->
pb
);
avio_rb32
(
s
->
pb
);
//6A 13 E3 88
frame_complete
=
flags
&
0x80
;
size
-=
12
;
if
(
size
<
1
)
return
-
1
;
if
(
type
==
258
)
{
avio_skip
(
s
->
pb
,
size
);
frame_complete
=
0
;
continue
;
}
if
(
!
first_pkt
)
{
ret
=
av_get_packet
(
s
->
pb
,
pkt
,
size
);
if
(
ret
<
0
)
return
ret
;
first_pkt
=
1
;
pkt
->
pts
=
pts
;
pkt
->
pos
-=
16
;
}
else
{
ret
=
av_append_packet
(
s
->
pb
,
pkt
,
size
);
if
(
ret
<
0
)
{
av_log
(
s
,
AV_LOG_ERROR
,
"failed to grow packet
\n
"
);
av_free_packet
(
pkt
);
return
ret
;
}
}
if
(
ret
<
size
)
{
av_log
(
s
,
AV_LOG_ERROR
,
"Truncated packet! Read %d of %d bytes
\n
"
,
ret
,
size
);
pkt
->
flags
|=
AV_PKT_FLAG_CORRUPT
;
break
;
}
}
ret
=
av_get_packet
(
s
->
pb
,
pkt
,
size
);
pkt
->
pts
=
pts
;
pkt
->
pos
-=
16
;
pkt
->
stream_index
=
0
;
return
ret
;
return
0
;
}
AVInputFormat
ff_iv8_demuxer
=
{
...
...
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