mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2025-02-23 07:16:56 +00:00
Faster checks in reverse_dc_prediction.
Patch by Dark Shikari Originally committed as revision 20750 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
c11cb37520
commit
50ba3fd713
@ -1233,7 +1233,6 @@ static int unpack_dct_coeffs(Vp3DecodeContext *s, GetBitContext *gb)
|
|||||||
*/
|
*/
|
||||||
#define COMPATIBLE_FRAME(x) \
|
#define COMPATIBLE_FRAME(x) \
|
||||||
(compatible_frame[s->all_fragments[x].coding_method] == current_frame_type)
|
(compatible_frame[s->all_fragments[x].coding_method] == current_frame_type)
|
||||||
#define FRAME_CODED(x) (s->all_fragments[x].coding_method != MODE_COPY)
|
|
||||||
#define DC_COEFF(u) (s->coeffs[u].index ? 0 : s->coeffs[u].coeff) //FIXME do somethin to simplify this
|
#define DC_COEFF(u) (s->coeffs[u].index ? 0 : s->coeffs[u].coeff) //FIXME do somethin to simplify this
|
||||||
|
|
||||||
static void reverse_dc_prediction(Vp3DecodeContext *s,
|
static void reverse_dc_prediction(Vp3DecodeContext *s,
|
||||||
@ -1290,7 +1289,7 @@ static void reverse_dc_prediction(Vp3DecodeContext *s,
|
|||||||
* from other INTRA blocks. There are 2 golden frame coding types;
|
* from other INTRA blocks. There are 2 golden frame coding types;
|
||||||
* blocks encoding in these modes can only predict from other blocks
|
* blocks encoding in these modes can only predict from other blocks
|
||||||
* that were encoded with these 1 of these 2 modes. */
|
* that were encoded with these 1 of these 2 modes. */
|
||||||
static const unsigned char compatible_frame[8] = {
|
static const unsigned char compatible_frame[9] = {
|
||||||
1, /* MODE_INTER_NO_MV */
|
1, /* MODE_INTER_NO_MV */
|
||||||
0, /* MODE_INTRA */
|
0, /* MODE_INTRA */
|
||||||
1, /* MODE_INTER_PLUS_MV */
|
1, /* MODE_INTER_PLUS_MV */
|
||||||
@ -1298,7 +1297,8 @@ static void reverse_dc_prediction(Vp3DecodeContext *s,
|
|||||||
1, /* MODE_INTER_PRIOR_MV */
|
1, /* MODE_INTER_PRIOR_MV */
|
||||||
2, /* MODE_USING_GOLDEN */
|
2, /* MODE_USING_GOLDEN */
|
||||||
2, /* MODE_GOLDEN_MV */
|
2, /* MODE_GOLDEN_MV */
|
||||||
1 /* MODE_INTER_FOUR_MV */
|
1, /* MODE_INTER_FOUR_MV */
|
||||||
|
3 /* MODE_COPY */
|
||||||
};
|
};
|
||||||
int current_frame_type;
|
int current_frame_type;
|
||||||
|
|
||||||
@ -1326,24 +1326,24 @@ static void reverse_dc_prediction(Vp3DecodeContext *s,
|
|||||||
if(x){
|
if(x){
|
||||||
l= i-1;
|
l= i-1;
|
||||||
vl = DC_COEFF(l);
|
vl = DC_COEFF(l);
|
||||||
if(FRAME_CODED(l) && COMPATIBLE_FRAME(l))
|
if(COMPATIBLE_FRAME(l))
|
||||||
transform |= PL;
|
transform |= PL;
|
||||||
}
|
}
|
||||||
if(y){
|
if(y){
|
||||||
u= i-fragment_width;
|
u= i-fragment_width;
|
||||||
vu = DC_COEFF(u);
|
vu = DC_COEFF(u);
|
||||||
if(FRAME_CODED(u) && COMPATIBLE_FRAME(u))
|
if(COMPATIBLE_FRAME(u))
|
||||||
transform |= PU;
|
transform |= PU;
|
||||||
if(x){
|
if(x){
|
||||||
ul= i-fragment_width-1;
|
ul= i-fragment_width-1;
|
||||||
vul = DC_COEFF(ul);
|
vul = DC_COEFF(ul);
|
||||||
if(FRAME_CODED(ul) && COMPATIBLE_FRAME(ul))
|
if(COMPATIBLE_FRAME(ul))
|
||||||
transform |= PUL;
|
transform |= PUL;
|
||||||
}
|
}
|
||||||
if(x + 1 < fragment_width){
|
if(x + 1 < fragment_width){
|
||||||
ur= i-fragment_width+1;
|
ur= i-fragment_width+1;
|
||||||
vur = DC_COEFF(ur);
|
vur = DC_COEFF(ur);
|
||||||
if(FRAME_CODED(ur) && COMPATIBLE_FRAME(ur))
|
if(COMPATIBLE_FRAME(ur))
|
||||||
transform |= PUR;
|
transform |= PUR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user