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
324e8180
Commit
324e8180
authored
Jan 26, 2012
by
Paul B Mahol
Committed by
Diego Biurrun
Jan 26, 2012
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
8bps: K&R formatting cosmetics
Signed-off-by:
Diego Biurrun
<
diego@biurrun.de
>
parent
9adf25c1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
133 additions
and
130 deletions
+133
-130
8bps.c
libavcodec/8bps.c
+133
-130
No files found.
libavcodec/8bps.c
View file @
324e8180
...
...
@@ -38,20 +38,20 @@
#include "avcodec.h"
static
const
enum
PixelFormat
pixfmt_rgb24
[]
=
{
PIX_FMT_BGR24
,
PIX_FMT_RGB32
,
PIX_FMT_NONE
};
static
const
enum
PixelFormat
pixfmt_rgb24
[]
=
{
PIX_FMT_BGR24
,
PIX_FMT_RGB32
,
PIX_FMT_NONE
};
/*
* Decoder context
*/
typedef
struct
EightBpsContext
{
AVCodecContext
*
avctx
;
AVFrame
pic
;
AVCodecContext
*
avctx
;
AVFrame
pic
;
unsigned
char
planes
;
unsigned
char
planemap
[
4
]
;
unsigned
char
planes
;
unsigned
char
planemap
[
4
];
uint32_t
pal
[
256
];
uint32_t
pal
[
256
];
}
EightBpsContext
;
...
...
@@ -60,94 +60,97 @@ typedef struct EightBpsContext {
* Decode a frame
*
*/
static
int
decode_frame
(
AVCodecContext
*
avctx
,
void
*
data
,
int
*
data_size
,
AVPacket
*
avpkt
)
static
int
decode_frame
(
AVCodecContext
*
avctx
,
void
*
data
,
int
*
data_size
,
AVPacket
*
avpkt
)
{
const
uint8_t
*
buf
=
avpkt
->
data
;
int
buf_size
=
avpkt
->
size
;
EightBpsContext
*
const
c
=
avctx
->
priv_data
;
const
unsigned
char
*
encoded
=
buf
;
unsigned
char
*
pixptr
,
*
pixptr_end
;
unsigned
int
height
=
avctx
->
height
;
// Real image height
unsigned
int
dlen
,
p
,
row
;
const
unsigned
char
*
lp
,
*
dp
;
unsigned
char
count
;
unsigned
int
px_inc
;
unsigned
int
planes
=
c
->
planes
;
unsigned
char
*
planemap
=
c
->
planemap
;
if
(
c
->
pic
.
data
[
0
])
avctx
->
release_buffer
(
avctx
,
&
c
->
pic
);
c
->
pic
.
reference
=
0
;
c
->
pic
.
buffer_hints
=
FF_BUFFER_HINTS_VALID
;
if
(
avctx
->
get_buffer
(
avctx
,
&
c
->
pic
)
<
0
){
av_log
(
avctx
,
AV_LOG_ERROR
,
"get_buffer() failed
\n
"
);
return
-
1
;
}
/* Set data pointer after line lengths */
dp
=
encoded
+
planes
*
(
height
<<
1
);
/* Ignore alpha plane, don't know what to do with it */
if
(
planes
==
4
)
planes
--
;
px_inc
=
planes
+
(
avctx
->
pix_fmt
==
PIX_FMT_RGB32
);
for
(
p
=
0
;
p
<
planes
;
p
++
)
{
/* Lines length pointer for this plane */
lp
=
encoded
+
p
*
(
height
<<
1
);
/* Decode a plane */
for
(
row
=
0
;
row
<
height
;
row
++
)
{
pixptr
=
c
->
pic
.
data
[
0
]
+
row
*
c
->
pic
.
linesize
[
0
]
+
planemap
[
p
];
pixptr_end
=
pixptr
+
c
->
pic
.
linesize
[
0
];
dlen
=
av_be2ne16
(
*
(
const
unsigned
short
*
)(
lp
+
row
*
2
));
/* Decode a row of this plane */
while
(
dlen
>
0
)
{
if
(
dp
+
1
>=
buf
+
buf_size
)
return
-
1
;
if
((
count
=
*
dp
++
)
<=
127
)
{
count
++
;
dlen
-=
count
+
1
;
if
(
pixptr
+
count
*
px_inc
>
pixptr_end
)
break
;
if
(
dp
+
count
>
buf
+
buf_size
)
return
-
1
;
while
(
count
--
)
{
*
pixptr
=
*
dp
++
;
pixptr
+=
px_inc
;
}
}
else
{
count
=
257
-
count
;
if
(
pixptr
+
count
*
px_inc
>
pixptr_end
)
break
;
while
(
count
--
)
{
*
pixptr
=
*
dp
;
pixptr
+=
px_inc
;
}
dp
++
;
dlen
-=
2
;
}
}
const
uint8_t
*
buf
=
avpkt
->
data
;
int
buf_size
=
avpkt
->
size
;
EightBpsContext
*
const
c
=
avctx
->
priv_data
;
const
unsigned
char
*
encoded
=
buf
;
unsigned
char
*
pixptr
,
*
pixptr_end
;
unsigned
int
height
=
avctx
->
height
;
// Real image height
unsigned
int
dlen
,
p
,
row
;
const
unsigned
char
*
lp
,
*
dp
;
unsigned
char
count
;
unsigned
int
px_inc
;
unsigned
int
planes
=
c
->
planes
;
unsigned
char
*
planemap
=
c
->
planemap
;
if
(
c
->
pic
.
data
[
0
])
avctx
->
release_buffer
(
avctx
,
&
c
->
pic
);
c
->
pic
.
reference
=
0
;
c
->
pic
.
buffer_hints
=
FF_BUFFER_HINTS_VALID
;
if
(
avctx
->
get_buffer
(
avctx
,
&
c
->
pic
)
<
0
){
av_log
(
avctx
,
AV_LOG_ERROR
,
"get_buffer() failed
\n
"
);
return
-
1
;
}
/* Set data pointer after line lengths */
dp
=
encoded
+
planes
*
(
height
<<
1
);
/* Ignore alpha plane, don't know what to do with it */
if
(
planes
==
4
)
planes
--
;
px_inc
=
planes
+
(
avctx
->
pix_fmt
==
PIX_FMT_RGB32
);
for
(
p
=
0
;
p
<
planes
;
p
++
)
{
/* Lines length pointer for this plane */
lp
=
encoded
+
p
*
(
height
<<
1
);
/* Decode a plane */
for
(
row
=
0
;
row
<
height
;
row
++
)
{
pixptr
=
c
->
pic
.
data
[
0
]
+
row
*
c
->
pic
.
linesize
[
0
]
+
planemap
[
p
];
pixptr_end
=
pixptr
+
c
->
pic
.
linesize
[
0
];
dlen
=
av_be2ne16
(
*
(
const
unsigned
short
*
)(
lp
+
row
*
2
));
/* Decode a row of this plane */
while
(
dlen
>
0
)
{
if
(
dp
+
1
>=
buf
+
buf_size
)
return
-
1
;
if
((
count
=
*
dp
++
)
<=
127
)
{
count
++
;
dlen
-=
count
+
1
;
if
(
pixptr
+
count
*
px_inc
>
pixptr_end
)
break
;
if
(
dp
+
count
>
buf
+
buf_size
)
return
-
1
;
while
(
count
--
)
{
*
pixptr
=
*
dp
++
;
pixptr
+=
px_inc
;
}
}
else
{
count
=
257
-
count
;
if
(
pixptr
+
count
*
px_inc
>
pixptr_end
)
break
;
while
(
count
--
)
{
*
pixptr
=
*
dp
;
pixptr
+=
px_inc
;
}
dp
++
;
dlen
-=
2
;
}
}
}
if
(
avctx
->
bits_per_coded_sample
<=
8
)
{
const
uint8_t
*
pal
=
av_packet_get_side_data
(
avpkt
,
AV_PKT_DATA_PALETTE
,
NULL
);
if
(
pal
)
{
c
->
pic
.
palette_has_changed
=
1
;
memcpy
(
c
->
pal
,
pal
,
AVPALETTE_SIZE
);
}
memcpy
(
c
->
pic
.
data
[
1
],
c
->
pal
,
AVPALETTE_SIZE
);
}
if
(
avctx
->
bits_per_coded_sample
<=
8
)
{
const
uint8_t
*
pal
=
av_packet_get_side_data
(
avpkt
,
AV_PKT_DATA_PALETTE
,
NULL
);
if
(
pal
)
{
c
->
pic
.
palette_has_changed
=
1
;
memcpy
(
c
->
pal
,
pal
,
AVPALETTE_SIZE
);
}
*
data_size
=
sizeof
(
AVFrame
);
*
(
AVFrame
*
)
data
=
c
->
pic
;
memcpy
(
c
->
pic
.
data
[
1
],
c
->
pal
,
AVPALETTE_SIZE
);
}
*
data_size
=
sizeof
(
AVFrame
);
*
(
AVFrame
*
)
data
=
c
->
pic
;
/* always report that the buffer was completely consumed */
return
buf_size
;
/* always report that the buffer was completely consumed */
return
buf_size
;
}
...
...
@@ -158,46 +161,46 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *data_size, AVPac
*/
static
av_cold
int
decode_init
(
AVCodecContext
*
avctx
)
{
EightBpsContext
*
const
c
=
avctx
->
priv_data
;
c
->
avctx
=
avctx
;
c
->
pic
.
data
[
0
]
=
NULL
;
switch
(
avctx
->
bits_per_coded_sample
)
{
case
8
:
avctx
->
pix_fmt
=
PIX_FMT_PAL8
;
c
->
planes
=
1
;
c
->
planemap
[
0
]
=
0
;
// 1st plane is palette indexes
break
;
case
24
:
avctx
->
pix_fmt
=
avctx
->
get_format
(
avctx
,
pixfmt_rgb24
);
c
->
planes
=
3
;
c
->
planemap
[
0
]
=
2
;
// 1st plane is red
c
->
planemap
[
1
]
=
1
;
// 2nd plane is green
c
->
planemap
[
2
]
=
0
;
// 3rd plane is blue
break
;
case
32
:
avctx
->
pix_fmt
=
PIX_FMT_RGB32
;
c
->
planes
=
4
;
EightBpsContext
*
const
c
=
avctx
->
priv_data
;
c
->
avctx
=
avctx
;
c
->
pic
.
data
[
0
]
=
NULL
;
switch
(
avctx
->
bits_per_coded_sample
)
{
case
8
:
avctx
->
pix_fmt
=
PIX_FMT_PAL8
;
c
->
planes
=
1
;
c
->
planemap
[
0
]
=
0
;
// 1st plane is palette indexes
break
;
case
24
:
avctx
->
pix_fmt
=
avctx
->
get_format
(
avctx
,
pixfmt_rgb24
);
c
->
planes
=
3
;
c
->
planemap
[
0
]
=
2
;
// 1st plane is red
c
->
planemap
[
1
]
=
1
;
// 2nd plane is green
c
->
planemap
[
2
]
=
0
;
// 3rd plane is blue
break
;
case
32
:
avctx
->
pix_fmt
=
PIX_FMT_RGB32
;
c
->
planes
=
4
;
#if HAVE_BIGENDIAN
c
->
planemap
[
0
]
=
1
;
// 1st plane is red
c
->
planemap
[
1
]
=
2
;
// 2nd plane is green
c
->
planemap
[
2
]
=
3
;
// 3rd plane is blue
c
->
planemap
[
3
]
=
0
;
// 4th plane is alpha???
c
->
planemap
[
0
]
=
1
;
// 1st plane is red
c
->
planemap
[
1
]
=
2
;
// 2nd plane is green
c
->
planemap
[
2
]
=
3
;
// 3rd plane is blue
c
->
planemap
[
3
]
=
0
;
// 4th plane is alpha???
#else
c
->
planemap
[
0
]
=
2
;
// 1st plane is red
c
->
planemap
[
1
]
=
1
;
// 2nd plane is green
c
->
planemap
[
2
]
=
0
;
// 3rd plane is blue
c
->
planemap
[
3
]
=
3
;
// 4th plane is alpha???
c
->
planemap
[
0
]
=
2
;
// 1st plane is red
c
->
planemap
[
1
]
=
1
;
// 2nd plane is green
c
->
planemap
[
2
]
=
0
;
// 3rd plane is blue
c
->
planemap
[
3
]
=
3
;
// 4th plane is alpha???
#endif
break
;
default:
av_log
(
avctx
,
AV_LOG_ERROR
,
"Error: Unsupported color depth: %u.
\n
"
,
avctx
->
bits_per_coded_sample
);
return
-
1
;
}
return
0
;
break
;
default:
av_log
(
avctx
,
AV_LOG_ERROR
,
"Error: Unsupported color depth: %u.
\n
"
,
avctx
->
bits_per_coded_sample
);
return
-
1
;
}
return
0
;
}
...
...
@@ -210,12 +213,12 @@ static av_cold int decode_init(AVCodecContext *avctx)
*/
static
av_cold
int
decode_end
(
AVCodecContext
*
avctx
)
{
EightBpsContext
*
const
c
=
avctx
->
priv_data
;
EightBpsContext
*
const
c
=
avctx
->
priv_data
;
if
(
c
->
pic
.
data
[
0
])
avctx
->
release_buffer
(
avctx
,
&
c
->
pic
);
if
(
c
->
pic
.
data
[
0
])
avctx
->
release_buffer
(
avctx
,
&
c
->
pic
);
return
0
;
return
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