mirror of
https://gitee.com/openharmony/third_party_ffmpeg
synced 2024-11-23 19:30:05 +00:00
Split fill_caches() between filter and decoder.
Originally committed as revision 21271 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
c988f97566
commit
f432b43b08
@ -1287,7 +1287,7 @@ static av_always_inline void hl_decode_mb_internal(H264Context *h, int simple){
|
||||
|
||||
if(h->deblocking_filter && 0) {
|
||||
backup_mb_border(h, dest_y, dest_cb, dest_cr, linesize, uvlinesize, simple);
|
||||
fill_caches(h, mb_type, 1); //FIXME don't fill stuff which isn't used by filter_mb
|
||||
fill_filter_caches(h, mb_type); //FIXME don't fill stuff which isn't used by filter_mb
|
||||
h->chroma_qp[0] = get_chroma_qp(h, 0, s->current_picture.qscale_table[mb_xy]);
|
||||
h->chroma_qp[1] = get_chroma_qp(h, 1, s->current_picture.qscale_table[mb_xy]);
|
||||
if (!simple && FRAME_MBAFF) {
|
||||
@ -2184,7 +2184,7 @@ static void loop_filter(H264Context *h){
|
||||
uvlinesize = h->mb_uvlinesize = s->uvlinesize;
|
||||
}
|
||||
backup_mb_border(h, dest_y, dest_cb, dest_cr, linesize, uvlinesize, !is_complex);
|
||||
fill_caches(h, mb_type, 1); //FIXME don't fill stuff which isn't used by filter_mb
|
||||
fill_filter_caches(h, mb_type); //FIXME don't fill stuff which isn't used by filter_mb
|
||||
h->chroma_qp[0] = get_chroma_qp(h, 0, s->current_picture.qscale_table[mb_xy]);
|
||||
h->chroma_qp[1] = get_chroma_qp(h, 1, s->current_picture.qscale_table[mb_xy]);
|
||||
|
||||
|
@ -719,7 +719,7 @@ static inline int get_chroma_qp(H264Context *h, int t, int qscale){
|
||||
|
||||
static inline void pred_pskip_motion(H264Context * const h, int * const mx, int * const my);
|
||||
|
||||
static void fill_caches(H264Context *h, int mb_type, int for_deblock){
|
||||
static av_always_inline void fill_caches(H264Context *h, int mb_type, int for_deblock){
|
||||
MpegEncContext * const s = &h->s;
|
||||
const int mb_xy= h->mb_xy;
|
||||
int topleft_xy, top_xy, topright_xy, left_xy[2];
|
||||
@ -1177,6 +1177,14 @@ static void fill_caches(H264Context *h, int mb_type, int for_deblock){
|
||||
h->neighbor_transform_size= !!IS_8x8DCT(top_type) + !!IS_8x8DCT(left_type[0]);
|
||||
}
|
||||
|
||||
static void fill_decode_caches(H264Context *h, int mb_type){
|
||||
fill_caches(h, mb_type, 0);
|
||||
}
|
||||
|
||||
static void fill_filter_caches(H264Context *h, int mb_type){
|
||||
fill_caches(h, mb_type, 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* gets the predicted intra4x4 prediction mode.
|
||||
*/
|
||||
@ -1313,7 +1321,7 @@ static void decode_mb_skip(H264Context *h){
|
||||
// just for fill_caches. pred_direct_motion will set the real mb_type
|
||||
mb_type|= MB_TYPE_P0L0|MB_TYPE_P0L1|MB_TYPE_DIRECT2|MB_TYPE_SKIP;
|
||||
|
||||
fill_caches(h, mb_type, 0); //FIXME check what is needed and what not ...
|
||||
fill_decode_caches(h, mb_type); //FIXME check what is needed and what not ...
|
||||
ff_h264_pred_direct_motion(h, &mb_type);
|
||||
mb_type|= MB_TYPE_SKIP;
|
||||
}
|
||||
@ -1322,7 +1330,7 @@ static void decode_mb_skip(H264Context *h){
|
||||
int mx, my;
|
||||
mb_type|= MB_TYPE_16x16|MB_TYPE_P0L0|MB_TYPE_P1L0|MB_TYPE_SKIP;
|
||||
|
||||
fill_caches(h, mb_type, 0); //FIXME check what is needed and what not ...
|
||||
fill_decode_caches(h, mb_type); //FIXME check what is needed and what not ...
|
||||
pred_pskip_motion(h, &mx, &my);
|
||||
fill_rectangle(&h->ref_cache[0][scan8[0]], 4, 4, 8, 0, 1);
|
||||
fill_rectangle( h->mv_cache[0][scan8[0]], 4, 4, 8, pack16to32(mx,my), 4);
|
||||
|
@ -1403,7 +1403,7 @@ decode_intra_mb:
|
||||
h->ref_count[1] <<= 1;
|
||||
}
|
||||
|
||||
fill_caches(h, mb_type, 0);
|
||||
fill_decode_caches(h, mb_type);
|
||||
|
||||
if( IS_INTRA( mb_type ) ) {
|
||||
int i, pred_mode;
|
||||
|
@ -631,7 +631,7 @@ decode_intra_mb:
|
||||
h->ref_count[1] <<= 1;
|
||||
}
|
||||
|
||||
fill_caches(h, mb_type, 0);
|
||||
fill_decode_caches(h, mb_type);
|
||||
|
||||
//mb_pred
|
||||
if(IS_INTRA(mb_type)){
|
||||
|
Loading…
Reference in New Issue
Block a user