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
82fcbc14
Commit
82fcbc14
authored
Feb 04, 2006
by
Michael Niedermayer
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
faster find_startcode()
Originally committed as revision 4939 to
svn://svn.ffmpeg.org/ffmpeg/trunk
parent
8f0df754
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
38 additions
and
57 deletions
+38
-57
mpeg12.c
libavcodec/mpeg12.c
+7
-34
mpegvideo.c
libavcodec/mpegvideo.c
+28
-0
mpegvideo.h
libavcodec/mpegvideo.h
+1
-0
parser.c
libavcodec/parser.c
+2
-23
No files found.
libavcodec/mpeg12.c
View file @
82fcbc14
...
...
@@ -2171,33 +2171,6 @@ static int mpeg_decode_postinit(AVCodecContext *avctx){
return
0
;
}
/* return the 8 bit start code value and update the search
state. Return -1 if no start code found */
static
int
find_start_code
(
const
uint8_t
**
pbuf_ptr
,
const
uint8_t
*
buf_end
)
{
const
uint8_t
*
buf_ptr
=
*
pbuf_ptr
;
buf_ptr
++
;
//gurantees that -1 is within the array
buf_end
-=
3
;
// gurantees that +3 is within the array
while
(
buf_ptr
<
buf_end
)
{
if
(
*
buf_ptr
==
0
){
while
(
buf_ptr
<
buf_end
&&
buf_ptr
[
1
]
==
0
)
buf_ptr
++
;
if
(
buf_ptr
[
-
1
]
==
0
&&
buf_ptr
[
1
]
==
1
){
*
pbuf_ptr
=
buf_ptr
+
3
;
return
buf_ptr
[
2
]
+
0x100
;
}
}
buf_ptr
+=
2
;
}
buf_end
+=
3
;
//undo the hack above
*
pbuf_ptr
=
buf_end
;
return
-
1
;
}
static
int
mpeg1_decode_picture
(
AVCodecContext
*
avctx
,
const
uint8_t
*
buf
,
int
buf_size
)
{
...
...
@@ -2715,7 +2688,8 @@ static int slice_decode_thread(AVCodecContext *c, void *arg){
if
(
s
->
mb_y
==
s
->
end_mb_y
)
return
0
;
start_code
=
find_start_code
(
&
buf
,
s
->
gb
.
buffer_end
);
start_code
=
-
1
;
buf
=
ff_find_start_code
(
buf
,
s
->
gb
.
buffer_end
,
&
start_code
);
mb_y
=
start_code
-
SLICE_MIN_START_CODE
;
if
(
mb_y
<
0
||
mb_y
>=
s
->
end_mb_y
)
return
-
1
;
...
...
@@ -2995,14 +2969,12 @@ static void mpeg_decode_gop(AVCodecContext *avctx,
int
ff_mpeg1_find_frame_end
(
ParseContext
*
pc
,
const
uint8_t
*
buf
,
int
buf_size
)
{
int
i
;
uint32_t
state
;
state
=
pc
->
state
;
uint32_t
state
=
pc
->
state
;
i
=
0
;
if
(
!
pc
->
frame_start_found
){
for
(
i
=
0
;
i
<
buf_size
;
i
++
){
state
=
(
state
<<
8
)
|
buf
[
i
]
;
i
=
ff_find_start_code
(
buf
+
i
,
buf
+
buf_size
,
&
state
)
-
buf
-
1
;
if
(
state
>=
SLICE_MIN_START_CODE
&&
state
<=
SLICE_MAX_START_CODE
){
i
++
;
pc
->
frame_start_found
=
1
;
...
...
@@ -3016,7 +2988,7 @@ int ff_mpeg1_find_frame_end(ParseContext *pc, const uint8_t *buf, int buf_size)
if
(
buf_size
==
0
)
return
0
;
for
(;
i
<
buf_size
;
i
++
){
state
=
(
state
<<
8
)
|
buf
[
i
]
;
i
=
ff_find_start_code
(
buf
+
i
,
buf
+
buf_size
,
&
state
)
-
buf
-
1
;
if
((
state
&
0xFFFFFF00
)
==
0x100
){
if
(
state
<
SLICE_MIN_START_CODE
||
state
>
SLICE_MAX_START_CODE
){
pc
->
frame_start_found
=
0
;
...
...
@@ -3083,7 +3055,8 @@ static int mpeg_decode_frame(AVCodecContext *avctx,
for
(;;)
{
/* find start next code */
start_code
=
find_start_code
(
&
buf_ptr
,
buf_end
);
start_code
=
-
1
;
buf_ptr
=
ff_find_start_code
(
buf_ptr
,
buf_end
,
&
start_code
);
if
(
start_code
<
0
){
if
(
s2
->
pict_type
!=
B_TYPE
||
avctx
->
skip_frame
<=
AVDISCARD_DEFAULT
){
if
(
avctx
->
thread_count
>
1
){
...
...
libavcodec/mpegvideo.c
View file @
82fcbc14
...
...
@@ -228,6 +228,34 @@ void ff_write_quant_matrix(PutBitContext *pb, int16_t *matrix){
}
#endif //CONFIG_ENCODERS
const
uint8_t
*
ff_find_start_code
(
const
uint8_t
*
restrict
p
,
const
uint8_t
*
end
,
uint32_t
*
restrict
state
){
int
i
;
for
(
i
=
0
;
i
<
3
;
i
++
){
uint32_t
tmp
=
*
state
<<
8
;
*
state
=
tmp
+
*
(
p
++
);
if
(
tmp
==
0x100
||
p
==
end
)
return
p
;
}
p
--
;
// need to recheck or might miss one
end
--
;
// we need the byte after 00 00 01 too
while
(
p
<
end
){
if
(
p
[
0
]
>
1
)
p
+=
3
;
else
if
(
p
[
-
1
]
)
p
+=
2
;
else
if
(
p
[
-
2
]
|
(
p
[
0
]
-
1
))
p
++
;
else
{
p
++
;
break
;
}
}
p
=
FFMIN
(
p
,
end
)
-
3
;
*
state
=
be2me_32
(
unaligned32
(
p
));
return
p
+
4
;
}
/* init common dct for both encoder and decoder */
int
DCT_common_init
(
MpegEncContext
*
s
)
{
...
...
libavcodec/mpegvideo.h
View file @
82fcbc14
...
...
@@ -773,6 +773,7 @@ void ff_write_quant_matrix(PutBitContext *pb, int16_t *matrix);
int
ff_find_unused_picture
(
MpegEncContext
*
s
,
int
shared
);
void
ff_denoise_dct
(
MpegEncContext
*
s
,
DCTELEM
*
block
);
void
ff_update_duplicate_context
(
MpegEncContext
*
dst
,
MpegEncContext
*
src
);
const
uint8_t
*
ff_find_start_code
(
const
uint8_t
*
p
,
const
uint8_t
*
end
,
uint32_t
*
state
);
void
ff_er_frame_start
(
MpegEncContext
*
s
);
void
ff_er_frame_end
(
MpegEncContext
*
s
);
...
...
libavcodec/parser.c
View file @
82fcbc14
...
...
@@ -272,28 +272,6 @@ int ff_combine_frame(ParseContext *pc, int next, uint8_t **buf, int *buf_size)
return
0
;
}
static
int
find_start_code
(
const
uint8_t
**
pbuf_ptr
,
const
uint8_t
*
buf_end
)
{
const
uint8_t
*
buf_ptr
;
unsigned
int
state
=
0xFFFFFFFF
,
v
;
int
val
;
buf_ptr
=
*
pbuf_ptr
;
while
(
buf_ptr
<
buf_end
)
{
v
=
*
buf_ptr
++
;
if
(
state
==
0x000001
)
{
state
=
((
state
<<
8
)
|
v
)
&
0xffffff
;
val
=
state
;
goto
found
;
}
state
=
((
state
<<
8
)
|
v
)
&
0xffffff
;
}
val
=
-
1
;
found:
*
pbuf_ptr
=
buf_ptr
;
return
val
;
}
/* XXX: merge with libavcodec ? */
#define MPEG1_FRAME_RATE_BASE 1001
...
...
@@ -335,7 +313,8 @@ static void mpegvideo_extract_headers(AVCodecParserContext *s,
s
->
repeat_pict
=
0
;
buf_end
=
buf
+
buf_size
;
while
(
buf
<
buf_end
)
{
start_code
=
find_start_code
(
&
buf
,
buf_end
);
start_code
=
-
1
;
buf
=
ff_find_start_code
(
buf
,
buf_end
,
&
start_code
);
bytes_left
=
buf_end
-
buf
;
switch
(
start_code
)
{
case
PICTURE_START_CODE
:
...
...
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