Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
F
ffmpeg
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
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
ffmpeg
Commits
eeb6849c
Commit
eeb6849c
authored
Jun 27, 2016
by
Vittorio Giovara
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
rle: K&R formatting cosmetics
parent
326d9116
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
25 additions
and
18 deletions
+25
-18
rle.c
libavcodec/rle.c
+20
-14
rle.h
libavcodec/rle.h
+5
-4
No files found.
libavcodec/rle.c
View file @
eeb6849c
...
@@ -18,26 +18,29 @@
...
@@ -18,26 +18,29 @@
* License along with Libav; if not, write to the Free Software
* License along with Libav; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
*/
#include "libavutil/common.h"
#include "avcodec.h"
#include "avcodec.h"
#include "rle.h"
#include "rle.h"
#include "libavutil/common.h"
int
ff_rle_count_pixels
(
const
uint8_t
*
start
,
int
len
,
int
bpp
,
int
same
)
int
ff_rle_count_pixels
(
const
uint8_t
*
start
,
int
len
,
int
bpp
,
int
same
)
{
{
const
uint8_t
*
pos
;
const
uint8_t
*
pos
;
int
count
=
1
;
int
count
=
1
;
for
(
pos
=
start
+
bpp
;
count
<
FFMIN
(
127
,
len
);
pos
+=
bpp
,
count
++
)
{
for
(
pos
=
start
+
bpp
;
count
<
FFMIN
(
127
,
len
);
pos
+=
bpp
,
count
++
)
{
if
(
same
!=
!
memcmp
(
pos
-
bpp
,
pos
,
bpp
))
{
if
(
same
!=
!
memcmp
(
pos
-
bpp
,
pos
,
bpp
))
{
if
(
!
same
)
{
if
(
!
same
)
{
/* if bpp == 1, then 0 1 1 0 is more efficiently encoded as a single
/* if bpp == 1, then 0 1 1 0 is more efficiently encoded as a
* raw block of pixels. for larger bpp, RLE is as good or better */
* single raw block of pixels. For larger bpp, RLE is as good
if
(
bpp
==
1
&&
count
+
1
<
FFMIN
(
127
,
len
)
&&
*
pos
!=
*
(
pos
+
1
))
* or better */
if
(
bpp
==
1
&&
count
+
1
<
FFMIN
(
127
,
len
)
&&
*
pos
!=
*
(
pos
+
1
))
continue
;
continue
;
/* if RLE can encode the next block better than as a raw block,
/* if RLE can encode the next block better than as a raw block,
* back up and leave _all_ the identical pixels for RLE */
* back up and leave _all_ the identical pixels for RLE */
count
--
;
count
--
;
}
}
break
;
break
;
}
}
...
@@ -46,25 +49,28 @@ int ff_rle_count_pixels(const uint8_t *start, int len, int bpp, int same)
...
@@ -46,25 +49,28 @@ int ff_rle_count_pixels(const uint8_t *start, int len, int bpp, int same)
return
count
;
return
count
;
}
}
int
ff_rle_encode
(
uint8_t
*
outbuf
,
int
out_size
,
const
uint8_t
*
ptr
,
int
bpp
,
int
w
,
int
ff_rle_encode
(
uint8_t
*
outbuf
,
int
out_size
,
const
uint8_t
*
ptr
,
int
bpp
,
int
add_rep
,
int
xor_rep
,
int
add_raw
,
int
xor_raw
)
int
w
,
int
add_rep
,
int
xor_rep
,
int
add_raw
,
int
xor_raw
)
{
{
int
count
,
x
;
int
count
,
x
;
uint8_t
*
out
=
outbuf
;
uint8_t
*
out
=
outbuf
;
for
(
x
=
0
;
x
<
w
;
x
+=
count
)
{
for
(
x
=
0
;
x
<
w
;
x
+=
count
)
{
/* see if we can encode the next set of pixels with RLE */
/* see if we can encode the next set of pixels with RLE */
if
((
count
=
ff_rle_count_pixels
(
ptr
,
w
-
x
,
bpp
,
1
))
>
1
)
{
if
((
count
=
ff_rle_count_pixels
(
ptr
,
w
-
x
,
bpp
,
1
))
>
1
)
{
if
(
out
+
bpp
+
1
>
outbuf
+
out_size
)
return
-
1
;
if
(
out
+
bpp
+
1
>
outbuf
+
out_size
)
return
-
1
;
*
out
++
=
(
count
^
xor_rep
)
+
add_rep
;
*
out
++
=
(
count
^
xor_rep
)
+
add_rep
;
memcpy
(
out
,
ptr
,
bpp
);
memcpy
(
out
,
ptr
,
bpp
);
out
+=
bpp
;
out
+=
bpp
;
}
else
{
}
else
{
/* fall back on uncompressed */
/* fall back on uncompressed */
count
=
ff_rle_count_pixels
(
ptr
,
w
-
x
,
bpp
,
0
);
count
=
ff_rle_count_pixels
(
ptr
,
w
-
x
,
bpp
,
0
);
if
(
out
+
bpp
*
count
>=
outbuf
+
out_size
)
return
-
1
;
if
(
out
+
bpp
*
count
>=
outbuf
+
out_size
)
*
out
++
=
(
count
^
xor_raw
)
+
add_raw
;
return
-
1
;
*
out
++
=
(
count
^
xor_raw
)
+
add_raw
;
memcpy
(
out
,
ptr
,
bpp
*
count
);
memcpy
(
out
,
ptr
,
bpp
*
count
);
out
+=
bpp
*
count
;
out
+=
bpp
*
count
;
}
}
...
...
libavcodec/rle.h
View file @
eeb6849c
...
@@ -35,8 +35,9 @@
...
@@ -35,8 +35,9 @@
int
ff_rle_count_pixels
(
const
uint8_t
*
start
,
int
len
,
int
bpp
,
int
same
);
int
ff_rle_count_pixels
(
const
uint8_t
*
start
,
int
len
,
int
bpp
,
int
same
);
/**
/**
* RLE compress the row, with maximum size of out_size. Value before repeated bytes is (count ^ xor_rep) + add_rep.
* RLE compress the row, with maximum size of out_size.
* Value before raw bytes is (count ^ xor_raw) + add_raw.
* Value before repeated bytes is (count ^ xor_rep) + add_rep.
* Value before raw bytes is (count ^ xor_raw) + add_raw.
* @param outbuf Output buffer
* @param outbuf Output buffer
* @param out_size Maximum output size
* @param out_size Maximum output size
* @param inbuf Input buffer
* @param inbuf Input buffer
...
@@ -44,7 +45,7 @@ int ff_rle_count_pixels(const uint8_t *start, int len, int bpp, int same);
...
@@ -44,7 +45,7 @@ int ff_rle_count_pixels(const uint8_t *start, int len, int bpp, int same);
* @param w Image width
* @param w Image width
* @return Size of output in bytes, or -1 if larger than out_size
* @return Size of output in bytes, or -1 if larger than out_size
*/
*/
int
ff_rle_encode
(
uint8_t
*
outbuf
,
int
out_size
,
const
uint8_t
*
inbuf
,
int
bpp
,
int
w
,
int
ff_rle_encode
(
uint8_t
*
outbuf
,
int
out_size
,
const
uint8_t
*
inbuf
,
int
bpp
,
int
add_rep
,
int
xor_rep
,
int
add_raw
,
int
xor_raw
);
int
w
,
int
add_rep
,
int
xor_rep
,
int
add_raw
,
int
xor_raw
);
#endif
/* AVCODEC_RLE_H */
#endif
/* AVCODEC_RLE_H */
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