aboutsummaryrefslogtreecommitdiffstats
path: root/libavcodec
diff options
context:
space:
mode:
authorJanne Grunau <janne-libav@jannau.net>2012-12-17 21:36:05 +0100
committerJanne Grunau <janne-libav@jannau.net>2012-12-18 19:36:58 +0100
commit73ad2c2fa725be51215e1c021c5335f8ce65af79 (patch)
treee7004c4cc1960f3aa8aa5df6ff8cc865e3c03df2 /libavcodec
parent523c7bd23c781aa0f3a85044896f5e18e8b52534 (diff)
downloadffmpeg-73ad2c2fa725be51215e1c021c5335f8ce65af79.tar.gz
h264: increase dist_scale_factor for up to 32 references
Compute dist_scale_factor_field only for MBAFF since that is the only case in which it is used.
Diffstat (limited to 'libavcodec')
-rw-r--r--libavcodec/h264.h2
-rw-r--r--libavcodec/h264_direct.c17
2 files changed, 11 insertions, 8 deletions
diff --git a/libavcodec/h264.h b/libavcodec/h264.h
index 30494706a8..6691be4a94 100644
--- a/libavcodec/h264.h
+++ b/libavcodec/h264.h
@@ -364,7 +364,7 @@ typedef struct H264Context {
int direct_spatial_mv_pred;
int col_parity;
int col_fieldoff;
- int dist_scale_factor[16];
+ int dist_scale_factor[32];
int dist_scale_factor_field[2][32];
int map_col_to_list0[2][16 + 32];
int map_col_to_list0_field[2][2][16 + 32];
diff --git a/libavcodec/h264_direct.c b/libavcodec/h264_direct.c
index fc429aee80..a33efa5d6f 100644
--- a/libavcodec/h264_direct.c
+++ b/libavcodec/h264_direct.c
@@ -54,14 +54,17 @@ void ff_h264_direct_dist_scale_factor(H264Context * const h){
const int poc = h->s.current_picture_ptr->field_poc[ s->picture_structure == PICT_BOTTOM_FIELD ];
const int poc1 = h->ref_list[1][0].poc;
int i, field;
- for(field=0; field<2; field++){
- const int poc = h->s.current_picture_ptr->field_poc[field];
- const int poc1 = h->ref_list[1][0].field_poc[field];
- for(i=0; i < 2*h->ref_count[0]; i++)
- h->dist_scale_factor_field[field][i^field] = get_scale_factor(h, poc, poc1, i+16);
- }
- for(i=0; i<h->ref_count[0]; i++){
+ if (FRAME_MBAFF)
+ for (field = 0; field < 2; field++){
+ const int poc = h->s.current_picture_ptr->field_poc[field];
+ const int poc1 = h->ref_list[1][0].field_poc[field];
+ for (i = 0; i < 2 * h->ref_count[0]; i++)
+ h->dist_scale_factor_field[field][i^field] =
+ get_scale_factor(h, poc, poc1, i+16);
+ }
+
+ for (i = 0; i < h->ref_count[0]; i++){
h->dist_scale_factor[i] = get_scale_factor(h, poc, poc1, i);
}
}