diff options
| author | Julian Scheel <julian@jusst.de> | 2008-12-08 17:11:11 +0000 |
|---|---|---|
| committer | Julian Scheel <julian@jusst.de> | 2008-12-08 17:11:11 +0000 |
| commit | ab45a7f79778b9bbc3a20877a165eb077fd43ee0 (patch) | |
| tree | 0f476ab4bd5715e3500f6f5d61e5db70be2788d8 /src/libvdpau/h264_parser.c | |
| parent | 05dd5c1af21bdaa60b31edc5392e4f0c1bf28301 (diff) | |
| download | xine-lib-ab45a7f79778b9bbc3a20877a165eb077fd43ee0.tar.gz xine-lib-ab45a7f79778b9bbc3a20877a165eb077fd43ee0.tar.bz2 | |
It grows and grows...
Diffstat (limited to 'src/libvdpau/h264_parser.c')
| -rw-r--r-- | src/libvdpau/h264_parser.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/src/libvdpau/h264_parser.c b/src/libvdpau/h264_parser.c index c41cb5cf6..c888d9e1d 100644 --- a/src/libvdpau/h264_parser.c +++ b/src/libvdpau/h264_parser.c @@ -976,7 +976,7 @@ int parse_frame(struct nal_parser *parser, uint8_t *inbuf, int inbuf_len, } if (parser->last_nal_res != 2) { - /* this is not nal_unit != SLICE, keep it in the buffer */ + /* this is a SLICE, keep it in the buffer */ xine_fast_memcpy(parser->buf + parser->buf_len, inbuf, next_nal + search_offset); parser->buf_len += next_nal + search_offset; @@ -1042,6 +1042,7 @@ int parse_nal(uint8_t *buf, int buf_len, struct nal_parser *parser) if (res >= NAL_SLICE && res <= NAL_SLICE_IDR) { // now detect if it's a new frame! int ret = 0; + uint8_t reason = 0; if (nal->slc->field_pic_flag == 1) parser->field = nal->slc->bottom_field_flag; else { @@ -1056,26 +1057,32 @@ int parse_nal(uint8_t *buf, int buf_len, struct nal_parser *parser) if (nal->slc == NULL || last_nal->slc == NULL) { ret = 1; + reason++; } if (nal->slc && last_nal->slc && (nal->slc->frame_num != last_nal->slc->frame_num)) { ret = 1; + reason++; } if (nal->slc && last_nal->slc && (nal->slc->pic_parameter_set_id != last_nal->slc->pic_parameter_set_id)) { ret = 1; + reason++; } if (nal->slc && last_nal->slc && (nal->slc->field_pic_flag != last_nal->slc->field_pic_flag)) { ret = 1; + reason++; } if (nal->slc && last_nal->slc && nal->slc->bottom_field_flag != last_nal->slc->bottom_field_flag) { ret = 1; + reason++; } if (nal->nal_ref_idc != last_nal->nal_ref_idc && (nal->nal_ref_idc == 0 || last_nal->nal_ref_idc == 0)) { ret = 1; + reason++; } if (nal->sps && nal->slc && last_nal->slc && (nal->sps->pic_order_cnt_type == 0 && last_nal->sps->pic_order_cnt_type == 0 @@ -1083,6 +1090,8 @@ int parse_nal(uint8_t *buf, int buf_len, struct nal_parser *parser) || nal->slc->delta_pic_order_cnt_bottom != 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); } if (nal->slc && last_nal->slc && (nal->sps->pic_order_cnt_type == 1 && last_nal->sps->pic_order_cnt_type == 1 @@ -1091,15 +1100,18 @@ int parse_nal(uint8_t *buf, int buf_len, struct nal_parser *parser) || nal->slc->delta_pic_order_cnt[1] != last_nal->slc->delta_pic_order_cnt[1]))) { ret = 1; + reason++; } if (nal->nal_unit_type != last_nal->nal_unit_type && (nal->nal_unit_type == 5 || last_nal->nal_unit_type == 5)) { ret = 1; + reason++; } if (nal->slc && last_nal->slc && (nal->nal_unit_type == 5 && last_nal->nal_unit_type == 5 && nal->slc->idr_pic_id != last_nal->slc->idr_pic_id)) { ret = 1; + reason++; } if (parser->current_nal == parser->nal0) { @@ -1129,7 +1141,7 @@ int parse_nal(uint8_t *buf, int buf_len, struct nal_parser *parser) return 2; } - return 1; + return 0; } int seek_for_nal(uint8_t *buf, int buf_len) |
