summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJulian Scheel <julian@jusst.de>2008-12-12 09:15:19 +0000
committerJulian Scheel <julian@jusst.de>2008-12-12 09:15:19 +0000
commitfc85c220d809a38468704282edd34b9bb00ff911 (patch)
treeeebe05c5a3fb8233de940ff5cca289032a9d6c38 /src
parent65ae9896ac134cad57835d5dcf8ec5594efe7d2c (diff)
downloadxine-lib-fc85c220d809a38468704282edd34b9bb00ff911.tar.gz
xine-lib-fc85c220d809a38468704282edd34b9bb00ff911.tar.bz2
Some fixes...
Diffstat (limited to 'src')
-rw-r--r--src/libvdpau/dpb.h2
-rw-r--r--src/libvdpau/h264_parser.c6
-rw-r--r--src/libvdpau/h264_parser.h6
-rw-r--r--src/libvdpau/vdpau_h264.c6
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 {