diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/libvdpau/dpb.h | 2 | ||||
-rw-r--r-- | src/libvdpau/h264_parser.c | 6 | ||||
-rw-r--r-- | src/libvdpau/h264_parser.h | 6 | ||||
-rw-r--r-- | src/libvdpau/vdpau_h264.c | 6 |
4 files changed, 16 insertions, 4 deletions
diff --git a/src/libvdpau/dpb.h b/src/libvdpau/dpb.h index ace624e32..36892b60c 100644 --- a/src/libvdpau/dpb.h +++ b/src/libvdpau/dpb.h @@ -17,6 +17,8 @@ struct decoded_picture { * the surface is not double-used */ struct nal_unit *nal; + uint8_t used_for_reference; + struct decoded_picture *next; }; diff --git a/src/libvdpau/h264_parser.c b/src/libvdpau/h264_parser.c index 4445b5d78..24a26e86c 100644 --- a/src/libvdpau/h264_parser.c +++ b/src/libvdpau/h264_parser.c @@ -472,6 +472,7 @@ void parse_vui_parameters(struct buf_reader *buf, sps->vui_parameters.log2_max_mv_length_vertical = read_exp_golomb(buf); sps->vui_parameters.num_reorder_frames = read_exp_golomb(buf); sps->vui_parameters.max_dec_frame_buffering = read_exp_golomb(buf); + printf("Max_dec_frame_buffering: %d\n", sps->vui_parameters.max_dec_frame_buffering); } } @@ -543,7 +544,6 @@ uint8_t parse_pps(struct buf_reader *buf, struct pic_parameter_set_rbsp *pps, pps->redundant_pic_cnt_present_flag = read_bits(buf, 1); if (!rbsp_trailing_bits(buf)) { - printf("PARSE 8x8\n"); pps->transform_8x8_mode_flag = read_bits(buf, 1); pps->pic_scaling_matrix_present_flag = read_bits(buf, 1); if (pps->pic_scaling_matrix_present_flag) { @@ -1133,8 +1133,8 @@ int parse_nal(uint8_t *buf, int buf_len, struct nal_parser *parser) != last_nal->slc->delta_pic_order_cnt_bottom))) { ret = 1; reason++; - printf("C: Reason: %d, %d, %d\n", res, nal->slc->pic_order_cnt_lsb, - last_nal->slc->pic_order_cnt_lsb); + /*printf("C: Reason: %d, %d, %d\n", res, nal->slc->pic_order_cnt_lsb, + last_nal->slc->pic_order_cnt_lsb);*/ } if (nal->slc && last_nal->slc && (nal->sps->pic_order_cnt_type == 1 && last_nal->sps->pic_order_cnt_type == 1 diff --git a/src/libvdpau/h264_parser.h b/src/libvdpau/h264_parser.h index 3381cf4c2..99691e950 100644 --- a/src/libvdpau/h264_parser.h +++ b/src/libvdpau/h264_parser.h @@ -13,7 +13,8 @@ struct nal_parser { uint8_t buf[MAX_FRAME_SIZE]; uint32_t buf_len; - /* prebuf is a ringbuffer */ + /* prebuf is used to store the currently + * processed nal unit */ uint8_t prebuf[MAX_FRAME_SIZE]; uint32_t prebuf_len; uint32_t next_nal_position; @@ -42,6 +43,9 @@ struct nal_parser { uint32_t prev_pic_order_cnt_lsb; uint32_t prev_pic_order_cnt_msb; + /* this is dpb used for reference frame + * heading to vdpau + unordered frames + */ struct dpb dpb; }; diff --git a/src/libvdpau/vdpau_h264.c b/src/libvdpau/vdpau_h264.c index 1d988eeeb..ecf8d21af 100644 --- a/src/libvdpau/vdpau_h264.c +++ b/src/libvdpau/vdpau_h264.c @@ -351,6 +351,12 @@ static void vdpau_h264_decode_data (video_decoder_t *this_gen, VdpStatus status = this->vdpau_accel->vdp_decoder_render(this->decoder, surface, (VdpPictureInfo*)&pic, 1, &vdp_buffer); + // FIXME: do we really hit all cases here? + if(((uint8_t*)vdp_buffer.bitstream) != NULL) { + free(vdp_buffer.bitstream); + printf("Freed vdp_buffer.bitstream\n"); + } + if(status != VDP_STATUS_OK) xprintf(this->xine, XINE_VERBOSITY_LOG, "vdpau_h264: Decoder failure: %s\n", this->vdpau_accel->vdp_get_error_string(status)); else { |