summaryrefslogtreecommitdiff
path: root/libavcodec/h264.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2014-03-17 05:49:10 +0100
committerMichael Niedermayer <michaelni@gmx.at>2014-03-17 05:51:27 +0100
commitc237e88d51b9da12026734101a9ba578d04b4b15 (patch)
tree4619fc3624a92400ad92ee2b61e42f3678037a67 /libavcodec/h264.c
parent4f22e39e65e9e4705845fb091a05ca4526eb835a (diff)
parent9b749c8274f6b6f35dde2cf29b99fa4f719abf87 (diff)
Merge commit '9b749c8274f6b6f35dde2cf29b99fa4f719abf87'
* commit '9b749c8274f6b6f35dde2cf29b99fa4f719abf87': h264: move relevant fields from Picture to H264Picture Conflicts: libavcodec/h264.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec/h264.c')
-rw-r--r--libavcodec/h264.c71
1 files changed, 46 insertions, 25 deletions
diff --git a/libavcodec/h264.c b/libavcodec/h264.c
index 297b7ab18c..3817db687c 100644
--- a/libavcodec/h264.c
+++ b/libavcodec/h264.c
@@ -278,9 +278,9 @@ void ff_h264_draw_horiz_band(H264Context *h, int y, int height)
}
}
-static void unref_picture(H264Context *h, Picture *pic)
+static void unref_picture(H264Context *h, H264Picture *pic)
{
- int off = offsetof(Picture, tf) + sizeof(pic->tf);
+ int off = offsetof(H264Picture, tf) + sizeof(pic->tf);
int i;
if (!pic->f.buf[0])
@@ -312,7 +312,7 @@ static void release_unused_pictures(H264Context *h, int remove_current)
}
}
-static int ref_picture(H264Context *h, Picture *dst, Picture *src)
+static int ref_picture(H264Context *h, H264Picture *dst, H264Picture *src)
{
int ret, i;
@@ -427,7 +427,7 @@ static int init_table_pools(H264Context *h)
return 0;
}
-static int alloc_picture(H264Context *h, Picture *pic)
+static int alloc_picture(H264Context *h, H264Picture *pic)
{
int i, ret = 0;
@@ -498,7 +498,7 @@ fail:
return (ret < 0) ? ret : AVERROR(ENOMEM);
}
-static inline int pic_is_unused(H264Context *h, Picture *pic)
+static inline int pic_is_unused(H264Context *h, H264Picture *pic)
{
if (!pic->f.buf[0])
return 1;
@@ -751,7 +751,7 @@ static int decode_rbsp_trailing(H264Context *h, const uint8_t *src)
return 0;
}
-static inline int get_lowest_part_list_y(H264Context *h, Picture *pic, int n,
+static inline int get_lowest_part_list_y(H264Context *h, H264Picture *pic, int n,
int height, int y_offset, int list)
{
int raw_my = h->mv_cache[list][scan8[n]][1];
@@ -773,8 +773,8 @@ static inline void get_lowest_part_y(H264Context *h, int refs[2][48], int n,
y_offset += 16 * (h->mb_y >> MB_FIELD(h));
if (list0) {
- int ref_n = h->ref_cache[0][scan8[n]];
- Picture *ref = &h->ref_list[0][ref_n];
+ int ref_n = h->ref_cache[0][scan8[n]];
+ H264Picture *ref = &h->ref_list[0][ref_n];
// Error resilience puts the current picture in the ref list.
// Don't try to wait on these as it will cause a deadlock.
@@ -790,7 +790,7 @@ static inline void get_lowest_part_y(H264Context *h, int refs[2][48], int n,
if (list1) {
int ref_n = h->ref_cache[1][scan8[n]];
- Picture *ref = &h->ref_list[1][ref_n];
+ H264Picture *ref = &h->ref_list[1][ref_n];
if (ref->tf.progress->data != h->cur_pic.tf.progress->data ||
(ref->reference & 3) != h->picture_structure) {
@@ -881,7 +881,7 @@ static void await_references(H264Context *h)
for (ref = 0; ref < 48 && nrefs[list]; ref++) {
int row = refs[list][ref];
if (row >= 0) {
- Picture *ref_pic = &h->ref_list[list][ref];
+ H264Picture *ref_pic = &h->ref_list[list][ref];
int ref_field = ref_pic->reference - 1;
int ref_field_picture = ref_pic->field_picture;
int pic_height = 16 * h->mb_height >> ref_field_picture;
@@ -915,7 +915,7 @@ static void await_references(H264Context *h)
}
}
-static av_always_inline void mc_dir_part(H264Context *h, Picture *pic,
+static av_always_inline void mc_dir_part(H264Context *h, H264Picture *pic,
int n, int square, int height,
int delta, int list,
uint8_t *dest_y, uint8_t *dest_cb,
@@ -1060,7 +1060,7 @@ static av_always_inline void mc_part_std(H264Context *h, int n, int square,
y_offset += 8 * (h->mb_y >> MB_FIELD(h));
if (list0) {
- Picture *ref = &h->ref_list[0][h->ref_cache[0][scan8[n]]];
+ H264Picture *ref = &h->ref_list[0][h->ref_cache[0][scan8[n]]];
mc_dir_part(h, ref, n, square, height, delta, 0,
dest_y, dest_cb, dest_cr, x_offset, y_offset,
qpix_op, chroma_op, pixel_shift, chroma_idc);
@@ -1070,7 +1070,7 @@ static av_always_inline void mc_part_std(H264Context *h, int n, int square,
}
if (list1) {
- Picture *ref = &h->ref_list[1][h->ref_cache[1][scan8[n]]];
+ H264Picture *ref = &h->ref_list[1][h->ref_cache[1][scan8[n]]];
mc_dir_part(h, ref, n, square, height, delta, 1,
dest_y, dest_cb, dest_cr, x_offset, y_offset,
qpix_op, chroma_op, pixel_shift, chroma_idc);
@@ -1162,7 +1162,7 @@ static av_always_inline void mc_part_weighted(H264Context *h, int n, int square,
} else {
int list = list1 ? 1 : 0;
int refn = h->ref_cache[list][scan8[n]];
- Picture *ref = &h->ref_list[list][refn];
+ H264Picture *ref = &h->ref_list[list][refn];
mc_dir_part(h, ref, n, square, height, delta, list,
dest_y, dest_cb, dest_cr, x_offset, y_offset,
qpix_put, chroma_put, pixel_shift, chroma_idc);
@@ -1664,7 +1664,7 @@ av_cold int ff_h264_decode_init(AVCodecContext *avctx)
pic < old_ctx->DPB + MAX_PICTURE_COUNT) ? \
&new_ctx->DPB[pic - old_ctx->DPB] : NULL)
-static void copy_picture_range(Picture **to, Picture **from, int count,
+static void copy_picture_range(H264Picture **to, H264Picture **from, int count,
H264Context *new_base,
H264Context *old_base)
{
@@ -1673,7 +1673,7 @@ static void copy_picture_range(Picture **to, Picture **from, int count,
for (i = 0; i < count; i++) {
assert((IN_RANGE(from[i], old_base, sizeof(*old_base)) ||
IN_RANGE(from[i], old_base->DPB,
- sizeof(Picture) * MAX_PICTURE_COUNT) ||
+ sizeof(H264Picture) * MAX_PICTURE_COUNT) ||
!from[i]));
to[i] = REBASE_PICTURE(from[i], new_base, old_base);
}
@@ -1942,7 +1942,7 @@ static int decode_update_thread_context(AVCodecContext *dst,
static int h264_frame_start(H264Context *h)
{
- Picture *pic;
+ H264Picture *pic;
int i, ret;
const int pixel_shift = h->pixel_shift;
int c[4] = {
@@ -2043,8 +2043,8 @@ static int h264_frame_start(H264Context *h)
*/
static void decode_postinit(H264Context *h, int setup_finished)
{
- Picture *out = h->cur_pic_ptr;
- Picture *cur = h->cur_pic_ptr;
+ H264Picture *out = h->cur_pic_ptr;
+ H264Picture *cur = h->cur_pic_ptr;
int i, pics, out_of_order, out_idx;
h->cur_pic_ptr->f.pict_type = h->pict_type;
@@ -3005,6 +3005,27 @@ static void init_scan_tables(H264Context *h)
}
}
+#if CONFIG_ERROR_RESILIENCE
+static void h264_set_erpic(ERPicture *dst, H264Picture *src)
+{
+ int i;
+
+ if (!src)
+ return;
+
+ dst->f = &src->f;
+ dst->tf = &src->tf;
+
+ for (i = 0; i < 2; i++) {
+ dst->motion_val[i] = src->motion_val[i];
+ dst->ref_index[i] = src->ref_index[i];
+ }
+
+ dst->mb_type = src->mb_type;
+ dst->field_picture = src->field_picture;
+}
+#endif /* CONFIG_ERROR_RESILIENCE */
+
static int field_end(H264Context *h, int in_setup)
{
AVCodecContext *const avctx = h->avctx;
@@ -3049,7 +3070,7 @@ static int field_end(H264Context *h, int in_setup)
* causes problems for the first MB line, too.
*/
if (CONFIG_ERROR_RESILIENCE && !FIELD_PICTURE(h) && h->current_slice && !h->sps.new) {
- ff_mpeg_set_erpic(&h->er.cur_pic, h->cur_pic_ptr);
+ h264_set_erpic(&h->er.cur_pic, h->cur_pic_ptr);
ff_er_frame_end(&h->er);
}
if (!in_setup && !h->droppable)
@@ -3786,7 +3807,7 @@ static int decode_slice_header(H264Context *h, H264Context *h0)
while (h->frame_num != h->prev_frame_num && !h0->first_field &&
h->frame_num != (h->prev_frame_num + 1) % (1 << h->sps.log2_max_frame_num)) {
- Picture *prev = h->short_ref_count ? h->short_ref[0] : NULL;
+ H264Picture *prev = h->short_ref_count ? h->short_ref[0] : NULL;
av_log(h->avctx, AV_LOG_DEBUG, "Frame num gap %d %d\n",
h->frame_num, h->prev_frame_num);
if (!h->sps.gaps_in_frame_num_allowed_flag)
@@ -4137,8 +4158,8 @@ static int decode_slice_header(H264Context *h, H264Context *h0)
(h->ref_list[j][i].reference & 3);
}
- if (h->ref_count[0]) ff_mpeg_set_erpic(&h->er.last_pic, &h->ref_list[0][0]);
- if (h->ref_count[1]) ff_mpeg_set_erpic(&h->er.next_pic, &h->ref_list[1][0]);
+ if (h->ref_count[0]) h264_set_erpic(&h->er.last_pic, &h->ref_list[0][0]);
+ if (h->ref_count[1]) h264_set_erpic(&h->er.next_pic, &h->ref_list[1][0]);
h->er.ref_count = h->ref_count[0];
h0->au_pps_id = pps_id;
@@ -5159,7 +5180,7 @@ static int get_consumed_bytes(int pos, int buf_size)
return pos;
}
-static int output_frame(H264Context *h, AVFrame *dst, Picture *srcp)
+static int output_frame(H264Context *h, AVFrame *dst, H264Picture *srcp)
{
AVFrame *src = &srcp->f;
const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(src->format);
@@ -5191,7 +5212,7 @@ static int h264_decode_frame(AVCodecContext *avctx, void *data,
H264Context *h = avctx->priv_data;
AVFrame *pict = data;
int buf_index = 0;
- Picture *out;
+ H264Picture *out;
int i, out_idx;
int ret;