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
170fb593
Commit
170fb593
authored
Jun 29, 2013
by
Luca Barbato
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
pcx: K&R formatting cosmetics
parent
ef5b70af
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
59 additions
and
57 deletions
+59
-57
pcx.c
libavcodec/pcx.c
+59
-57
No files found.
libavcodec/pcx.c
View file @
170fb593
...
...
@@ -32,19 +32,21 @@
* @return advanced src pointer
*/
static
const
uint8_t
*
pcx_rle_decode
(
const
uint8_t
*
src
,
uint8_t
*
dst
,
unsigned
int
bytes_per_scanline
,
int
compressed
)
{
unsigned
int
bytes_per_scanline
,
int
compressed
)
{
unsigned
int
i
=
0
;
unsigned
char
run
,
value
;
if
(
compressed
)
{
while
(
i
<
bytes_per_scanline
)
{
run
=
1
;
while
(
i
<
bytes_per_scanline
)
{
run
=
1
;
value
=
*
src
++
;
if
(
value
>=
0xc0
)
{
run
=
value
&
0x3f
;
run
=
value
&
0x3f
;
value
=
*
src
++
;
}
while
(
i
<
bytes_per_scanline
&&
run
--
)
while
(
i
<
bytes_per_scanline
&&
run
--
)
dst
[
i
++
]
=
value
;
}
}
else
{
...
...
@@ -55,20 +57,23 @@ static const uint8_t *pcx_rle_decode(const uint8_t *src, uint8_t *dst,
return
src
;
}
static
void
pcx_palette
(
const
uint8_t
**
src
,
uint32_t
*
dst
,
unsigned
int
pallen
)
{
static
void
pcx_palette
(
const
uint8_t
**
src
,
uint32_t
*
dst
,
unsigned
int
pallen
)
{
unsigned
int
i
;
for
(
i
=
0
;
i
<
pallen
;
i
++
)
for
(
i
=
0
;
i
<
pallen
;
i
++
)
*
dst
++
=
bytestream_get_be24
(
src
);
if
(
pallen
<
256
)
memset
(
dst
,
0
,
(
256
-
pallen
)
*
sizeof
(
*
dst
));
}
static
int
pcx_decode_frame
(
AVCodecContext
*
avctx
,
void
*
data
,
int
*
got_frame
,
AVPacket
*
avpkt
)
{
AVPacket
*
avpkt
)
{
const
uint8_t
*
buf
=
avpkt
->
data
;
int
buf_size
=
avpkt
->
size
;
AVFrame
*
const
p
=
data
;
int
buf_size
=
avpkt
->
size
;
AVFrame
*
const
p
=
data
;
int
compressed
,
xmin
,
ymin
,
xmax
,
ymax
;
unsigned
int
w
,
h
,
bits_per_pixel
,
bytes_per_line
,
nplanes
,
stride
,
y
,
x
,
bytes_per_scanline
;
...
...
@@ -83,10 +88,10 @@ static int pcx_decode_frame(AVCodecContext *avctx, void *data, int *got_frame,
}
compressed
=
buf
[
2
];
xmin
=
AV_RL16
(
buf
+
4
);
ymin
=
AV_RL16
(
buf
+
6
);
xmax
=
AV_RL16
(
buf
+
8
);
ymax
=
AV_RL16
(
buf
+
10
);
xmin
=
AV_RL16
(
buf
+
4
);
ymin
=
AV_RL16
(
buf
+
6
);
xmax
=
AV_RL16
(
buf
+
8
);
ymax
=
AV_RL16
(
buf
+
10
);
if
(
xmax
<
xmin
||
ymax
<
ymin
)
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"invalid image dimensions
\n
"
);
...
...
@@ -97,7 +102,7 @@ static int pcx_decode_frame(AVCodecContext *avctx, void *data, int *got_frame,
h
=
ymax
-
ymin
+
1
;
bits_per_pixel
=
buf
[
3
];
bytes_per_line
=
AV_RL16
(
buf
+
66
);
bytes_per_line
=
AV_RL16
(
buf
+
66
);
nplanes
=
buf
[
65
];
bytes_per_scanline
=
nplanes
*
bytes_per_line
;
...
...
@@ -106,22 +111,22 @@ static int pcx_decode_frame(AVCodecContext *avctx, void *data, int *got_frame,
return
AVERROR_INVALIDDATA
;
}
switch
((
nplanes
<<
8
)
+
bits_per_pixel
)
{
case
0x0308
:
avctx
->
pix_fmt
=
AV_PIX_FMT_RGB24
;
break
;
case
0x0108
:
case
0x0104
:
case
0x0102
:
case
0x0101
:
case
0x0401
:
case
0x0301
:
case
0x0201
:
avctx
->
pix_fmt
=
AV_PIX_FMT_PAL8
;
break
;
default:
av_log
(
avctx
,
AV_LOG_ERROR
,
"invalid PCX file
\n
"
);
return
AVERROR_INVALIDDATA
;
switch
((
nplanes
<<
8
)
+
bits_per_pixel
)
{
case
0x0308
:
avctx
->
pix_fmt
=
AV_PIX_FMT_RGB24
;
break
;
case
0x0108
:
case
0x0104
:
case
0x0102
:
case
0x0101
:
case
0x0401
:
case
0x0301
:
case
0x0201
:
avctx
->
pix_fmt
=
AV_PIX_FMT_PAL8
;
break
;
default:
av_log
(
avctx
,
AV_LOG_ERROR
,
"invalid PCX file
\n
"
);
return
AVERROR_INVALIDDATA
;
}
buf
+=
128
;
...
...
@@ -145,22 +150,21 @@ static int pcx_decode_frame(AVCodecContext *avctx, void *data, int *got_frame,
return
AVERROR
(
ENOMEM
);
if
(
nplanes
==
3
&&
bits_per_pixel
==
8
)
{
for
(
y
=
0
;
y
<
h
;
y
++
)
{
for
(
y
=
0
;
y
<
h
;
y
++
)
{
buf
=
pcx_rle_decode
(
buf
,
scanline
,
bytes_per_scanline
,
compressed
);
for
(
x
=
0
;
x
<
w
;
x
++
)
{
ptr
[
3
*
x
]
=
scanline
[
x
];
ptr
[
3
*
x
+
1
]
=
scanline
[
x
+
bytes_per_line
];
ptr
[
3
*
x
+
2
]
=
scanline
[
x
+
(
bytes_per_line
<<
1
)];
for
(
x
=
0
;
x
<
w
;
x
++
)
{
ptr
[
3
*
x
]
=
scanline
[
x
];
ptr
[
3
*
x
+
1
]
=
scanline
[
x
+
bytes_per_line
];
ptr
[
3
*
x
+
2
]
=
scanline
[
x
+
(
bytes_per_line
<<
1
)];
}
ptr
+=
stride
;
}
}
else
if
(
nplanes
==
1
&&
bits_per_pixel
==
8
)
{
const
uint8_t
*
palstart
=
bufstart
+
buf_size
-
769
;
for
(
y
=
0
;
y
<
h
;
y
++
,
ptr
+=
stride
)
{
for
(
y
=
0
;
y
<
h
;
y
++
,
ptr
+=
stride
)
{
buf
=
pcx_rle_decode
(
buf
,
scanline
,
bytes_per_scanline
,
compressed
);
memcpy
(
ptr
,
scanline
,
w
);
}
...
...
@@ -173,31 +177,29 @@ static int pcx_decode_frame(AVCodecContext *avctx, void *data, int *got_frame,
av_log
(
avctx
,
AV_LOG_ERROR
,
"expected palette after image data
\n
"
);
goto
end
;
}
}
else
if
(
nplanes
==
1
)
{
/* all packed formats, max. 16 colors */
GetBitContext
s
;
for
(
y
=
0
;
y
<
h
;
y
++
)
{
init_get_bits
(
&
s
,
scanline
,
bytes_per_scanline
<<
3
);
for
(
y
=
0
;
y
<
h
;
y
++
)
{
init_get_bits
(
&
s
,
scanline
,
bytes_per_scanline
<<
3
);
buf
=
pcx_rle_decode
(
buf
,
scanline
,
bytes_per_scanline
,
compressed
);
for
(
x
=
0
;
x
<
w
;
x
++
)
for
(
x
=
0
;
x
<
w
;
x
++
)
ptr
[
x
]
=
get_bits
(
&
s
,
bits_per_pixel
);
ptr
+=
stride
;
}
}
else
{
/* planar, 4, 8 or 16 colors */
int
i
;
for
(
y
=
0
;
y
<
h
;
y
++
)
{
for
(
y
=
0
;
y
<
h
;
y
++
)
{
buf
=
pcx_rle_decode
(
buf
,
scanline
,
bytes_per_scanline
,
compressed
);
for
(
x
=
0
;
x
<
w
;
x
++
)
{
int
m
=
0x80
>>
(
x
&
7
),
v
=
0
;
for
(
i
=
nplanes
-
1
;
i
>=
0
;
i
--
)
{
for
(
x
=
0
;
x
<
w
;
x
++
)
{
int
m
=
0x80
>>
(
x
&
7
),
v
=
0
;
for
(
i
=
nplanes
-
1
;
i
>=
0
;
i
--
)
{
v
<<=
1
;
v
+=
!!
(
scanline
[
i
*
bytes_per_line
+
(
x
>>
3
)]
&
m
);
v
+=
!!
(
scanline
[
i
*
bytes_per_line
+
(
x
>>
3
)]
&
m
);
}
ptr
[
x
]
=
v
;
}
...
...
@@ -206,10 +208,10 @@ static int pcx_decode_frame(AVCodecContext *avctx, void *data, int *got_frame,
}
if
(
nplanes
==
1
&&
bits_per_pixel
==
8
)
{
pcx_palette
(
&
buf
,
(
uint32_t
*
)
p
->
data
[
1
],
256
);
pcx_palette
(
&
buf
,
(
uint32_t
*
)
p
->
data
[
1
],
256
);
}
else
if
(
bits_per_pixel
<
8
)
{
const
uint8_t
*
palette
=
bufstart
+
16
;
pcx_palette
(
&
palette
,
(
uint32_t
*
)
p
->
data
[
1
],
16
);
const
uint8_t
*
palette
=
bufstart
+
16
;
pcx_palette
(
&
palette
,
(
uint32_t
*
)
p
->
data
[
1
],
16
);
}
*
got_frame
=
1
;
...
...
@@ -221,10 +223,10 @@ end:
}
AVCodec
ff_pcx_decoder
=
{
.
name
=
"pcx"
,
.
type
=
AVMEDIA_TYPE_VIDEO
,
.
id
=
AV_CODEC_ID_PCX
,
.
decode
=
pcx_decode_frame
,
.
capabilities
=
CODEC_CAP_DR1
,
.
long_name
=
NULL_IF_CONFIG_SMALL
(
"PC Paintbrush PCX image"
),
.
name
=
"pcx"
,
.
type
=
AVMEDIA_TYPE_VIDEO
,
.
id
=
AV_CODEC_ID_PCX
,
.
decode
=
pcx_decode_frame
,
.
capabilities
=
CODEC_CAP_DR1
,
.
long_name
=
NULL_IF_CONFIG_SMALL
(
"PC Paintbrush PCX image"
),
};
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