OSDN Git Service

Merge commit '7fa00653a550c0d24b3951c0f9fed6350ecf5ce4'
authorMichael Niedermayer <michaelni@gmx.at>
Thu, 21 Mar 2013 11:50:18 +0000 (12:50 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Thu, 21 Mar 2013 11:50:18 +0000 (12:50 +0100)
* commit '7fa00653a550c0d24b3951c0f9fed6350ecf5ce4':
  h264: add a parameter to the FIELD_PICTURE macro.
  h264: add a parameter to the FRAME_MBAFF macro.

Conflicts:
libavcodec/h264.c
libavcodec/h264_loopfilter.c
libavcodec/h264_refs.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
libavcodec/h264.c
libavcodec/h264.h
libavcodec/h264_cabac.c
libavcodec/h264_cavlc.c
libavcodec/h264_direct.c
libavcodec/h264_loopfilter.c
libavcodec/h264_mb_template.c
libavcodec/h264_mvpred.h
libavcodec/h264_refs.c

@@@ -2862,9 -2801,10 +2862,9 @@@ static int field_end(H264Context *h, in
       * past end by one (callers fault) and resync_mb_y != 0
       * causes problems for the first MB line, too.
       */
 -    if (!FIELD_PICTURE(h)) {
 +    if (CONFIG_ERROR_RESILIENCE &&
-         !FIELD_PICTURE && h->current_slice && !h->sps.new) {
++        !FIELD_PICTURE(h) && h->current_slice && !h->sps.new) {
          h->er.cur_pic  = h->cur_pic_ptr;
 -        h->er.last_pic = h->ref_count[0] ? &h->ref_list[0][0] : NULL;
 -        h->er.next_pic = h->ref_count[1] ? &h->ref_list[1][0] : NULL;
          ff_er_frame_end(&h->er);
      }
      emms_c();
@@@ -3205,10 -3095,10 +3205,10 @@@ static int decode_slice_header(H264Cont
      h->me.qpel_put = h->h264qpel.put_h264_qpel_pixels_tab;
      h->me.qpel_avg = h->h264qpel.avg_h264_qpel_pixels_tab;
  
 -    first_mb_in_slice = get_ue_golomb(&h->gb);
 +    first_mb_in_slice = get_ue_golomb_long(&h->gb);
  
      if (first_mb_in_slice == 0) { // FIXME better field boundary detection
-         if (h0->current_slice && FIELD_PICTURE) {
+         if (h0->current_slice && FIELD_PICTURE(h)) {
              field_end(h, 1);
          }
  
              assert(h0->cur_pic_ptr->f.data[0]);
              assert(h0->cur_pic_ptr->reference != DELAYED_PIC_REF);
  
 +            /* Mark old field/frame as completed */
 +            if (!last_pic_droppable && h0->cur_pic_ptr->tf.owner == h0->avctx) {
 +                ff_thread_report_progress(&h0->cur_pic_ptr->tf, INT_MAX,
 +                                          last_pic_structure == PICT_BOTTOM_FIELD);
 +            }
 +
              /* figure out if we have a complementary field pair */
-             if (!FIELD_PICTURE || h->picture_structure == last_pic_structure) {
+             if (!FIELD_PICTURE(h) || h->picture_structure == last_pic_structure) {
                  /* Previous field is unmatched. Don't display it, but let it
                   * remain for reference if marked as such. */
                  if (!last_pic_droppable && last_pic_structure != PICT_FRAME) {
                  /* Previous field is unmatched. Don't display it, but let it
                   * remain for reference if marked as such. */
                  h0->cur_pic_ptr = NULL;
-                 h0->first_field = FIELD_PICTURE;
+                 h0->first_field = FIELD_PICTURE(h);
              } else {
                  if (h0->cur_pic_ptr->frame_num != h->frame_num) {
 +                    ff_thread_report_progress(&h0->cur_pic_ptr->tf, INT_MAX,
 +                                              h0->picture_structure==PICT_BOTTOM_FIELD);
                      /* This and the previous field had different frame_nums.
                       * Consider this field first in pair. Throw away previous
                       * one except for reference purposes. */
@@@ -4251,9 -4103,7 +4251,9 @@@ static int decode_slice(struct AVCodecC
  
      h->mb_skip_run = -1;
  
-     h->is_complex = FRAME_MBAFF || h->picture_structure != PICT_FRAME ||
 +    av_assert0(h->block_offset[15] == (4 * ((scan8[15] - scan8[0]) & 7) << h->pixel_shift) + 4 * h->linesize * ((scan8[15] - scan8[0]) >> 3));
 +
+     h->is_complex = FRAME_MBAFF(h) || h->picture_structure != PICT_FRAME ||
                      avctx->codec_id != AV_CODEC_ID_H264 ||
                      (CONFIG_GRAY && (h->flags & CODEC_FLAG_GRAY));
  
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -414,7 -417,7 +414,7 @@@ static av_always_inline void h264_filte
  }
  
  void ff_h264_filter_mb_fast( H264Context *h, int mb_x, int mb_y, uint8_t *img_y, uint8_t *img_cb, uint8_t *img_cr, unsigned int linesize, unsigned int uvlinesize) {
-     av_assert2(!FRAME_MBAFF);
 -    assert(!FRAME_MBAFF(h));
++    av_assert2(!FRAME_MBAFF(h));
      if(!h->h264dsp.h264_loop_filter_strength || h->pps.chroma_qp_diff) {
          ff_h264_filter_mb(h, mb_x, mb_y, img_y, img_cb, img_cr, linesize, uvlinesize);
          return;
Simple merge
Simple merge
@@@ -305,14 -304,9 +305,14 @@@ int ff_h264_decode_ref_pic_list_reorder
      }
      for (list = 0; list < h->list_count; list++) {
          for (index = 0; index < h->ref_count[list]; index++) {
 -            if (!h->ref_list[list][index].f.data[0]) {
 -                av_log(h->avctx, AV_LOG_ERROR, "Missing reference picture\n");
 -                if (h->default_ref_list[list][0].f.data[0])
 +            if (   !h->ref_list[list][index].f.data[0]
-                 || (!FIELD_PICTURE && (h->ref_list[list][index].reference&3) != 3)) {
++                || (!FIELD_PICTURE(h) && (h->ref_list[list][index].reference&3) != 3)) {
 +                int i;
 +                av_log(h->avctx, AV_LOG_ERROR, "Missing reference picture, default is %d\n", h->default_ref_list[list][0].poc);
 +                for (i = 0; i < FF_ARRAY_ELEMS(h->last_pocs); i++)
 +                    h->last_pocs[i] = INT_MIN;
 +                if (h->default_ref_list[list][0].f.data[0]
-                     && !(!FIELD_PICTURE && (h->default_ref_list[list][0].reference&3) != 3))
++                    && !(!FIELD_PICTURE(h) && (h->default_ref_list[list][0].reference&3) != 3))
                      COPY_PICTURE(&h->ref_list[list][index], &h->default_ref_list[list][0]);
                  else
                      return -1;
@@@ -532,9 -520,11 +532,9 @@@ int ff_generate_sliding_window_mmcos(H2
      MMCO mmco_temp[MAX_MMCO_COUNT], *mmco = first_slice ? h->mmco : mmco_temp;
      int mmco_index = 0, i;
  
 -    assert(h->long_ref_count + h->short_ref_count <= h->sps.ref_frame_count);
 -
      if (h->short_ref_count &&
 -        h->long_ref_count + h->short_ref_count == h->sps.ref_frame_count &&
 +        h->long_ref_count + h->short_ref_count >= h->sps.ref_frame_count &&
-         !(FIELD_PICTURE && !h->first_field && h->cur_pic_ptr->reference)) {
+         !(FIELD_PICTURE(h) && !h->first_field && h->cur_pic_ptr->reference)) {
          mmco[0].opcode        = MMCO_SHORT2UNUSED;
          mmco[0].short_pic_num = h->short_ref[h->short_ref_count - 1]->frame_num;
          mmco_index            = 1;