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
2c993e8b
Commit
2c993e8b
authored
Oct 22, 2013
by
Vittorio Giovara
Committed by
Diego Biurrun
Oct 23, 2013
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
golomb: K&R formatting cosmetics
Signed-off-by:
Diego Biurrun
<
diego@biurrun.de
>
parent
1ce3ec24
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
178 additions
and
136 deletions
+178
-136
golomb.h
libavcodec/golomb.h
+178
-136
No files found.
libavcodec/golomb.h
View file @
2c993e8b
...
...
@@ -31,6 +31,7 @@
#define AVCODEC_GOLOMB_H
#include <stdint.h>
#include "get_bits.h"
#include "put_bits.h"
...
...
@@ -46,27 +47,27 @@ extern const uint8_t ff_interleaved_ue_golomb_vlc_code[256];
extern
const
int8_t
ff_interleaved_se_golomb_vlc_code
[
256
];
extern
const
uint8_t
ff_interleaved_dirac_golomb_vlc_code
[
256
];
/**
/**
* read unsigned exp golomb code.
*/
static
inline
int
get_ue_golomb
(
GetBitContext
*
gb
){
static
inline
int
get_ue_golomb
(
GetBitContext
*
gb
)
{
unsigned
int
buf
;
int
log
;
OPEN_READER
(
re
,
gb
);
UPDATE_CACHE
(
re
,
gb
);
buf
=
GET_CACHE
(
re
,
gb
);
buf
=
GET_CACHE
(
re
,
gb
);
if
(
buf
>=
(
1
<<
27
))
{
if
(
buf
>=
(
1
<<
27
))
{
buf
>>=
32
-
9
;
LAST_SKIP_BITS
(
re
,
gb
,
ff_golomb_vlc_len
[
buf
]);
CLOSE_READER
(
re
,
gb
);
return
ff_ue_golomb_vlc_code
[
buf
];
}
else
{
log
=
2
*
av_log2
(
buf
)
-
31
;
buf
>>=
log
;
}
else
{
log
=
2
*
av_log2
(
buf
)
-
31
;
buf
>>=
log
;
buf
--
;
LAST_SKIP_BITS
(
re
,
gb
,
32
-
log
);
CLOSE_READER
(
re
,
gb
);
...
...
@@ -89,16 +90,17 @@ static inline unsigned get_ue_golomb_long(GetBitContext *gb)
return
get_bits_long
(
gb
,
log
+
1
)
-
1
;
}
/**
/**
* read unsigned exp golomb code, constraint to a max of 31.
* the return value is undefined if the stored value exceeds 31.
*/
static
inline
int
get_ue_golomb_31
(
GetBitContext
*
gb
){
static
inline
int
get_ue_golomb_31
(
GetBitContext
*
gb
)
{
unsigned
int
buf
;
OPEN_READER
(
re
,
gb
);
UPDATE_CACHE
(
re
,
gb
);
buf
=
GET_CACHE
(
re
,
gb
);
buf
=
GET_CACHE
(
re
,
gb
);
buf
>>=
32
-
9
;
LAST_SKIP_BITS
(
re
,
gb
,
ff_golomb_vlc_len
[
buf
]);
...
...
@@ -113,24 +115,25 @@ static inline unsigned svq3_get_ue_golomb(GetBitContext *gb)
OPEN_READER
(
re
,
gb
);
UPDATE_CACHE
(
re
,
gb
);
buf
=
GET_CACHE
(
re
,
gb
);
buf
=
GET_CACHE
(
re
,
gb
);
if
(
buf
&
0xAA800000
)
{
if
(
buf
&
0xAA800000
)
{
buf
>>=
32
-
8
;
LAST_SKIP_BITS
(
re
,
gb
,
ff_interleaved_golomb_vlc_len
[
buf
]);
CLOSE_READER
(
re
,
gb
);
return
ff_interleaved_ue_golomb_vlc_code
[
buf
];
}
else
{
}
else
{
unsigned
ret
=
1
;
do
{
buf
>>=
32
-
8
;
LAST_SKIP_BITS
(
re
,
gb
,
FFMIN
(
ff_interleaved_golomb_vlc_len
[
buf
],
8
));
LAST_SKIP_BITS
(
re
,
gb
,
FFMIN
(
ff_interleaved_golomb_vlc_len
[
buf
],
8
));
if
(
ff_interleaved_golomb_vlc_len
[
buf
]
!=
9
){
if
(
ff_interleaved_golomb_vlc_len
[
buf
]
!=
9
)
{
ret
<<=
(
ff_interleaved_golomb_vlc_len
[
buf
]
-
1
)
>>
1
;
ret
|=
ff_interleaved_dirac_golomb_vlc_code
[
buf
];
ret
|=
ff_interleaved_dirac_golomb_vlc_code
[
buf
];
break
;
}
ret
=
(
ret
<<
4
)
|
ff_interleaved_dirac_golomb_vlc_code
[
buf
];
...
...
@@ -146,90 +149,100 @@ static inline unsigned svq3_get_ue_golomb(GetBitContext *gb)
/**
* read unsigned truncated exp golomb code.
*/
static
inline
int
get_te0_golomb
(
GetBitContext
*
gb
,
int
range
){
static
inline
int
get_te0_golomb
(
GetBitContext
*
gb
,
int
range
)
{
assert
(
range
>=
1
);
if
(
range
==
1
)
return
0
;
else
if
(
range
==
2
)
return
get_bits1
(
gb
)
^
1
;
else
return
get_ue_golomb
(
gb
);
if
(
range
==
1
)
return
0
;
else
if
(
range
==
2
)
return
get_bits1
(
gb
)
^
1
;
else
return
get_ue_golomb
(
gb
);
}
/**
* read unsigned truncated exp golomb code.
*/
static
inline
int
get_te_golomb
(
GetBitContext
*
gb
,
int
range
){
static
inline
int
get_te_golomb
(
GetBitContext
*
gb
,
int
range
)
{
assert
(
range
>=
1
);
if
(
range
==
2
)
return
get_bits1
(
gb
)
^
1
;
else
return
get_ue_golomb
(
gb
);
if
(
range
==
2
)
return
get_bits1
(
gb
)
^
1
;
else
return
get_ue_golomb
(
gb
);
}
/**
* read signed exp golomb code.
*/
static
inline
int
get_se_golomb
(
GetBitContext
*
gb
){
static
inline
int
get_se_golomb
(
GetBitContext
*
gb
)
{
unsigned
int
buf
;
int
log
;
OPEN_READER
(
re
,
gb
);
UPDATE_CACHE
(
re
,
gb
);
buf
=
GET_CACHE
(
re
,
gb
);
buf
=
GET_CACHE
(
re
,
gb
);
if
(
buf
>=
(
1
<<
27
))
{
if
(
buf
>=
(
1
<<
27
))
{
buf
>>=
32
-
9
;
LAST_SKIP_BITS
(
re
,
gb
,
ff_golomb_vlc_len
[
buf
]);
CLOSE_READER
(
re
,
gb
);
return
ff_se_golomb_vlc_code
[
buf
];
}
else
{
log
=
2
*
av_log2
(
buf
)
-
31
;
buf
>>=
log
;
}
else
{
log
=
2
*
av_log2
(
buf
)
-
31
;
buf
>>=
log
;
LAST_SKIP_BITS
(
re
,
gb
,
32
-
log
);
CLOSE_READER
(
re
,
gb
);
if
(
buf
&
1
)
buf
=
-
(
buf
>>
1
);
else
buf
=
(
buf
>>
1
);
if
(
buf
&
1
)
buf
=
-
(
buf
>>
1
);
else
buf
=
(
buf
>>
1
);
return
buf
;
}
}
static
inline
int
svq3_get_se_golomb
(
GetBitContext
*
gb
){
static
inline
int
svq3_get_se_golomb
(
GetBitContext
*
gb
)
{
unsigned
int
buf
;
int
log
;
OPEN_READER
(
re
,
gb
);
UPDATE_CACHE
(
re
,
gb
);
buf
=
GET_CACHE
(
re
,
gb
);
buf
=
GET_CACHE
(
re
,
gb
);
if
(
buf
&
0xAA800000
)
{
if
(
buf
&
0xAA800000
)
{
buf
>>=
32
-
8
;
LAST_SKIP_BITS
(
re
,
gb
,
ff_interleaved_golomb_vlc_len
[
buf
]);
CLOSE_READER
(
re
,
gb
);
return
ff_interleaved_se_golomb_vlc_code
[
buf
];
}
else
{
}
else
{
LAST_SKIP_BITS
(
re
,
gb
,
8
);
UPDATE_CACHE
(
re
,
gb
);
buf
|=
1
|
(
GET_CACHE
(
re
,
gb
)
>>
8
);
if
((
buf
&
0xAAAAAAAA
)
==
0
)
if
((
buf
&
0xAAAAAAAA
)
==
0
)
return
INVALID_VLC
;
for
(
log
=
31
;
(
buf
&
0x80000000
)
==
0
;
log
--
){
for
(
log
=
31
;
(
buf
&
0x80000000
)
==
0
;
log
--
)
buf
=
(
buf
<<
2
)
-
((
buf
<<
log
)
>>
(
log
-
1
))
+
(
buf
>>
30
);
}
LAST_SKIP_BITS
(
re
,
gb
,
63
-
2
*
log
-
8
);
LAST_SKIP_BITS
(
re
,
gb
,
63
-
2
*
log
-
8
);
CLOSE_READER
(
re
,
gb
);
return
(
signed
)
(((((
buf
<<
log
)
>>
log
)
-
1
)
^
-
(
buf
&
0x1
))
+
1
)
>>
1
;
}
}
static
inline
int
dirac_get_se_golomb
(
GetBitContext
*
gb
){
static
inline
int
dirac_get_se_golomb
(
GetBitContext
*
gb
)
{
uint32_t
buf
;
uint32_t
ret
;
...
...
@@ -250,24 +263,26 @@ static inline int dirac_get_se_golomb(GetBitContext *gb){
/**
* read unsigned golomb rice code (ffv1).
*/
static
inline
int
get_ur_golomb
(
GetBitContext
*
gb
,
int
k
,
int
limit
,
int
esc_len
){
static
inline
int
get_ur_golomb
(
GetBitContext
*
gb
,
int
k
,
int
limit
,
int
esc_len
)
{
unsigned
int
buf
;
int
log
;
OPEN_READER
(
re
,
gb
);
UPDATE_CACHE
(
re
,
gb
);
buf
=
GET_CACHE
(
re
,
gb
);
buf
=
GET_CACHE
(
re
,
gb
);
log
=
av_log2
(
buf
);
log
=
av_log2
(
buf
);
if
(
log
>
31
-
limit
)
{
if
(
log
>
31
-
limit
)
{
buf
>>=
log
-
k
;
buf
+=
(
30
-
log
)
<<
k
;
buf
+=
(
30
-
log
)
<<
k
;
LAST_SKIP_BITS
(
re
,
gb
,
32
+
k
-
log
);
CLOSE_READER
(
re
,
gb
);
return
buf
;
}
else
{
}
else
{
LAST_SKIP_BITS
(
re
,
gb
,
limit
);
UPDATE_CACHE
(
re
,
gb
);
...
...
@@ -283,24 +298,27 @@ static inline int get_ur_golomb(GetBitContext *gb, int k, int limit, int esc_len
/**
* read unsigned golomb rice code (jpegls).
*/
static
inline
int
get_ur_golomb_jpegls
(
GetBitContext
*
gb
,
int
k
,
int
limit
,
int
esc_len
){
static
inline
int
get_ur_golomb_jpegls
(
GetBitContext
*
gb
,
int
k
,
int
limit
,
int
esc_len
)
{
unsigned
int
buf
;
int
log
;
OPEN_READER
(
re
,
gb
);
UPDATE_CACHE
(
re
,
gb
);
buf
=
GET_CACHE
(
re
,
gb
);
buf
=
GET_CACHE
(
re
,
gb
);
log
=
av_log2
(
buf
);
log
=
av_log2
(
buf
);
if
(
log
-
k
>=
32
-
MIN_CACHE_BITS
+
(
MIN_CACHE_BITS
==
32
)
&&
32
-
log
<
limit
){
if
(
log
-
k
>=
32
-
MIN_CACHE_BITS
+
(
MIN_CACHE_BITS
==
32
)
&&
32
-
log
<
limit
)
{
buf
>>=
log
-
k
;
buf
+=
(
30
-
log
)
<<
k
;
buf
+=
(
30
-
log
)
<<
k
;
LAST_SKIP_BITS
(
re
,
gb
,
32
+
k
-
log
);
CLOSE_READER
(
re
,
gb
);
return
buf
;
}
else
{
}
else
{
int
i
;
for
(
i
=
0
;
i
<
limit
&&
SHOW_UBITS
(
re
,
gb
,
1
)
==
0
&&
HAVE_BITS_REMAINING
(
re
,
gb
);
i
++
)
{
LAST_SKIP_BITS
(
re
,
gb
,
1
);
...
...
@@ -308,23 +326,23 @@ static inline int get_ur_golomb_jpegls(GetBitContext *gb, int k, int limit, int
}
SKIP_BITS
(
re
,
gb
,
1
);
if
(
i
<
limit
-
1
)
{
if
(
k
)
{
if
(
i
<
limit
-
1
)
{
if
(
k
)
{
buf
=
SHOW_UBITS
(
re
,
gb
,
k
);
LAST_SKIP_BITS
(
re
,
gb
,
k
);
}
else
{
buf
=
0
;
}
else
{
buf
=
0
;
}
CLOSE_READER
(
re
,
gb
);
return
buf
+
(
i
<<
k
);
}
else
if
(
i
==
limit
-
1
)
{
return
buf
+
(
i
<<
k
);
}
else
if
(
i
==
limit
-
1
)
{
buf
=
SHOW_UBITS
(
re
,
gb
,
esc_len
);
LAST_SKIP_BITS
(
re
,
gb
,
esc_len
);
CLOSE_READER
(
re
,
gb
);
return
buf
+
1
;
}
else
}
else
return
-
1
;
}
}
...
...
@@ -332,12 +350,16 @@ static inline int get_ur_golomb_jpegls(GetBitContext *gb, int k, int limit, int
/**
* read signed golomb rice code (ffv1).
*/
static
inline
int
get_sr_golomb
(
GetBitContext
*
gb
,
int
k
,
int
limit
,
int
esc_len
){
int
v
=
get_ur_golomb
(
gb
,
k
,
limit
,
esc_len
);
static
inline
int
get_sr_golomb
(
GetBitContext
*
gb
,
int
k
,
int
limit
,
int
esc_len
)
{
int
v
=
get_ur_golomb
(
gb
,
k
,
limit
,
esc_len
);
v
++
;
if
(
v
&
1
)
return
v
>>
1
;
else
return
-
(
v
>>
1
);
if
(
v
&
1
)
return
v
>>
1
;
else
return
-
(
v
>>
1
);
// return (v>>1) ^ -(v&1);
}
...
...
@@ -345,22 +367,25 @@ static inline int get_sr_golomb(GetBitContext *gb, int k, int limit, int esc_len
/**
* read signed golomb rice code (flac).
*/
static
inline
int
get_sr_golomb_flac
(
GetBitContext
*
gb
,
int
k
,
int
limit
,
int
esc_len
){
int
v
=
get_ur_golomb_jpegls
(
gb
,
k
,
limit
,
esc_len
);
return
(
v
>>
1
)
^
-
(
v
&
1
);
static
inline
int
get_sr_golomb_flac
(
GetBitContext
*
gb
,
int
k
,
int
limit
,
int
esc_len
)
{
int
v
=
get_ur_golomb_jpegls
(
gb
,
k
,
limit
,
esc_len
);
return
(
v
>>
1
)
^
-
(
v
&
1
);
}
/**
* read unsigned golomb rice code (shorten).
*/
static
inline
unsigned
int
get_ur_golomb_shorten
(
GetBitContext
*
gb
,
int
k
){
return
get_ur_golomb_jpegls
(
gb
,
k
,
INT_MAX
,
0
);
static
inline
unsigned
int
get_ur_golomb_shorten
(
GetBitContext
*
gb
,
int
k
)
{
return
get_ur_golomb_jpegls
(
gb
,
k
,
INT_MAX
,
0
);
}
/**
* read signed golomb rice code (shorten).
*/
static
inline
int
get_sr_golomb_shorten
(
GetBitContext
*
gb
,
int
k
)
static
inline
int
get_sr_golomb_shorten
(
GetBitContext
*
gb
,
int
k
)
{
int
uvar
=
get_ur_golomb_jpegls
(
gb
,
k
+
1
,
INT_MAX
,
0
);
if
(
uvar
&
1
)
...
...
@@ -369,22 +394,21 @@ static inline int get_sr_golomb_shorten(GetBitContext* gb, int k)
return
uvar
>>
1
;
}
#ifdef TRACE
static
inline
int
get_ue
(
GetBitContext
*
s
,
const
char
*
file
,
const
char
*
func
,
int
line
)
{
int
show
=
show_bits
(
s
,
24
);
int
pos
=
get_bits_count
(
s
);
int
i
=
get_ue_golomb
(
s
);
int
len
=
get_bits_count
(
s
)
-
pos
;
int
bits
=
show
>>
(
24
-
len
);
int
show
=
show_bits
(
s
,
24
);
int
pos
=
get_bits_count
(
s
);
int
i
=
get_ue_golomb
(
s
);
int
len
=
get_bits_count
(
s
)
-
pos
;
int
bits
=
show
>>
(
24
-
len
);
print_bin
(
bits
,
len
);
av_log
(
NULL
,
AV_LOG_DEBUG
,
"%5d %2d %3d ue @%5d in %s %s:%d
\n
"
,
bits
,
len
,
i
,
pos
,
file
,
func
,
line
);
av_log
(
NULL
,
AV_LOG_DEBUG
,
"%5d %2d %3d ue @%5d in %s %s:%d
\n
"
,
bits
,
len
,
i
,
pos
,
file
,
func
,
line
);
return
i
;
}
...
...
@@ -392,87 +416,98 @@ static inline int get_ue(GetBitContext *s, const char *file, const char *func,
static
inline
int
get_se
(
GetBitContext
*
s
,
const
char
*
file
,
const
char
*
func
,
int
line
)
{
int
show
=
show_bits
(
s
,
24
);
int
pos
=
get_bits_count
(
s
);
int
i
=
get_se_golomb
(
s
);
int
len
=
get_bits_count
(
s
)
-
pos
;
int
bits
=
show
>>
(
24
-
len
);
int
show
=
show_bits
(
s
,
24
);
int
pos
=
get_bits_count
(
s
);
int
i
=
get_se_golomb
(
s
);
int
len
=
get_bits_count
(
s
)
-
pos
;
int
bits
=
show
>>
(
24
-
len
);
print_bin
(
bits
,
len
);
av_log
(
NULL
,
AV_LOG_DEBUG
,
"%5d %2d %3d se @%5d in %s %s:%d
\n
"
,
bits
,
len
,
i
,
pos
,
file
,
func
,
line
);
av_log
(
NULL
,
AV_LOG_DEBUG
,
"%5d %2d %3d se @%5d in %s %s:%d
\n
"
,
bits
,
len
,
i
,
pos
,
file
,
func
,
line
);
return
i
;
}
static
inline
int
get_te
(
GetBitContext
*
s
,
int
r
,
char
*
file
,
const
char
*
func
,
int
line
){
int
show
=
show_bits
(
s
,
24
);
int
pos
=
get_bits_count
(
s
);
int
i
=
get_te0_golomb
(
s
,
r
);
int
len
=
get_bits_count
(
s
)
-
pos
;
int
bits
=
show
>>
(
24
-
len
);
static
inline
int
get_te
(
GetBitContext
*
s
,
int
r
,
char
*
file
,
const
char
*
func
,
int
line
)
{
int
show
=
show_bits
(
s
,
24
);
int
pos
=
get_bits_count
(
s
);
int
i
=
get_te0_golomb
(
s
,
r
);
int
len
=
get_bits_count
(
s
)
-
pos
;
int
bits
=
show
>>
(
24
-
len
);
print_bin
(
bits
,
len
);
av_log
(
NULL
,
AV_LOG_DEBUG
,
"%5d %2d %3d te @%5d in %s %s:%d
\n
"
,
bits
,
len
,
i
,
pos
,
file
,
func
,
line
);
av_log
(
NULL
,
AV_LOG_DEBUG
,
"%5d %2d %3d te @%5d in %s %s:%d
\n
"
,
bits
,
len
,
i
,
pos
,
file
,
func
,
line
);
return
i
;
}
#define get_ue_golomb(a) get_ue(a, __FILE__, __PRETTY_FUNCTION__, __LINE__)
#define get_se_golomb(a) get_se(a, __FILE__, __PRETTY_FUNCTION__, __LINE__)
#define get_te_golomb(a, r) get_te(a, r, __FILE__, __PRETTY_FUNCTION__, __LINE__)
#define get_te_golomb(a, r)
get_te(a, r, __FILE__, __PRETTY_FUNCTION__, __LINE__)
#define get_te0_golomb(a, r) get_te(a, r, __FILE__, __PRETTY_FUNCTION__, __LINE__)
#endif
#endif
/* TRACE */
/**
* write unsigned exp golomb code.
*/
static
inline
void
set_ue_golomb
(
PutBitContext
*
pb
,
int
i
){
static
inline
void
set_ue_golomb
(
PutBitContext
*
pb
,
int
i
)
{
int
e
;
assert
(
i
>=
0
);
assert
(
i
>=
0
);
#if 0
if
(i=0)
{
if
(i = 0)
{
put_bits(pb, 1, 1);
return;
}
#endif
if
(
i
<
256
)
put_bits
(
pb
,
ff_ue_golomb_len
[
i
],
i
+
1
);
else
{
e
=
av_log2
(
i
+
1
);
put_bits
(
pb
,
2
*
e
+
1
,
i
+
1
);
if
(
i
<
256
)
put_bits
(
pb
,
ff_ue_golomb_len
[
i
],
i
+
1
);
else
{
e
=
av_log2
(
i
+
1
);
put_bits
(
pb
,
2
*
e
+
1
,
i
+
1
);
}
}
/**
* write truncated unsigned exp golomb code.
*/
static
inline
void
set_te_golomb
(
PutBitContext
*
pb
,
int
i
,
int
range
){
static
inline
void
set_te_golomb
(
PutBitContext
*
pb
,
int
i
,
int
range
)
{
assert
(
range
>=
1
);
assert
(
i
<=
range
);
assert
(
i
<=
range
);
if
(
range
==
2
)
put_bits
(
pb
,
1
,
i
^
1
);
else
set_ue_golomb
(
pb
,
i
);
if
(
range
==
2
)
put_bits
(
pb
,
1
,
i
^
1
);
else
set_ue_golomb
(
pb
,
i
);
}
/**
* write signed exp golomb code. 16 bits at most.
*/
static
inline
void
set_se_golomb
(
PutBitContext
*
pb
,
int
i
){
static
inline
void
set_se_golomb
(
PutBitContext
*
pb
,
int
i
)
{
#if 0
if(i<=0) i= -2*i;
else i= 2*i-1;
if (i <= 0)
i = -2 * i;
else
i = 2 * i - 1;
#elif
1
i
=
2
*
i
-
1
;
if
(
i
<
0
)
i
^=
-
1
;
//FIXME check if gcc does the right thing
i
=
2
*
i
-
1
;
if
(
i
<
0
)
i
^=
-
1
;
//FIXME check if gcc does the right thing
#else
i
=
2
*
i
-
1
;
i
^=
(
i
>>
31
);
i
=
2
*
i
-
1
;
i
^=
(
i
>>
31
);
#endif
set_ue_golomb
(
pb
,
i
);
}
...
...
@@ -480,42 +515,45 @@ static inline void set_se_golomb(PutBitContext *pb, int i){
/**
* write unsigned golomb rice code (ffv1).
*/
static
inline
void
set_ur_golomb
(
PutBitContext
*
pb
,
int
i
,
int
k
,
int
limit
,
int
esc_len
){
static
inline
void
set_ur_golomb
(
PutBitContext
*
pb
,
int
i
,
int
k
,
int
limit
,
int
esc_len
)
{
int
e
;
assert
(
i
>=
0
);
assert
(
i
>=
0
);
e
=
i
>>
k
;
if
(
e
<
limit
){
put_bits
(
pb
,
e
+
k
+
1
,
(
1
<<
k
)
+
(
i
&
((
1
<<
k
)
-
1
)));
}
else
{
e
=
i
>>
k
;
if
(
e
<
limit
)
put_bits
(
pb
,
e
+
k
+
1
,
(
1
<<
k
)
+
(
i
&
((
1
<<
k
)
-
1
)));
else
put_bits
(
pb
,
limit
+
esc_len
,
i
-
limit
+
1
);
}
}
/**
* write unsigned golomb rice code (jpegls).
*/
static
inline
void
set_ur_golomb_jpegls
(
PutBitContext
*
pb
,
int
i
,
int
k
,
int
limit
,
int
esc_len
){
static
inline
void
set_ur_golomb_jpegls
(
PutBitContext
*
pb
,
int
i
,
int
k
,
int
limit
,
int
esc_len
)
{
int
e
;
assert
(
i
>=
0
);
assert
(
i
>=
0
);
e
=
(
i
>>
k
)
+
1
;
if
(
e
<
limit
)
{
while
(
e
>
31
)
{
e
=
(
i
>>
k
)
+
1
;
if
(
e
<
limit
)
{
while
(
e
>
31
)
{
put_bits
(
pb
,
31
,
0
);
e
-=
31
;
}
put_bits
(
pb
,
e
,
1
);
if
(
k
)
if
(
k
)
put_sbits
(
pb
,
k
,
i
);
}
else
{
while
(
limit
>
31
)
{
}
else
{
while
(
limit
>
31
)
{
put_bits
(
pb
,
31
,
0
);
limit
-=
31
;
}
put_bits
(
pb
,
limit
,
1
);
put_bits
(
pb
,
limit
,
1
);
put_bits
(
pb
,
esc_len
,
i
-
1
);
}
}
...
...
@@ -523,11 +561,13 @@ static inline void set_ur_golomb_jpegls(PutBitContext *pb, int i, int k, int lim
/**
* write signed golomb rice code (ffv1).
*/
static
inline
void
set_sr_golomb
(
PutBitContext
*
pb
,
int
i
,
int
k
,
int
limit
,
int
esc_len
){
static
inline
void
set_sr_golomb
(
PutBitContext
*
pb
,
int
i
,
int
k
,
int
limit
,
int
esc_len
)
{
int
v
;
v
=
-
2
*
i
-
1
;
v
^=
(
v
>>
31
);
v
=
-
2
*
i
-
1
;
v
^=
(
v
>>
31
);
set_ur_golomb
(
pb
,
v
,
k
,
limit
,
esc_len
);
}
...
...
@@ -535,11 +575,13 @@ static inline void set_sr_golomb(PutBitContext *pb, int i, int k, int limit, int
/**
* write signed golomb rice code (flac).
*/
static
inline
void
set_sr_golomb_flac
(
PutBitContext
*
pb
,
int
i
,
int
k
,
int
limit
,
int
esc_len
){
static
inline
void
set_sr_golomb_flac
(
PutBitContext
*
pb
,
int
i
,
int
k
,
int
limit
,
int
esc_len
)
{
int
v
;
v
=
-
2
*
i
-
1
;
v
^=
(
v
>>
31
);
v
=
-
2
*
i
-
1
;
v
^=
(
v
>>
31
);
set_ur_golomb_jpegls
(
pb
,
v
,
k
,
limit
,
esc_len
);
}
...
...
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