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
292a08cb
Commit
292a08cb
authored
Oct 20, 2012
by
Anton Khirnov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
asfdec: cosmetics, reformat ff_asf_parse_packet()
parent
5a956763
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
72 additions
and
66 deletions
+72
-66
asfdec.c
libavformat/asfdec.c
+72
-66
No files found.
libavformat/asfdec.c
View file @
292a08cb
...
...
@@ -1002,13 +1002,15 @@ static int ff_asf_parse_packet(AVFormatContext *s, AVIOContext *pb, AVPacket *pk
ASFStream
*
asf_st
=
0
;
for
(;;)
{
int
ret
;
if
(
pb
->
eof_reached
)
if
(
pb
->
eof_reached
)
return
AVERROR_EOF
;
if
(
asf
->
packet_size_left
<
FRAME_HEADER_SIZE
||
asf
->
packet_segments
<
1
)
{
//asf->packet_size_left <= asf->packet_padsize
) {
if
(
asf
->
packet_size_left
<
FRAME_HEADER_SIZE
||
asf
->
packet_segments
<
1
)
{
int
ret
=
asf
->
packet_size_left
+
asf
->
packet_padsize
;
assert
(
ret
>=
0
);
assert
(
ret
>=
0
);
/* fail safe */
avio_skip
(
pb
,
ret
);
...
...
@@ -1019,19 +1021,19 @@ static int ff_asf_parse_packet(AVFormatContext *s, AVIOContext *pb, AVPacket *pk
return
1
;
}
if
(
asf
->
packet_time_start
==
0
)
{
if
(
asf_read_frame_header
(
s
,
pb
)
<
0
)
{
asf
->
packet_segments
=
0
;
if
(
asf_read_frame_header
(
s
,
pb
)
<
0
)
{
asf
->
packet_segments
=
0
;
continue
;
}
if
(
asf
->
stream_index
<
0
||
s
->
streams
[
asf
->
stream_index
]
->
discard
>=
AVDISCARD_ALL
||
(
!
asf
->
packet_key_frame
&&
s
->
streams
[
asf
->
stream_index
]
->
discard
>=
AVDISCARD_NONKEY
)
)
{
if
(
asf
->
stream_index
<
0
||
s
->
streams
[
asf
->
stream_index
]
->
discard
>=
AVDISCARD_ALL
||
(
!
asf
->
packet_key_frame
&&
s
->
streams
[
asf
->
stream_index
]
->
discard
>=
AVDISCARD_NONKEY
)
)
{
asf
->
packet_time_start
=
0
;
/* unhandled packet (should not happen) */
avio_skip
(
pb
,
asf
->
packet_frag_size
);
asf
->
packet_size_left
-=
asf
->
packet_frag_size
;
if
(
asf
->
stream_index
<
0
)
if
(
asf
->
stream_index
<
0
)
av_log
(
s
,
AV_LOG_ERROR
,
"ff asf skip %d (unknown stream)
\n
"
,
asf
->
packet_frag_size
);
continue
;
}
...
...
@@ -1046,8 +1048,7 @@ static int ff_asf_parse_packet(AVFormatContext *s, AVIOContext *pb, AVPacket *pk
asf
->
packet_obj_size
=
asf
->
packet_frag_size
=
avio_r8
(
pb
);
asf
->
packet_size_left
--
;
asf
->
packet_multi_size
--
;
if
(
asf
->
packet_multi_size
<
asf
->
packet_obj_size
)
{
if
(
asf
->
packet_multi_size
<
asf
->
packet_obj_size
)
{
asf
->
packet_time_start
=
0
;
avio_skip
(
pb
,
asf
->
packet_multi_size
);
asf
->
packet_size_left
-=
asf
->
packet_multi_size
;
...
...
@@ -1055,19 +1056,20 @@ static int ff_asf_parse_packet(AVFormatContext *s, AVIOContext *pb, AVPacket *pk
}
asf
->
packet_multi_size
-=
asf
->
packet_obj_size
;
}
if
(
/*asf->packet_frag_size == asf->packet_obj_size*/
asf_st
->
frag_offset
+
asf
->
packet_frag_size
<=
asf_st
->
pkt
.
size
&&
asf_st
->
frag_offset
+
asf
->
packet_frag_size
>
asf
->
packet_obj_size
){
if
(
asf_st
->
frag_offset
+
asf
->
packet_frag_size
<=
asf_st
->
pkt
.
size
&&
asf_st
->
frag_offset
+
asf
->
packet_frag_size
>
asf
->
packet_obj_size
)
{
av_log
(
s
,
AV_LOG_INFO
,
"ignoring invalid packet_obj_size (%d %d %d %d)
\n
"
,
asf_st
->
frag_offset
,
asf
->
packet_frag_size
,
asf
->
packet_obj_size
,
asf_st
->
pkt
.
size
);
asf
->
packet_obj_size
=
asf_st
->
pkt
.
size
;
asf
->
packet_obj_size
=
asf_st
->
pkt
.
size
;
}
if
(
asf_st
->
pkt
.
size
!=
asf
->
packet_obj_size
||
asf_st
->
frag_offset
+
asf
->
packet_frag_size
>
asf_st
->
pkt
.
size
)
{
//FIXME is this condition sufficient?
if
(
asf_st
->
pkt
.
data
){
av_log
(
s
,
AV_LOG_INFO
,
"freeing incomplete packet size %d, new %d
\n
"
,
asf_st
->
pkt
.
size
,
asf
->
packet_obj_size
);
if
(
asf_st
->
pkt
.
size
!=
asf
->
packet_obj_size
||
//FIXME is this condition sufficient?
asf_st
->
frag_offset
+
asf
->
packet_frag_size
>
asf_st
->
pkt
.
size
)
{
if
(
asf_st
->
pkt
.
data
)
{
av_log
(
s
,
AV_LOG_INFO
,
"freeing incomplete packet size %d, "
"new %d
\n
"
,
asf_st
->
pkt
.
size
,
asf
->
packet_obj_size
);
asf_st
->
frag_offset
=
0
;
av_free_packet
(
&
asf_st
->
pkt
);
}
...
...
@@ -1076,8 +1078,8 @@ static int ff_asf_parse_packet(AVFormatContext *s, AVIOContext *pb, AVPacket *pk
asf_st
->
seq
=
asf
->
packet_seq
;
asf_st
->
pkt
.
dts
=
asf
->
packet_frag_timestamp
-
asf
->
hdr
.
preroll
;
asf_st
->
pkt
.
stream_index
=
asf
->
stream_index
;
asf_st
->
pkt
.
pos
=
asf_st
->
packet_pos
=
asf
->
packet_pos
;
asf_st
->
pkt
.
pos
=
asf_st
->
packet_pos
=
asf
->
packet_pos
;
if
(
asf_st
->
pkt
.
data
&&
asf_st
->
palette_changed
)
{
uint8_t
*
pal
;
pal
=
av_packet_new_side_data
(
&
asf_st
->
pkt
,
AV_PKT_DATA_PALETTE
,
...
...
@@ -1108,8 +1110,8 @@ static int ff_asf_parse_packet(AVFormatContext *s, AVIOContext *pb, AVPacket *pk
if
(
asf
->
packet_size_left
<
0
)
continue
;
if
(
asf
->
packet_frag_offset
>=
asf_st
->
pkt
.
size
||
asf
->
packet_frag_size
>
asf_st
->
pkt
.
size
-
asf
->
packet_frag_offset
)
{
if
(
asf
->
packet_frag_offset
>=
asf_st
->
pkt
.
size
||
asf
->
packet_frag_size
>
asf_st
->
pkt
.
size
-
asf
->
packet_frag_offset
)
{
av_log
(
s
,
AV_LOG_ERROR
,
"packet fragment position invalid %u,%u not in %u
\n
"
,
asf
->
packet_frag_offset
,
asf
->
packet_frag_size
,
asf_st
->
pkt
.
size
);
continue
;
...
...
@@ -1120,6 +1122,7 @@ static int ff_asf_parse_packet(AVFormatContext *s, AVIOContext *pb, AVPacket *pk
if
(
ret
!=
asf
->
packet_frag_size
)
{
if
(
ret
<
0
||
asf
->
packet_frag_offset
+
ret
==
0
)
return
ret
<
0
?
ret
:
AVERROR_EOF
;
if
(
asf_st
->
ds_span
>
1
)
{
// scrambling, we can either drop it completely or fill the remainder
// TODO: should we fill the whole packet instead of just the current
...
...
@@ -1127,10 +1130,11 @@ static int ff_asf_parse_packet(AVFormatContext *s, AVIOContext *pb, AVPacket *pk
memset
(
asf_st
->
pkt
.
data
+
asf
->
packet_frag_offset
+
ret
,
0
,
asf
->
packet_frag_size
-
ret
);
ret
=
asf
->
packet_frag_size
;
}
else
}
else
{
// no scrambling, so we can return partial packets
av_shrink_packet
(
&
asf_st
->
pkt
,
asf
->
packet_frag_offset
+
ret
);
}
}
if
(
s
->
key
&&
s
->
keylen
==
20
)
ff_asfcrypt_dec
(
s
->
key
,
asf_st
->
pkt
.
data
+
asf
->
packet_frag_offset
,
ret
);
...
...
@@ -1138,11 +1142,11 @@ static int ff_asf_parse_packet(AVFormatContext *s, AVIOContext *pb, AVPacket *pk
/* test if whole packet is read */
if
(
asf_st
->
frag_offset
==
asf_st
->
pkt
.
size
)
{
//workaround for macroshit radio DVR-MS files
if
(
s
->
streams
[
asf
->
stream_index
]
->
codec
->
codec_id
==
AV_CODEC_ID_MPEG2VIDEO
&&
asf_st
->
pkt
.
size
>
100
)
{
if
(
s
->
streams
[
asf
->
stream_index
]
->
codec
->
codec_id
==
AV_CODEC_ID_MPEG2VIDEO
&&
asf_st
->
pkt
.
size
>
100
)
{
int
i
;
for
(
i
=
0
;
i
<
asf_st
->
pkt
.
size
&&
!
asf_st
->
pkt
.
data
[
i
];
i
++
);
if
(
i
==
asf_st
->
pkt
.
size
)
{
for
(
i
=
0
;
i
<
asf_st
->
pkt
.
size
&&
!
asf_st
->
pkt
.
data
[
i
];
i
++
);
if
(
i
==
asf_st
->
pkt
.
size
)
{
av_log
(
s
,
AV_LOG_DEBUG
,
"discarding ms fart
\n
"
);
asf_st
->
frag_offset
=
0
;
av_free_packet
(
&
asf_st
->
pkt
);
...
...
@@ -1152,9 +1156,11 @@ static int ff_asf_parse_packet(AVFormatContext *s, AVIOContext *pb, AVPacket *pk
/* return packet */
if
(
asf_st
->
ds_span
>
1
)
{
if
(
asf_st
->
pkt
.
size
!=
asf_st
->
ds_packet_size
*
asf_st
->
ds_span
){
av_log
(
s
,
AV_LOG_ERROR
,
"pkt.size != ds_packet_size * ds_span (%d %d %d)
\n
"
,
asf_st
->
pkt
.
size
,
asf_st
->
ds_packet_size
,
asf_st
->
ds_span
);
}
else
{
if
(
asf_st
->
pkt
.
size
!=
asf_st
->
ds_packet_size
*
asf_st
->
ds_span
)
{
av_log
(
s
,
AV_LOG_ERROR
,
"pkt.size != ds_packet_size * "
"ds_span (%d %d %d)
\n
"
,
asf_st
->
pkt
.
size
,
asf_st
->
ds_packet_size
,
asf_st
->
ds_span
);
}
else
{
/* packet descrambling */
uint8_t
*
newdata
=
av_malloc
(
asf_st
->
pkt
.
size
+
FF_INPUT_BUFFER_PADDING_SIZE
);
if
(
newdata
)
{
...
...
@@ -1178,7 +1184,7 @@ static int ff_asf_parse_packet(AVFormatContext *s, AVIOContext *pb, AVPacket *pk
}
}
asf_st
->
frag_offset
=
0
;
*
pkt
=
asf_st
->
pkt
;
*
pkt
=
asf_st
->
pkt
;
asf_st
->
pkt
.
size
=
0
;
asf_st
->
pkt
.
data
=
0
;
asf_st
->
pkt
.
side_data_elems
=
0
;
...
...
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