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
9221c0af
Commit
9221c0af
authored
Dec 08, 2012
by
Anton Khirnov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
pngdec: cosmetics, reformat.
Also remove a commented out line.
parent
edb2426b
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
77 additions
and
73 deletions
+77
-73
pngdec.c
libavcodec/pngdec.c
+77
-73
No files found.
libavcodec/pngdec.c
View file @
9221c0af
...
...
@@ -88,13 +88,14 @@ static void png_put_interlaced_row(uint8_t *dst, int width,
mask
=
ff_png_pass_mask
[
pass
];
dsp_mask
=
png_pass_dsp_mask
[
pass
];
switch
(
bits_per_pixel
)
{
switch
(
bits_per_pixel
)
{
case
1
:
/* we must initialize the line to zero before writing to it */
if
(
pass
==
0
)
memset
(
dst
,
0
,
(
width
+
7
)
>>
3
);
src_x
=
0
;
for
(
x
=
0
;
x
<
width
;
x
++
)
{
for
(
x
=
0
;
x
<
width
;
x
++
)
{
j
=
(
x
&
7
);
if
((
dsp_mask
<<
j
)
&
0x80
)
{
b
=
(
src
[
src_x
>>
3
]
>>
(
7
-
(
src_x
&
7
)))
&
1
;
...
...
@@ -109,7 +110,7 @@ static void png_put_interlaced_row(uint8_t *dst, int width,
d
=
dst
;
s
=
src
;
if
(
color_type
==
PNG_COLOR_TYPE_RGB_ALPHA
)
{
for
(
x
=
0
;
x
<
width
;
x
++
)
{
for
(
x
=
0
;
x
<
width
;
x
++
)
{
j
=
x
&
7
;
if
((
dsp_mask
<<
j
)
&
0x80
)
{
*
(
uint32_t
*
)
d
=
(
s
[
3
]
<<
24
)
|
(
s
[
0
]
<<
16
)
|
(
s
[
1
]
<<
8
)
|
s
[
2
];
...
...
@@ -136,7 +137,7 @@ static void png_put_interlaced_row(uint8_t *dst, int width,
void
ff_add_png_paeth_prediction
(
uint8_t
*
dst
,
uint8_t
*
src
,
uint8_t
*
top
,
int
w
,
int
bpp
)
{
int
i
;
for
(
i
=
0
;
i
<
w
;
i
++
)
{
for
(
i
=
0
;
i
<
w
;
i
++
)
{
int
a
,
b
,
c
,
p
,
pa
,
pb
,
pc
;
a
=
dst
[
i
-
bpp
];
...
...
@@ -195,20 +196,20 @@ static void png_filter_row(PNGDSPContext *dsp, uint8_t *dst, int filter_type,
{
int
i
,
p
,
r
,
g
,
b
,
a
;
switch
(
filter_type
)
{
switch
(
filter_type
)
{
case
PNG_FILTER_VALUE_NONE
:
memcpy
(
dst
,
src
,
size
);
break
;
case
PNG_FILTER_VALUE_SUB
:
for
(
i
=
0
;
i
<
bpp
;
i
++
)
{
for
(
i
=
0
;
i
<
bpp
;
i
++
)
{
dst
[
i
]
=
src
[
i
];
}
if
(
bpp
==
4
)
{
if
(
bpp
==
4
)
{
p
=
*
(
int
*
)
dst
;
for
(;
i
<
size
;
i
+=
bpp
)
{
int
s
=
*
(
int
*
)(
src
+
i
);
p
=
((
s
&
0x7f7f7f7f
)
+
(
p
&
0x7f7f7f7f
))
^
((
s
^
p
)
&
0x80808080
);
*
(
int
*
)(
dst
+
i
)
=
p
;
for
(;
i
<
size
;
i
+=
bpp
)
{
int
s
=
*
(
int
*
)(
src
+
i
);
p
=
((
s
&
0x7f7f7f7f
)
+
(
p
&
0x7f7f7f7f
))
^
((
s
^
p
)
&
0x80808080
);
*
(
int
*
)(
dst
+
i
)
=
p
;
}
}
else
{
#define OP_SUB(x,s,l) x+s
...
...
@@ -219,7 +220,7 @@ static void png_filter_row(PNGDSPContext *dsp, uint8_t *dst, int filter_type,
dsp
->
add_bytes_l2
(
dst
,
src
,
last
,
size
);
break
;
case
PNG_FILTER_VALUE_AVG
:
for
(
i
=
0
;
i
<
bpp
;
i
++
)
{
for
(
i
=
0
;
i
<
bpp
;
i
++
)
{
p
=
(
last
[
i
]
>>
1
);
dst
[
i
]
=
p
+
src
[
i
];
}
...
...
@@ -227,34 +228,36 @@ static void png_filter_row(PNGDSPContext *dsp, uint8_t *dst, int filter_type,
UNROLL_FILTER
(
OP_AVG
);
break
;
case
PNG_FILTER_VALUE_PAETH
:
for
(
i
=
0
;
i
<
bpp
;
i
++
)
{
for
(
i
=
0
;
i
<
bpp
;
i
++
)
{
p
=
last
[
i
];
dst
[
i
]
=
p
+
src
[
i
];
}
if
(
bpp
>
1
&&
size
>
4
)
{
if
(
bpp
>
1
&&
size
>
4
)
{
// would write off the end of the array if we let it process the last pixel with bpp=3
int
w
=
bpp
==
4
?
size
:
size
-
3
;
dsp
->
add_paeth_prediction
(
dst
+
i
,
src
+
i
,
last
+
i
,
w
-
i
,
bpp
);
int
w
=
bpp
==
4
?
size
:
size
-
3
;
dsp
->
add_paeth_prediction
(
dst
+
i
,
src
+
i
,
last
+
i
,
w
-
i
,
bpp
);
i
=
w
;
}
ff_add_png_paeth_prediction
(
dst
+
i
,
src
+
i
,
last
+
i
,
size
-
i
,
bpp
);
ff_add_png_paeth_prediction
(
dst
+
i
,
src
+
i
,
last
+
i
,
size
-
i
,
bpp
);
break
;
}
}
static
av_always_inline
void
convert_to_rgb32_loco
(
uint8_t
*
dst
,
const
uint8_t
*
src
,
int
width
,
int
loco
)
static
av_always_inline
void
convert_to_rgb32_loco
(
uint8_t
*
dst
,
const
uint8_t
*
src
,
int
width
,
int
loco
)
{
int
j
;
unsigned
int
r
,
g
,
b
,
a
;
for
(
j
=
0
;
j
<
width
;
j
++
)
{
for
(
j
=
0
;
j
<
width
;
j
++
)
{
r
=
src
[
0
];
g
=
src
[
1
];
b
=
src
[
2
];
a
=
src
[
3
];
if
(
loco
)
{
r
=
(
r
+
g
)
&
0xff
;
b
=
(
b
+
g
)
&
0xff
;
if
(
loco
)
{
r
=
(
r
+
g
)
&
0xff
;
b
=
(
b
+
g
)
&
0xff
;
}
*
(
uint32_t
*
)
dst
=
(
a
<<
24
)
|
(
r
<<
16
)
|
(
g
<<
8
)
|
b
;
dst
+=
4
;
...
...
@@ -264,7 +267,7 @@ static av_always_inline void convert_to_rgb32_loco(uint8_t *dst, const uint8_t *
static
void
convert_to_rgb32
(
uint8_t
*
dst
,
const
uint8_t
*
src
,
int
width
,
int
loco
)
{
if
(
loco
)
if
(
loco
)
convert_to_rgb32_loco
(
dst
,
src
,
width
,
1
);
else
convert_to_rgb32_loco
(
dst
,
src
,
width
,
0
);
...
...
@@ -273,10 +276,10 @@ static void convert_to_rgb32(uint8_t *dst, const uint8_t *src, int width, int lo
static
void
deloco_rgb24
(
uint8_t
*
dst
,
int
size
)
{
int
i
;
for
(
i
=
0
;
i
<
size
;
i
+=
3
)
{
int
g
=
dst
[
i
+
1
];
dst
[
i
+
0
]
+=
g
;
dst
[
i
+
2
]
+=
g
;
for
(
i
=
0
;
i
<
size
;
i
+=
3
)
{
int
g
=
dst
[
i
+
1
];
dst
[
i
+
0
]
+=
g
;
dst
[
i
+
2
]
+=
g
;
}
}
...
...
@@ -317,7 +320,7 @@ static void png_handle_row(PNGDecContext *s)
}
}
else
{
got_line
=
0
;
for
(;;)
{
for
(;;)
{
ptr
=
s
->
image_buf
+
s
->
image_linesize
*
s
->
y
;
if
((
ff_png_pass_ymask
[
s
->
pass
]
<<
(
s
->
y
&
7
))
&
0x80
)
{
/* if we already read one row, it is time to stop to
...
...
@@ -336,7 +339,7 @@ static void png_handle_row(PNGDecContext *s)
}
s
->
y
++
;
if
(
s
->
y
==
s
->
height
)
{
for
(;;)
{
for
(;;)
{
if
(
s
->
pass
==
NB_PASSES
-
1
)
{
s
->
state
|=
PNG_ALLIMAGE
;
goto
the_end
;
...
...
@@ -386,17 +389,17 @@ static int decode_frame(AVCodecContext *avctx,
void
*
data
,
int
*
got_frame
,
AVPacket
*
avpkt
)
{
PNGDecContext
*
const
s
=
avctx
->
priv_data
;
const
uint8_t
*
buf
=
avpkt
->
data
;
int
buf_size
=
avpkt
->
size
;
PNGDecContext
*
const
s
=
avctx
->
priv_data
;
AVFrame
*
picture
=
data
;
AVFrame
*
p
;
uint8_t
*
crow_buf_base
=
NULL
;
AVFrame
*
p
;
uint32_t
tag
,
length
;
int
ret
;
FFSWAP
(
AVFrame
*
,
s
->
current_picture
,
s
->
last_picture
);
avctx
->
coded_frame
=
s
->
current_picture
;
avctx
->
coded_frame
=
s
->
current_picture
;
p
=
s
->
current_picture
;
/* check signature */
...
...
@@ -406,9 +409,8 @@ static int decode_frame(AVCodecContext *avctx,
return
-
1
;
bytestream2_init
(
&
s
->
gb
,
buf
+
8
,
buf_size
-
8
);
s
->
y
=
s
->
state
=
0
;
// memset(s, 0, sizeof(PNGDecContext));
s
->
y
=
s
->
state
=
0
;
/* init the zlib */
s
->
zstream
.
zalloc
=
ff_png_zalloc
;
s
->
zstream
.
zfree
=
ff_png_zfree
;
...
...
@@ -416,7 +418,7 @@ static int decode_frame(AVCodecContext *avctx,
ret
=
inflateInit
(
&
s
->
zstream
);
if
(
ret
!=
Z_OK
)
return
-
1
;
for
(;;)
{
for
(;;)
{
if
(
bytestream2_get_bytes_left
(
&
s
->
gb
)
<=
0
)
goto
fail
;
length
=
bytestream2_get_be32
(
&
s
->
gb
);
...
...
@@ -428,14 +430,14 @@ static int decode_frame(AVCodecContext *avctx,
((
tag
>>
8
)
&
0xff
),
((
tag
>>
16
)
&
0xff
),
((
tag
>>
24
)
&
0xff
),
length
);
switch
(
tag
)
{
switch
(
tag
)
{
case
MKTAG
(
'I'
,
'H'
,
'D'
,
'R'
):
if
(
length
!=
13
)
goto
fail
;
s
->
width
=
bytestream2_get_be32
(
&
s
->
gb
);
s
->
height
=
bytestream2_get_be32
(
&
s
->
gb
);
if
(
av_image_check_size
(
s
->
width
,
s
->
height
,
0
,
avctx
))
{
s
->
width
=
s
->
height
=
0
;
if
(
av_image_check_size
(
s
->
width
,
s
->
height
,
0
,
avctx
))
{
s
->
width
=
s
->
height
=
0
;
goto
fail
;
}
s
->
bit_depth
=
bytestream2_get_byte
(
&
s
->
gb
);
...
...
@@ -445,7 +447,8 @@ static int decode_frame(AVCodecContext *avctx,
s
->
interlace_type
=
bytestream2_get_byte
(
&
s
->
gb
);
bytestream2_skip
(
&
s
->
gb
,
4
);
/* crc */
s
->
state
|=
PNG_IHDR
;
av_dlog
(
avctx
,
"width=%d height=%d depth=%d color_type=%d compression_type=%d filter_type=%d interlace_type=%d
\n
"
,
av_dlog
(
avctx
,
"width=%d height=%d depth=%d color_type=%d "
"compression_type=%d filter_type=%d interlace_type=%d
\n
"
,
s
->
width
,
s
->
height
,
s
->
bit_depth
,
s
->
color_type
,
s
->
compression_type
,
s
->
filter_type
,
s
->
interlace_type
);
break
;
...
...
@@ -489,16 +492,16 @@ static int decode_frame(AVCodecContext *avctx,
}
else
{
goto
fail
;
}
if
(
p
->
data
[
0
])
if
(
p
->
data
[
0
])
avctx
->
release_buffer
(
avctx
,
p
);
p
->
reference
=
0
;
if
(
ff_get_buffer
(
avctx
,
p
)
<
0
)
{
p
->
reference
=
0
;
if
(
ff_get_buffer
(
avctx
,
p
)
<
0
)
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"get_buffer() failed
\n
"
);
goto
fail
;
}
p
->
pict_type
=
AV_PICTURE_TYPE_I
;
p
->
key_frame
=
1
;
p
->
pict_type
=
AV_PICTURE_TYPE_I
;
p
->
key_frame
=
1
;
p
->
interlaced_frame
=
!!
s
->
interlace_type
;
/* compute the compressed row size */
...
...
@@ -551,13 +554,13 @@ static int decode_frame(AVCodecContext *avctx,
goto
skip_tag
;
/* read the palette */
n
=
length
/
3
;
for
(
i
=
0
;
i
<
n
;
i
++
)
{
for
(
i
=
0
;
i
<
n
;
i
++
)
{
r
=
bytestream2_get_byte
(
&
s
->
gb
);
g
=
bytestream2_get_byte
(
&
s
->
gb
);
b
=
bytestream2_get_byte
(
&
s
->
gb
);
s
->
palette
[
i
]
=
(
0xff
<<
24
)
|
(
r
<<
16
)
|
(
g
<<
8
)
|
b
;
}
for
(;
i
<
256
;
i
++
)
{
for
(;
i
<
256
;
i
++
)
{
s
->
palette
[
i
]
=
(
0xff
<<
24
);
}
s
->
state
|=
PNG_PLTE
;
...
...
@@ -573,7 +576,7 @@ static int decode_frame(AVCodecContext *avctx,
length
>
256
||
!
(
s
->
state
&
PNG_PLTE
))
goto
skip_tag
;
for
(
i
=
0
;
i
<
length
;
i
++
)
{
for
(
i
=
0
;
i
<
length
;
i
++
)
{
v
=
bytestream2_get_byte
(
&
s
->
gb
);
s
->
palette
[
i
]
=
(
s
->
palette
[
i
]
&
0x00ffffff
)
|
(
v
<<
24
);
}
...
...
@@ -594,14 +597,14 @@ static int decode_frame(AVCodecContext *avctx,
}
exit_loop:
/* handle p-frames only if a predecessor frame is available */
if
(
s
->
last_picture
->
data
[
0
]
!=
NULL
)
{
if
(
!
(
avpkt
->
flags
&
AV_PKT_FLAG_KEY
))
{
if
(
s
->
last_picture
->
data
[
0
]
!=
NULL
)
{
if
(
!
(
avpkt
->
flags
&
AV_PKT_FLAG_KEY
))
{
int
i
,
j
;
uint8_t
*
pd
=
s
->
current_picture
->
data
[
0
];
uint8_t
*
pd_last
=
s
->
last_picture
->
data
[
0
];
for
(
j
=
0
;
j
<
s
->
height
;
j
++
)
{
for
(
i
=
0
;
i
<
s
->
width
*
s
->
bpp
;
i
++
)
{
for
(
j
=
0
;
j
<
s
->
height
;
j
++
)
{
for
(
i
=
0
;
i
<
s
->
width
*
s
->
bpp
;
i
++
)
{
pd
[
i
]
+=
pd_last
[
i
];
}
pd
+=
s
->
image_linesize
;
...
...
@@ -610,7 +613,7 @@ static int decode_frame(AVCodecContext *avctx,
}
}
*
picture
=
*
s
->
current_picture
;
*
picture
=
*
s
->
current_picture
;
*
got_frame
=
1
;
ret
=
bytestream2_tell
(
&
s
->
gb
);
...
...
@@ -626,7 +629,8 @@ static int decode_frame(AVCodecContext *avctx,
goto
the_end
;
}
static
av_cold
int
png_dec_init
(
AVCodecContext
*
avctx
){
static
av_cold
int
png_dec_init
(
AVCodecContext
*
avctx
)
{
PNGDecContext
*
s
=
avctx
->
priv_data
;
s
->
current_picture
=
&
s
->
picture1
;
...
...
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