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
b452d5ae
Commit
b452d5ae
authored
Nov 26, 2013
by
Anton Khirnov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
mpeg4videodec: move mpeg4-specific bug detection from h263 generic code to mpeg4
parent
48e13940
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
86 additions
and
85 deletions
+86
-85
h263dec.c
libavcodec/h263dec.c
+0
-85
mpeg4videodec.c
libavcodec/mpeg4videodec.c
+86
-0
No files found.
libavcodec/h263dec.c
View file @
b452d5ae
...
...
@@ -461,80 +461,11 @@ int ff_h263_decode_frame(AVCodecContext *avctx, void *data, int *got_frame,
avctx
->
has_b_frames
=
!
s
->
low_delay
;
if
(
s
->
xvid_build
==
-
1
&&
s
->
divx_version
==
-
1
&&
s
->
lavc_build
==
-
1
)
{
if
(
s
->
stream_codec_tag
==
AV_RL32
(
"XVID"
)
||
s
->
codec_tag
==
AV_RL32
(
"XVID"
)
||
s
->
codec_tag
==
AV_RL32
(
"XVIX"
)
||
s
->
codec_tag
==
AV_RL32
(
"RMP4"
)
||
s
->
codec_tag
==
AV_RL32
(
"ZMP4"
)
||
s
->
codec_tag
==
AV_RL32
(
"SIPP"
))
s
->
xvid_build
=
0
;
}
if
(
s
->
xvid_build
==
-
1
&&
s
->
divx_version
==
-
1
&&
s
->
lavc_build
==
-
1
)
if
(
s
->
codec_tag
==
AV_RL32
(
"DIVX"
)
&&
s
->
vo_type
==
0
&&
s
->
vol_control_parameters
==
0
)
s
->
divx_version
=
400
;
// divx 4
if
(
s
->
xvid_build
>=
0
&&
s
->
divx_version
>=
0
)
{
s
->
divx_version
=
s
->
divx_build
=
-
1
;
}
if
(
s
->
workaround_bugs
&
FF_BUG_AUTODETECT
)
{
if
(
s
->
codec_tag
==
AV_RL32
(
"XVIX"
))
s
->
workaround_bugs
|=
FF_BUG_XVID_ILACE
;
if
(
s
->
codec_tag
==
AV_RL32
(
"UMP4"
))
s
->
workaround_bugs
|=
FF_BUG_UMP4
;
if
(
s
->
divx_version
>=
500
&&
s
->
divx_build
<
1814
)
s
->
workaround_bugs
|=
FF_BUG_QPEL_CHROMA
;
if
(
s
->
divx_version
>
502
&&
s
->
divx_build
<
1814
)
s
->
workaround_bugs
|=
FF_BUG_QPEL_CHROMA2
;
if
(
s
->
xvid_build
<=
3U
)
s
->
padding_bug_score
=
256
*
256
*
256
*
64
;
if
(
s
->
xvid_build
<=
1U
)
s
->
workaround_bugs
|=
FF_BUG_QPEL_CHROMA
;
if
(
s
->
xvid_build
<=
12U
)
s
->
workaround_bugs
|=
FF_BUG_EDGE
;
if
(
s
->
xvid_build
<=
32U
)
s
->
workaround_bugs
|=
FF_BUG_DC_CLIP
;
#define SET_QPEL_FUNC(postfix1, postfix2) \
s->dsp.put_ ## postfix1 = ff_put_ ## postfix2; \
s->dsp.put_no_rnd_ ## postfix1 = ff_put_no_rnd_ ## postfix2; \
s->dsp.avg_ ## postfix1 = ff_avg_ ## postfix2;
if
(
s
->
lavc_build
<
4653U
)
s
->
workaround_bugs
|=
FF_BUG_STD_QPEL
;
if
(
s
->
lavc_build
<
4655U
)
s
->
workaround_bugs
|=
FF_BUG_DIRECT_BLOCKSIZE
;
if
(
s
->
lavc_build
<
4670U
)
s
->
workaround_bugs
|=
FF_BUG_EDGE
;
if
(
s
->
lavc_build
<=
4712U
)
s
->
workaround_bugs
|=
FF_BUG_DC_CLIP
;
if
(
s
->
divx_version
>=
0
)
s
->
workaround_bugs
|=
FF_BUG_DIRECT_BLOCKSIZE
;
if
(
s
->
divx_version
==
501
&&
s
->
divx_build
==
20020416
)
s
->
padding_bug_score
=
256
*
256
*
256
*
64
;
if
(
s
->
divx_version
<
500U
)
s
->
workaround_bugs
|=
FF_BUG_EDGE
;
if
(
s
->
divx_version
>=
0
)
s
->
workaround_bugs
|=
FF_BUG_HPEL_CHROMA
;
}
if
(
s
->
workaround_bugs
&
FF_BUG_STD_QPEL
)
{
SET_QPEL_FUNC
(
qpel_pixels_tab
[
0
][
5
],
qpel16_mc11_old_c
)
SET_QPEL_FUNC
(
qpel_pixels_tab
[
0
][
7
],
qpel16_mc31_old_c
)
...
...
@@ -551,22 +482,6 @@ int ff_h263_decode_frame(AVCodecContext *avctx, void *data, int *got_frame,
SET_QPEL_FUNC
(
qpel_pixels_tab
[
1
][
15
],
qpel8_mc33_old_c
)
}
if
(
avctx
->
debug
&
FF_DEBUG_BUGS
)
av_log
(
s
->
avctx
,
AV_LOG_DEBUG
,
"bugs: %X lavc_build:%d xvid_build:%d divx_version:%d divx_build:%d %s
\n
"
,
s
->
workaround_bugs
,
s
->
lavc_build
,
s
->
xvid_build
,
s
->
divx_version
,
s
->
divx_build
,
s
->
divx_packed
?
"p"
:
""
);
#if HAVE_MMX
if
(
s
->
codec_id
==
AV_CODEC_ID_MPEG4
&&
s
->
xvid_build
>=
0
&&
avctx
->
idct_algo
==
FF_IDCT_AUTO
&&
(
av_get_cpu_flags
()
&
AV_CPU_FLAG_MMX
))
{
avctx
->
idct_algo
=
FF_IDCT_XVIDMMX
;
ff_dct_common_init
(
s
);
s
->
picture_number
=
0
;
}
#endif
/* After H263 & mpeg4 header decode we have the height, width,
* and other parameters. So then we could init the picture.
* FIXME: By the way H263 decoder is evolving it should have
...
...
libavcodec/mpeg4videodec.c
View file @
b452d5ae
...
...
@@ -2403,6 +2403,92 @@ end:
s
->
low_delay
=
1
;
s
->
avctx
->
has_b_frames
=
!
s
->
low_delay
;
if
(
s
->
xvid_build
==
-
1
&&
s
->
divx_version
==
-
1
&&
s
->
lavc_build
==
-
1
)
{
if
(
s
->
stream_codec_tag
==
AV_RL32
(
"XVID"
)
||
s
->
codec_tag
==
AV_RL32
(
"XVID"
)
||
s
->
codec_tag
==
AV_RL32
(
"XVIX"
)
||
s
->
codec_tag
==
AV_RL32
(
"RMP4"
)
||
s
->
codec_tag
==
AV_RL32
(
"ZMP4"
)
||
s
->
codec_tag
==
AV_RL32
(
"SIPP"
))
s
->
xvid_build
=
0
;
}
if
(
s
->
xvid_build
==
-
1
&&
s
->
divx_version
==
-
1
&&
s
->
lavc_build
==
-
1
)
if
(
s
->
codec_tag
==
AV_RL32
(
"DIVX"
)
&&
s
->
vo_type
==
0
&&
s
->
vol_control_parameters
==
0
)
s
->
divx_version
=
400
;
// divx 4
if
(
s
->
xvid_build
>=
0
&&
s
->
divx_version
>=
0
)
{
s
->
divx_version
=
s
->
divx_build
=
-
1
;
}
if
(
s
->
workaround_bugs
&
FF_BUG_AUTODETECT
)
{
if
(
s
->
codec_tag
==
AV_RL32
(
"XVIX"
))
s
->
workaround_bugs
|=
FF_BUG_XVID_ILACE
;
if
(
s
->
codec_tag
==
AV_RL32
(
"UMP4"
))
s
->
workaround_bugs
|=
FF_BUG_UMP4
;
if
(
s
->
divx_version
>=
500
&&
s
->
divx_build
<
1814
)
s
->
workaround_bugs
|=
FF_BUG_QPEL_CHROMA
;
if
(
s
->
divx_version
>
502
&&
s
->
divx_build
<
1814
)
s
->
workaround_bugs
|=
FF_BUG_QPEL_CHROMA2
;
if
(
s
->
xvid_build
<=
3U
)
s
->
padding_bug_score
=
256
*
256
*
256
*
64
;
if
(
s
->
xvid_build
<=
1U
)
s
->
workaround_bugs
|=
FF_BUG_QPEL_CHROMA
;
if
(
s
->
xvid_build
<=
12U
)
s
->
workaround_bugs
|=
FF_BUG_EDGE
;
if
(
s
->
xvid_build
<=
32U
)
s
->
workaround_bugs
|=
FF_BUG_DC_CLIP
;
if
(
s
->
lavc_build
<
4653U
)
s
->
workaround_bugs
|=
FF_BUG_STD_QPEL
;
if
(
s
->
lavc_build
<
4655U
)
s
->
workaround_bugs
|=
FF_BUG_DIRECT_BLOCKSIZE
;
if
(
s
->
lavc_build
<
4670U
)
s
->
workaround_bugs
|=
FF_BUG_EDGE
;
if
(
s
->
lavc_build
<=
4712U
)
s
->
workaround_bugs
|=
FF_BUG_DC_CLIP
;
if
(
s
->
divx_version
>=
0
)
s
->
workaround_bugs
|=
FF_BUG_DIRECT_BLOCKSIZE
;
if
(
s
->
divx_version
==
501
&&
s
->
divx_build
==
20020416
)
s
->
padding_bug_score
=
256
*
256
*
256
*
64
;
if
(
s
->
divx_version
<
500U
)
s
->
workaround_bugs
|=
FF_BUG_EDGE
;
if
(
s
->
divx_version
>=
0
)
s
->
workaround_bugs
|=
FF_BUG_HPEL_CHROMA
;
}
#if HAVE_MMX
if
(
s
->
codec_id
==
AV_CODEC_ID_MPEG4
&&
s
->
xvid_build
>=
0
&&
s
->
avctx
->
idct_algo
==
FF_IDCT_AUTO
&&
(
av_get_cpu_flags
()
&
AV_CPU_FLAG_MMX
))
{
s
->
avctx
->
idct_algo
=
FF_IDCT_XVIDMMX
;
ff_dct_common_init
(
s
);
s
->
picture_number
=
0
;
}
#endif
if
(
s
->
avctx
->
debug
&
FF_DEBUG_BUGS
)
av_log
(
s
->
avctx
,
AV_LOG_DEBUG
,
"bugs: %X lavc_build:%d xvid_build:%d divx_version:%d divx_build:%d %s
\n
"
,
s
->
workaround_bugs
,
s
->
lavc_build
,
s
->
xvid_build
,
s
->
divx_version
,
s
->
divx_build
,
s
->
divx_packed
?
"p"
:
""
);
return
decode_vop_header
(
ctx
,
gb
);
}
...
...
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