X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=h264encode.cpp;h=c233f39b738101140589182d9e738dedb467f861;hb=64b8430160caae390a7e408a6c7d9629dc08e923;hp=e0083a13a3bbc33a41fd2b203029db685519eec5;hpb=9d05cb682c5a5e4629d9ccd100b787fda51bbef6;p=nageru diff --git a/h264encode.cpp b/h264encode.cpp index e0083a1..c233f39 100644 --- a/h264encode.cpp +++ b/h264encode.cpp @@ -131,7 +131,6 @@ static int rc_default_modes[] = { VA_RC_VCM, VA_RC_NONE, }; -static unsigned long long current_IDR_display = 0; static unsigned int current_frame_num = 0; static int misc_priv_type = 0; @@ -1207,12 +1206,12 @@ static void sort_two(VAPictureH264 ref[], int left, int right, unsigned int key, sort_one(ref, j+1, right, list1_ascending, frame_idx); } -static int update_ReferenceFrames(int frame_type) +static void update_ReferenceFrames(int frame_type) { int i; if (frame_type == FRAME_B) - return 0; + return; CurrentCurrPic.flags = VA_PICTURE_H264_SHORT_TERM_REFERENCE; numShortTerm++; @@ -1225,8 +1224,6 @@ static int update_ReferenceFrames(int frame_type) current_frame_num++; if (current_frame_num > MaxFrameNum) current_frame_num = 0; - - return 0; } @@ -1365,7 +1362,7 @@ static int calc_poc(int pic_order_cnt_lsb, int frame_type) return TopFieldOrderCnt; } -static int render_picture(int frame_type, int display_frame_num) +static int render_picture(int frame_type, int display_frame_num, int gop_start_display_frame_num) { VABufferID pic_param_buf; VAStatus va_status; @@ -1374,7 +1371,7 @@ static int render_picture(int frame_type, int display_frame_num) pic_param.CurrPic.picture_id = gl_surfaces[display_frame_num % SURFACE_NUM].ref_surface; pic_param.CurrPic.frame_idx = current_frame_num; pic_param.CurrPic.flags = 0; - pic_param.CurrPic.TopFieldOrderCnt = calc_poc((display_frame_num - current_IDR_display) % MaxPicOrderCntLsb, frame_type); + pic_param.CurrPic.TopFieldOrderCnt = calc_poc((display_frame_num - gop_start_display_frame_num) % MaxPicOrderCntLsb, frame_type); pic_param.CurrPic.BottomFieldOrderCnt = pic_param.CurrPic.TopFieldOrderCnt; CurrentCurrPic = pic_param.CurrPic; @@ -1510,7 +1507,7 @@ static void render_packedslice() free(packedslice_buffer); } -static int render_slice(int encoding_frame_num, int display_frame_num, int frame_type) +static int render_slice(int encoding_frame_num, int display_frame_num, int gop_start_display_frame_num, int frame_type) { VABufferID slice_param_buf; VAStatus va_status; @@ -1553,7 +1550,7 @@ static int render_slice(int encoding_frame_num, int display_frame_num, int frame slice_param.slice_alpha_c0_offset_div2 = 0; slice_param.slice_beta_offset_div2 = 0; slice_param.direct_spatial_mv_pred_flag = 1; - slice_param.pic_order_cnt_lsb = (display_frame_num - current_IDR_display) % MaxPicOrderCntLsb; + slice_param.pic_order_cnt_lsb = (display_frame_num - gop_start_display_frame_num) % MaxPicOrderCntLsb; if (h264_packedheader && @@ -1898,6 +1895,7 @@ void H264Encoder::end_frame(RefCountedGLsync fence, int64_t pts, const vector