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
cceabc86
Commit
cceabc86
authored
Jul 10, 2002
by
Michael Niedermayer
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
get_vlc() optimization
Originally committed as revision 735 to
svn://svn.ffmpeg.org/ffmpeg/trunk
parent
82dd7d0d
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
39 additions
and
49 deletions
+39
-49
common.c
libavcodec/common.c
+1
-1
common.h
libavcodec/common.h
+38
-48
No files found.
libavcodec/common.c
View file @
cceabc86
...
...
@@ -286,7 +286,7 @@ static int build_table(VLC *vlc, int table_nb_bits,
return
-
1
;
/* note: realloc has been done, so reload tables */
table
=
&
vlc
->
table
[
table_index
];
table
[
i
][
0
]
=
index
;
//code
table
[
i
][
0
]
=
index
-
table_index
;
//code
}
}
return
table_index
;
...
...
libavcodec/common.h
View file @
cceabc86
...
...
@@ -732,64 +732,54 @@ int init_vlc(VLC *vlc, int nb_bits, int nb_codes,
const
void
*
codes
,
int
codes_wrap
,
int
codes_size
);
void
free_vlc
(
VLC
*
vlc
);
//note table will be trashed (pointer increased)
#define GET_VLC(code, name, gb, table, bits, max_depth)\
{\
int n, index, nb_bits;\
\
index= SHOW_UBITS(name, gb, bits);\
code = table[index][0];\
n = table[index][1];\
\
if(max_depth > 1 && n < 0){\
LAST_SKIP_BITS(name, gb, bits)\
UPDATE_CACHE(name, gb)\
\
nb_bits = -n;\
table += code;\
\
index= SHOW_UBITS(name, gb, nb_bits);\
code = table[index][0];\
n = table[index][1];\
if(max_depth > 2 && n < 0){\
LAST_SKIP_BITS(name, gb, nb_bits)\
UPDATE_CACHE(name, gb)\
\
nb_bits = -n;\
table += code;\
\
index= SHOW_UBITS(name, gb, nb_bits);\
code = table[index][0];\
n = table[index][1];\
}\
}\
SKIP_BITS(name, gb, n)\
}
static
inline
int
get_vlc
(
GetBitContext
*
s
,
VLC
*
vlc
)
{
int
code
,
n
,
nb_bits
,
index
;
VLC_TYPE
(
*
table
)[
2
];
int
code
;
VLC_TYPE
(
*
table
)[
2
]
=
vlc
->
table
;
OPEN_READER
(
re
,
s
)
UPDATE_CACHE
(
re
,
s
)
nb_bits
=
vlc
->
bits
;
table
=
vlc
->
table
;
#ifdef FAST_GET_FIRST_VLC
index
=
SHOW_UBITS
(
re
,
s
,
nb_bits
);
code
=
table
[
index
][
0
];
n
=
table
[
index
][
1
];
if
(
n
>
0
)
{
/* most common case (90%)*/
LAST_SKIP_BITS
(
re
,
s
,
n
)
CLOSE_READER
(
re
,
s
)
return
code
;
}
else
if
(
n
==
0
)
{
return
-
1
;
}
else
{
LAST_SKIP_BITS
(
re
,
s
,
nb_bits
)
UPDATE_CACHE
(
re
,
s
)
//this isnt needed but its faster if its here
GET_VLC
(
code
,
re
,
s
,
table
,
vlc
->
bits
,
3
)
nb_bits
=
-
n
;
table
=
vlc
->
table
+
code
;
}
#endif
for
(;;)
{
index
=
SHOW_UBITS
(
re
,
s
,
nb_bits
);
code
=
table
[
index
][
0
];
n
=
table
[
index
][
1
];
if
(
n
>
0
)
{
/* most common case */
SKIP_BITS
(
re
,
s
,
n
)
#ifdef STATS
st_bit_counts
[
st_current_index
]
+=
n
;
#endif
break
;
}
else
if
(
n
==
0
)
{
return
-
1
;
}
else
{
LAST_SKIP_BITS
(
re
,
s
,
nb_bits
)
UPDATE_CACHE
(
re
,
s
)
#ifdef STATS
st_bit_counts
[
st_current_index
]
+=
nb_bits
;
#endif
nb_bits
=
-
n
;
table
=
vlc
->
table
+
code
;
}
}
CLOSE_READER
(
re
,
s
)
return
code
;
}
/* define it to include statistics code (useful only for optimizing
codec efficiency */
//#define STATS
...
...
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