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
772225c0
Commit
772225c0
authored
Jan 20, 2011
by
Ronald S. Bultje
Committed by
Michael Niedermayer
Jan 21, 2011
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Revert
2a1f431d
, it broke H264 lossless.
(cherry picked from commit
66c6b5e2
)
parent
2293b0b6
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
99 additions
and
42 deletions
+99
-42
dsputil.h
libavcodec/dsputil.h
+0
-1
h264.c
libavcodec/h264.c
+91
-6
h264.h
libavcodec/h264.h
+0
-1
h264_cabac.c
libavcodec/h264_cabac.c
+1
-2
h264_cavlc.c
libavcodec/h264_cavlc.c
+1
-2
h264data.h
libavcodec/h264data.h
+2
-1
h264dsp.c
libavcodec/h264dsp.c
+0
-1
h264dsp.h
libavcodec/h264dsp.h
+0
-1
h264idct.c
libavcodec/h264idct.c
+0
-22
svq3.c
libavcodec/svq3.c
+4
-5
No files found.
libavcodec/dsputil.h
View file @
772225c0
...
...
@@ -66,7 +66,6 @@ void ff_h264_idct_add8_c(uint8_t **dest, const int *blockoffset, DCTELEM *block,
void
ff_h264_luma_dc_dequant_idct_c
(
DCTELEM
*
output
,
DCTELEM
*
input
,
int
qmul
);
void
ff_svq3_luma_dc_dequant_idct_c
(
DCTELEM
*
output
,
DCTELEM
*
input
,
int
qp
);
void
ff_chroma_dc_dequant_idct_c
(
DCTELEM
*
output
,
DCTELEM
*
input
,
int
qmul
);
void
ff_svq3_add_idct_c
(
uint8_t
*
dst
,
DCTELEM
*
block
,
int
stride
,
int
qp
,
int
dc
);
void
ff_vector_fmul_window_c
(
float
*
dst
,
const
float
*
src0
,
const
float
*
src1
,
...
...
libavcodec/h264.c
View file @
772225c0
...
...
@@ -246,6 +246,93 @@ int ff_h264_decode_rbsp_trailing(H264Context *h, const uint8_t *src){
return
0
;
}
#if 0
/**
* DCT transforms the 16 dc values.
* @param qp quantization parameter ??? FIXME
*/
static void h264_luma_dc_dct_c(DCTELEM *block/*, int qp*/){
// const int qmul= dequant_coeff[qp][0];
int i;
int temp[16]; //FIXME check if this is a good idea
static const int x_offset[4]={0, 1*stride, 4* stride, 5*stride};
static const int y_offset[4]={0, 2*stride, 8* stride, 10*stride};
for(i=0; i<4; i++){
const int offset= y_offset[i];
const int z0= block[offset+stride*0] + block[offset+stride*4];
const int z1= block[offset+stride*0] - block[offset+stride*4];
const int z2= block[offset+stride*1] - block[offset+stride*5];
const int z3= block[offset+stride*1] + block[offset+stride*5];
temp[4*i+0]= z0+z3;
temp[4*i+1]= z1+z2;
temp[4*i+2]= z1-z2;
temp[4*i+3]= z0-z3;
}
for(i=0; i<4; i++){
const int offset= x_offset[i];
const int z0= temp[4*0+i] + temp[4*2+i];
const int z1= temp[4*0+i] - temp[4*2+i];
const int z2= temp[4*1+i] - temp[4*3+i];
const int z3= temp[4*1+i] + temp[4*3+i];
block[stride*0 +offset]= (z0 + z3)>>1;
block[stride*2 +offset]= (z1 + z2)>>1;
block[stride*8 +offset]= (z1 - z2)>>1;
block[stride*10+offset]= (z0 - z3)>>1;
}
}
#endif
#undef xStride
#undef stride
static
void
chroma_dc_dequant_idct_c
(
DCTELEM
*
block
,
int
qmul
){
const
int
stride
=
16
*
2
;
const
int
xStride
=
16
;
int
a
,
b
,
c
,
d
,
e
;
a
=
block
[
stride
*
0
+
xStride
*
0
];
b
=
block
[
stride
*
0
+
xStride
*
1
];
c
=
block
[
stride
*
1
+
xStride
*
0
];
d
=
block
[
stride
*
1
+
xStride
*
1
];
e
=
a
-
b
;
a
=
a
+
b
;
b
=
c
-
d
;
c
=
c
+
d
;
block
[
stride
*
0
+
xStride
*
0
]
=
((
a
+
c
)
*
qmul
)
>>
7
;
block
[
stride
*
0
+
xStride
*
1
]
=
((
e
+
b
)
*
qmul
)
>>
7
;
block
[
stride
*
1
+
xStride
*
0
]
=
((
a
-
c
)
*
qmul
)
>>
7
;
block
[
stride
*
1
+
xStride
*
1
]
=
((
e
-
b
)
*
qmul
)
>>
7
;
}
#if 0
static void chroma_dc_dct_c(DCTELEM *block){
const int stride= 16*2;
const int xStride= 16;
int a,b,c,d,e;
a= block[stride*0 + xStride*0];
b= block[stride*0 + xStride*1];
c= block[stride*1 + xStride*0];
d= block[stride*1 + xStride*1];
e= a-b;
a= a+b;
b= c-d;
c= c+d;
block[stride*0 + xStride*0]= (a+c);
block[stride*0 + xStride*1]= (e+b);
block[stride*1 + xStride*0]= (a-c);
block[stride*1 + xStride*1]= (e-b);
}
#endif
static
inline
void
mc_dir_part
(
H264Context
*
h
,
Picture
*
pic
,
int
n
,
int
square
,
int
chroma_height
,
int
delta
,
int
list
,
uint8_t
*
dest_y
,
uint8_t
*
dest_cb
,
uint8_t
*
dest_cr
,
int
src_x_offset
,
int
src_y_offset
,
...
...
@@ -1196,19 +1283,17 @@ static av_always_inline void hl_decode_mb_internal(H264Context *h, int simple){
}
}
}
else
{
int
chroma_qpu
=
h
->
dequant4_coeff
[
IS_INTRA
(
mb_type
)
?
1
:
4
][
h
->
chroma_qp
[
0
]][
0
];
int
chroma_qpv
=
h
->
dequant4_coeff
[
IS_INTRA
(
mb_type
)
?
2
:
5
][
h
->
chroma_qp
[
1
]][
0
];
if
(
is_h264
){
if
(
h
->
non_zero_count_cache
[
scan8
[
CHROMA_DC_BLOCK_INDEX
+
0
]
])
h
->
h264dsp
.
h264_chroma_dc_dequant_idct
(
h
->
mb
+
16
*
16
+
0
*
16
,
&
h
->
mb_chroma_dc
[
0
],
chroma_qpu
);
chroma_dc_dequant_idct_c
(
h
->
mb
+
16
*
16
,
h
->
dequant4_coeff
[
IS_INTRA
(
mb_type
)
?
1
:
4
][
h
->
chroma_qp
[
0
]][
0
]
);
if
(
h
->
non_zero_count_cache
[
scan8
[
CHROMA_DC_BLOCK_INDEX
+
1
]
])
h
->
h264dsp
.
h264_chroma_dc_dequant_idct
(
h
->
mb
+
16
*
16
+
4
*
16
,
&
h
->
mb_chroma_dc
[
1
],
chroma_qpv
);
chroma_dc_dequant_idct_c
(
h
->
mb
+
16
*
16
+
4
*
16
,
h
->
dequant4_coeff
[
IS_INTRA
(
mb_type
)
?
2
:
5
][
h
->
chroma_qp
[
1
]][
0
]
);
h
->
h264dsp
.
h264_idct_add8
(
dest
,
block_offset
,
h
->
mb
,
uvlinesize
,
h
->
non_zero_count_cache
);
}
else
{
h
->
h264dsp
.
h264_chroma_dc_dequant_idct
(
h
->
mb
+
16
*
16
+
0
*
16
,
&
h
->
mb_chroma_dc
[
0
],
chroma_qpu
);
h
->
h264dsp
.
h264_chroma_dc_dequant_idct
(
h
->
mb
+
16
*
16
+
4
*
16
,
&
h
->
mb_chroma_dc
[
1
],
chroma_qpv
);
chroma_dc_dequant_idct_c
(
h
->
mb
+
16
*
16
,
h
->
dequant4_coeff
[
IS_INTRA
(
mb_type
)
?
1
:
4
][
h
->
chroma_qp
[
0
]][
0
]
);
chroma_dc_dequant_idct_c
(
h
->
mb
+
16
*
16
+
4
*
16
,
h
->
dequant4_coeff
[
IS_INTRA
(
mb_type
)
?
2
:
5
][
h
->
chroma_qp
[
1
]][
0
]
);
for
(
i
=
16
;
i
<
16
+
8
;
i
++
){
if
(
h
->
non_zero_count_cache
[
scan8
[
i
]
]
||
h
->
mb
[
i
*
16
]){
uint8_t
*
const
ptr
=
dest
[(
i
&
4
)
>>
2
]
+
block_offset
[
i
];
...
...
libavcodec/h264.h
View file @
772225c0
...
...
@@ -407,7 +407,6 @@ typedef struct H264Context{
DECLARE_ALIGNED
(
16
,
DCTELEM
,
mb
)[
16
*
24
];
DECLARE_ALIGNED
(
16
,
DCTELEM
,
mb_luma_dc
)[
16
];
DECLARE_ALIGNED
(
16
,
DCTELEM
,
mb_chroma_dc
)[
2
][
4
];
DCTELEM
mb_padding
[
256
];
///< as mb is addressed by scantable[i] and scantable is uint8_t we can either check that i is not too large or ensure that there is some unused stuff after mb
/**
...
...
libavcodec/h264_cabac.c
View file @
772225c0
...
...
@@ -1687,10 +1687,9 @@ decode_intra_mb:
if
(
cbp
&
0x30
){
int
c
;
AV_ZERO128
(
h
->
mb_chroma_dc
);
for
(
c
=
0
;
c
<
2
;
c
++
)
{
//av_log( s->avctx, AV_LOG_ERROR, "INTRA C%d-DC\n",c );
decode_cabac_residual_dc
(
h
,
h
->
mb
_chroma_dc
[
c
]
,
3
,
CHROMA_DC_BLOCK_INDEX
+
c
,
chroma_dc_scan
,
4
);
decode_cabac_residual_dc
(
h
,
h
->
mb
+
256
+
16
*
4
*
c
,
3
,
CHROMA_DC_BLOCK_INDEX
+
c
,
chroma_dc_scan
,
4
);
}
}
...
...
libavcodec/h264_cavlc.c
View file @
772225c0
...
...
@@ -987,9 +987,8 @@ decode_intra_mb:
}
if
(
cbp
&
0x30
){
AV_ZERO128
(
h
->
mb_chroma_dc
);
for
(
chroma_idx
=
0
;
chroma_idx
<
2
;
chroma_idx
++
)
if
(
decode_residual
(
h
,
gb
,
h
->
mb
_chroma_dc
[
chroma_idx
]
,
CHROMA_DC_BLOCK_INDEX
+
chroma_idx
,
chroma_dc_scan
,
NULL
,
4
)
<
0
){
if
(
decode_residual
(
h
,
gb
,
h
->
mb
+
256
+
16
*
4
*
chroma_idx
,
CHROMA_DC_BLOCK_INDEX
+
chroma_idx
,
chroma_dc_scan
,
NULL
,
4
)
<
0
){
return
-
1
;
}
}
...
...
libavcodec/h264data.h
View file @
772225c0
...
...
@@ -79,7 +79,8 @@ static const uint8_t luma_dc_field_scan[16]={
};
static
const
uint8_t
chroma_dc_scan
[
4
]
=
{
0
,
1
,
2
,
3
(
0
+
0
*
2
)
*
16
,
(
1
+
0
*
2
)
*
16
,
(
0
+
1
*
2
)
*
16
,
(
1
+
1
*
2
)
*
16
,
//FIXME
};
// zigzag_scan8x8_cavlc[i] = zigzag_scan8x8[(i/4) + 16*(i%4)]
...
...
libavcodec/h264dsp.c
View file @
772225c0
...
...
@@ -283,7 +283,6 @@ void ff_h264dsp_init(H264DSPContext *c)
c
->
h264_idct_add8
=
ff_h264_idct_add8_c
;
c
->
h264_idct_add16intra
=
ff_h264_idct_add16intra_c
;
c
->
h264_luma_dc_dequant_idct
=
ff_h264_luma_dc_dequant_idct_c
;
c
->
h264_chroma_dc_dequant_idct
=
ff_chroma_dc_dequant_idct_c
;
c
->
weight_h264_pixels_tab
[
0
]
=
weight_h264_pixels16x16_c
;
c
->
weight_h264_pixels_tab
[
1
]
=
weight_h264_pixels16x8_c
;
...
...
libavcodec/h264dsp.h
View file @
772225c0
...
...
@@ -68,7 +68,6 @@ typedef struct H264DSPContext{
void
(
*
h264_idct_add8
)(
uint8_t
**
dst
/*align 16*/
,
const
int
*
blockoffset
,
DCTELEM
*
block
/*align 16*/
,
int
stride
,
const
uint8_t
nnzc
[
6
*
8
]);
void
(
*
h264_idct_add16intra
)(
uint8_t
*
dst
/*align 16*/
,
const
int
*
blockoffset
,
DCTELEM
*
block
/*align 16*/
,
int
stride
,
const
uint8_t
nnzc
[
6
*
8
]);
void
(
*
h264_luma_dc_dequant_idct
)(
DCTELEM
*
output
,
DCTELEM
*
input
/*align 16*/
,
int
qmul
);
void
(
*
h264_chroma_dc_dequant_idct
)(
DCTELEM
*
output
,
DCTELEM
*
input
/*align 16*/
,
int
qmul
);
}
H264DSPContext
;
void
ff_h264dsp_init
(
H264DSPContext
*
c
);
...
...
libavcodec/h264idct.c
View file @
772225c0
...
...
@@ -250,26 +250,4 @@ void ff_h264_luma_dc_dequant_idct_c(DCTELEM *output, DCTELEM *input, int qmul){
output
[
stride
*
4
+
offset
]
=
((((
z1
-
z2
)
*
qmul
+
128
)
>>
8
));
output
[
stride
*
5
+
offset
]
=
((((
z0
-
z3
)
*
qmul
+
128
)
>>
8
));
}
#undef stride
}
void
ff_chroma_dc_dequant_idct_c
(
DCTELEM
*
output
,
DCTELEM
*
input
,
int
qmul
){
const
int
stride
=
16
*
2
;
const
int
xStride
=
16
;
int
a
,
b
,
c
,
d
,
e
;
a
=
input
[
0
];
b
=
input
[
1
];
c
=
input
[
2
];
d
=
input
[
3
];
e
=
a
-
b
;
a
=
a
+
b
;
b
=
c
-
d
;
c
=
c
+
d
;
output
[
stride
*
0
+
xStride
*
0
]
=
((
a
+
c
)
*
qmul
)
>>
7
;
output
[
stride
*
0
+
xStride
*
1
]
=
((
e
+
b
)
*
qmul
)
>>
7
;
output
[
stride
*
1
+
xStride
*
0
]
=
((
a
-
c
)
*
qmul
)
>>
7
;
output
[
stride
*
1
+
xStride
*
1
]
=
((
e
-
b
)
*
qmul
)
>>
7
;
}
libavcodec/svq3.c
View file @
772225c0
...
...
@@ -671,12 +671,11 @@ static int svq3_decode_mb(H264Context *h, unsigned int mb_type)
}
if
((
cbp
&
0x30
))
{
AV_ZERO128
(
h
->
mb_chroma_dc
);
for
(
i
=
0
;
i
<
2
;
++
i
)
{
if
(
svq3_decode_block
(
&
s
->
gb
,
h
->
mb_chroma_dc
[
i
],
0
,
3
)){
av_log
(
h
->
s
.
avctx
,
AV_LOG_ERROR
,
"error while decoding chroma dc block
\n
"
);
return
-
1
;
}
if
(
svq3_decode_block
(
&
s
->
gb
,
&
h
->
mb
[
16
*
(
16
+
4
*
i
)
],
0
,
3
)){
av_log
(
h
->
s
.
avctx
,
AV_LOG_ERROR
,
"error while decoding chroma dc block
\n
"
);
return
-
1
;
}
}
if
((
cbp
&
0x20
))
{
...
...
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