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
80344261
Commit
80344261
authored
Nov 17, 2012
by
Anton Khirnov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fraps: cosmetics, reformat
parent
57d11e5e
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
52 additions
and
48 deletions
+52
-48
fraps.c
libavcodec/fraps.c
+52
-48
No files found.
libavcodec/fraps.c
View file @
80344261
...
...
@@ -42,7 +42,7 @@
/**
* local variable storage
*/
typedef
struct
FrapsContext
{
typedef
struct
FrapsContext
{
AVCodecContext
*
avctx
;
AVFrame
frame
;
uint8_t
*
tmpbuf
;
...
...
@@ -61,9 +61,9 @@ static av_cold int decode_init(AVCodecContext *avctx)
FrapsContext
*
const
s
=
avctx
->
priv_data
;
avctx
->
coded_frame
=
&
s
->
frame
;
avctx
->
pix_fmt
=
AV_PIX_FMT_NONE
;
/* set in decode_frame */
avctx
->
pix_fmt
=
AV_PIX_FMT_NONE
;
/* set in decode_frame */
s
->
avctx
=
avctx
;
s
->
avctx
=
avctx
;
s
->
tmpbuf
=
NULL
;
ff_dsputil_init
(
&
s
->
dsp
,
avctx
);
...
...
@@ -75,7 +75,8 @@ static av_cold int decode_init(AVCodecContext *avctx)
* Comparator - our nodes should ascend by count
* but with preserved symbol order
*/
static
int
huff_cmp
(
const
void
*
va
,
const
void
*
vb
){
static
int
huff_cmp
(
const
void
*
va
,
const
void
*
vb
)
{
const
Node
*
a
=
va
,
*
b
=
vb
;
return
(
a
->
count
-
b
->
count
)
*
256
+
a
->
sym
-
b
->
sym
;
}
...
...
@@ -92,7 +93,7 @@ static int fraps2_decode_plane(FrapsContext *s, uint8_t *dst, int stride, int w,
VLC
vlc
;
Node
nodes
[
512
];
for
(
i
=
0
;
i
<
256
;
i
++
)
for
(
i
=
0
;
i
<
256
;
i
++
)
nodes
[
i
].
count
=
bytestream_get_le32
(
&
src
);
size
-=
1024
;
if
((
ret
=
ff_huff_build_tree
(
s
->
avctx
,
&
vlc
,
256
,
nodes
,
huff_cmp
,
...
...
@@ -104,14 +105,16 @@ static int fraps2_decode_plane(FrapsContext *s, uint8_t *dst, int stride, int w,
s
->
dsp
.
bswap_buf
((
uint32_t
*
)
s
->
tmpbuf
,
(
const
uint32_t
*
)
src
,
size
>>
2
);
init_get_bits
(
&
gb
,
s
->
tmpbuf
,
size
*
8
);
for
(
j
=
0
;
j
<
h
;
j
++
)
{
for
(
i
=
0
;
i
<
w
*
step
;
i
+=
step
)
{
for
(
j
=
0
;
j
<
h
;
j
++
)
{
for
(
i
=
0
;
i
<
w
*
step
;
i
+=
step
)
{
dst
[
i
]
=
get_vlc2
(
&
gb
,
vlc
.
table
,
9
,
3
);
/* lines are stored as deltas between previous lines
* and we need to add 0x80 to the first lines of chroma planes
*/
if
(
j
)
dst
[
i
]
+=
dst
[
i
-
stride
];
else
if
(
Uoff
)
dst
[
i
]
+=
0x80
;
if
(
j
)
dst
[
i
]
+=
dst
[
i
-
stride
];
else
if
(
Uoff
)
dst
[
i
]
+=
0x80
;
if
(
get_bits_left
(
&
gb
)
<
0
)
{
ff_free_vlc
(
&
vlc
);
return
AVERROR_INVALIDDATA
;
...
...
@@ -127,11 +130,11 @@ static int decode_frame(AVCodecContext *avctx,
void
*
data
,
int
*
got_frame
,
AVPacket
*
avpkt
)
{
const
uint8_t
*
buf
=
avpkt
->
data
;
int
buf_size
=
avpkt
->
size
;
FrapsContext
*
const
s
=
avctx
->
priv_data
;
AVFrame
*
frame
=
data
;
AVFrame
*
const
f
=
&
s
->
frame
;
const
uint8_t
*
buf
=
avpkt
->
data
;
int
buf_size
=
avpkt
->
size
;
AVFrame
*
frame
=
data
;
AVFrame
*
const
f
=
&
s
->
frame
;
uint32_t
header
;
unsigned
int
version
,
header_size
;
unsigned
int
x
,
y
;
...
...
@@ -141,8 +144,8 @@ static int decode_frame(AVCodecContext *avctx,
int
i
,
j
,
ret
,
is_chroma
,
planes
;
enum
AVPixelFormat
pix_fmt
;
header
=
AV_RL32
(
buf
);
version
=
header
&
0xff
;
header
=
AV_RL32
(
buf
);
version
=
header
&
0xff
;
header_size
=
(
header
&
(
1
<<
30
))
?
8
:
4
;
/* bit 30 means pad to 8 bytes */
if
(
version
>
5
)
{
...
...
@@ -152,9 +155,9 @@ static int decode_frame(AVCodecContext *avctx,
return
AVERROR_PATCHWELCOME
;
}
buf
+=
4
;
buf
+=
4
;
if
(
header_size
==
8
)
buf
+=
4
;
buf
+=
4
;
pix_fmt
=
version
&
1
?
AV_PIX_FMT_BGR24
:
AV_PIX_FMT_YUVJ420P
;
if
(
avctx
->
pix_fmt
!=
pix_fmt
&&
f
->
data
[
0
])
{
...
...
@@ -162,19 +165,20 @@ static int decode_frame(AVCodecContext *avctx,
}
avctx
->
pix_fmt
=
pix_fmt
;
switch
(
version
)
{
switch
(
version
)
{
case
0
:
default:
/* Fraps v0 is a reordered YUV420 */
if
(
(
buf_size
!=
avctx
->
width
*
avctx
->
height
*
3
/
2
+
header_size
)
&&
(
buf_size
!=
header_size
)
)
{
if
(
(
buf_size
!=
avctx
->
width
*
avctx
->
height
*
3
/
2
+
header_size
)
&&
(
buf_size
!=
header_size
)
)
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"Invalid frame length %d (should be %d)
\n
"
,
buf_size
,
avctx
->
width
*
avctx
->
height
*
3
/
2
+
header_size
);
buf_size
,
avctx
->
width
*
avctx
->
height
*
3
/
2
+
header_size
);
return
AVERROR_INVALIDDATA
;
}
if
((
(
avctx
->
width
%
8
)
!=
0
)
||
(
(
avctx
->
height
%
2
)
!=
0
))
{
if
((
(
avctx
->
width
%
8
)
!=
0
)
||
((
avctx
->
height
%
2
)
!=
0
))
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"Invalid frame size %dx%d
\n
"
,
avctx
->
width
,
avctx
->
height
);
return
AVERROR_INVALIDDATA
;
...
...
@@ -189,17 +193,17 @@ static int decode_frame(AVCodecContext *avctx,
return
ret
;
}
/* bit 31 means same as previous pic */
f
->
pict_type
=
(
header
&
(
1U
<<
31
))
?
AV_PICTURE_TYPE_P
:
AV_PICTURE_TYPE_I
;
f
->
pict_type
=
(
header
&
(
1U
<<
31
))
?
AV_PICTURE_TYPE_P
:
AV_PICTURE_TYPE_I
;
f
->
key_frame
=
f
->
pict_type
==
AV_PICTURE_TYPE_I
;
if
(
f
->
pict_type
==
AV_PICTURE_TYPE_I
)
{
buf32
=
(
const
uint32_t
*
)
buf
;
for
(
y
=
0
;
y
<
avctx
->
height
/
2
;
y
++
)
{
luma1
=
(
uint32_t
*
)
&
f
->
data
[
0
][
y
*
2
*
f
->
linesize
[
0
]
];
luma2
=
(
uint32_t
*
)
&
f
->
data
[
0
][
(
y
*
2
+
1
)
*
f
->
linesize
[
0
]
];
cr
=
(
uint32_t
*
)
&
f
->
data
[
1
][
y
*
f
->
linesize
[
1
]
];
cb
=
(
uint32_t
*
)
&
f
->
data
[
2
][
y
*
f
->
linesize
[
2
]
];
for
(
x
=
0
;
x
<
avctx
->
width
;
x
+=
8
)
{
buf32
=
(
const
uint32_t
*
)
buf
;
for
(
y
=
0
;
y
<
avctx
->
height
/
2
;
y
++
)
{
luma1
=
(
uint32_t
*
)
&
f
->
data
[
0
][
y
*
2
*
f
->
linesize
[
0
]
];
luma2
=
(
uint32_t
*
)
&
f
->
data
[
0
][(
y
*
2
+
1
)
*
f
->
linesize
[
0
]
];
cr
=
(
uint32_t
*
)
&
f
->
data
[
1
][
y
*
f
->
linesize
[
1
]
];
cb
=
(
uint32_t
*
)
&
f
->
data
[
2
][
y
*
f
->
linesize
[
2
]
];
for
(
x
=
0
;
x
<
avctx
->
width
;
x
+=
8
)
{
*
(
luma1
++
)
=
*
(
buf32
++
);
*
(
luma1
++
)
=
*
(
buf32
++
);
*
(
luma2
++
)
=
*
(
buf32
++
);
...
...
@@ -213,11 +217,11 @@ static int decode_frame(AVCodecContext *avctx,
case
1
:
/* Fraps v1 is an upside-down BGR24 */
if
(
(
buf_size
!=
avctx
->
width
*
avctx
->
height
*
3
+
header_size
)
&&
(
buf_size
!=
header_size
)
)
{
if
(
(
buf_size
!=
avctx
->
width
*
avctx
->
height
*
3
+
header_size
)
&&
(
buf_size
!=
header_size
)
)
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"Invalid frame length %d (should be %d)
\n
"
,
buf_size
,
avctx
->
width
*
avctx
->
height
*
3
+
header_size
);
buf_size
,
avctx
->
width
*
avctx
->
height
*
3
+
header_size
);
return
AVERROR_INVALIDDATA
;
}
...
...
@@ -234,10 +238,10 @@ static int decode_frame(AVCodecContext *avctx,
f
->
key_frame
=
f
->
pict_type
==
AV_PICTURE_TYPE_I
;
if
(
f
->
pict_type
==
AV_PICTURE_TYPE_I
)
{
for
(
y
=
0
;
y
<
avctx
->
height
;
y
++
)
memcpy
(
&
f
->
data
[
0
][
(
avctx
->
height
-
y
)
*
f
->
linesize
[
0
]
],
&
buf
[
y
*
avctx
->
width
*
3
],
3
*
avctx
->
width
);
for
(
y
=
0
;
y
<
avctx
->
height
;
y
++
)
memcpy
(
&
f
->
data
[
0
][
(
avctx
->
height
-
y
)
*
f
->
linesize
[
0
]
],
&
buf
[
y
*
avctx
->
width
*
3
],
3
*
avctx
->
width
);
}
break
;
...
...
@@ -257,26 +261,26 @@ static int decode_frame(AVCodecContext *avctx,
return
ret
;
}
/* skip frame */
if
(
buf_size
==
8
)
{
if
(
buf_size
==
8
)
{
f
->
pict_type
=
AV_PICTURE_TYPE_P
;
f
->
key_frame
=
0
;
break
;
}
f
->
pict_type
=
AV_PICTURE_TYPE_I
;
f
->
key_frame
=
1
;
if
((
AV_RL32
(
buf
)
!=
FPS_TAG
)
||
(
buf_size
<
(
planes
*
1024
+
24
)))
{
if
((
AV_RL32
(
buf
)
!=
FPS_TAG
)
||
(
buf_size
<
(
planes
*
1024
+
24
)))
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"Fraps: error in data stream
\n
"
);
return
AVERROR_INVALIDDATA
;
}
for
(
i
=
0
;
i
<
planes
;
i
++
)
{
for
(
i
=
0
;
i
<
planes
;
i
++
)
{
offs
[
i
]
=
AV_RL32
(
buf
+
4
+
i
*
4
);
if
(
offs
[
i
]
>=
buf_size
||
(
i
&&
offs
[
i
]
<=
offs
[
i
-
1
]
+
1024
))
{
if
(
offs
[
i
]
>=
buf_size
||
(
i
&&
offs
[
i
]
<=
offs
[
i
-
1
]
+
1024
))
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"Fraps: plane %i offset is out of bounds
\n
"
,
i
);
return
AVERROR_INVALIDDATA
;
}
}
offs
[
planes
]
=
buf_size
;
for
(
i
=
0
;
i
<
planes
;
i
++
)
{
for
(
i
=
0
;
i
<
planes
;
i
++
)
{
is_chroma
=
!!
i
;
av_fast_padded_malloc
(
&
s
->
tmpbuf
,
&
s
->
tmpbuf_size
,
offs
[
i
+
1
]
-
offs
[
i
]
-
1024
);
...
...
@@ -305,7 +309,7 @@ static int decode_frame(AVCodecContext *avctx,
return
ret
;
}
/* skip frame */
if
(
buf_size
==
8
)
{
if
(
buf_size
==
8
)
{
f
->
pict_type
=
AV_PICTURE_TYPE_P
;
f
->
key_frame
=
0
;
break
;
...
...
@@ -316,15 +320,15 @@ static int decode_frame(AVCodecContext *avctx,
av_log
(
avctx
,
AV_LOG_ERROR
,
"Fraps: error in data stream
\n
"
);
return
AVERROR_INVALIDDATA
;
}
for
(
i
=
0
;
i
<
planes
;
i
++
)
{
for
(
i
=
0
;
i
<
planes
;
i
++
)
{
offs
[
i
]
=
AV_RL32
(
buf
+
4
+
i
*
4
);
if
(
offs
[
i
]
>=
buf_size
||
(
i
&&
offs
[
i
]
<=
offs
[
i
-
1
]
+
1024
))
{
if
(
offs
[
i
]
>=
buf_size
||
(
i
&&
offs
[
i
]
<=
offs
[
i
-
1
]
+
1024
))
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"Fraps: plane %i offset is out of bounds
\n
"
,
i
);
return
AVERROR_INVALIDDATA
;
}
}
offs
[
planes
]
=
buf_size
;
for
(
i
=
0
;
i
<
planes
;
i
++
)
{
for
(
i
=
0
;
i
<
planes
;
i
++
)
{
av_fast_padded_malloc
(
&
s
->
tmpbuf
,
&
s
->
tmpbuf_size
,
offs
[
i
+
1
]
-
offs
[
i
]
-
1024
);
if
(
!
s
->
tmpbuf
)
...
...
@@ -337,8 +341,8 @@ static int decode_frame(AVCodecContext *avctx,
}
}
// convert pseudo-YUV into real RGB
for
(
j
=
0
;
j
<
avctx
->
height
;
j
++
)
{
for
(
i
=
0
;
i
<
avctx
->
width
;
i
++
)
{
for
(
j
=
0
;
j
<
avctx
->
height
;
j
++
)
{
for
(
i
=
0
;
i
<
avctx
->
width
;
i
++
)
{
f
->
data
[
0
][
0
+
i
*
3
+
j
*
f
->
linesize
[
0
]]
+=
f
->
data
[
0
][
1
+
i
*
3
+
j
*
f
->
linesize
[
0
]];
f
->
data
[
0
][
2
+
i
*
3
+
j
*
f
->
linesize
[
0
]]
+=
f
->
data
[
0
][
1
+
i
*
3
+
j
*
f
->
linesize
[
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