summaryrefslogtreecommitdiff
path: root/src/libvdpau/h264_parser.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libvdpau/h264_parser.c')
-rw-r--r--src/libvdpau/h264_parser.c59
1 files changed, 30 insertions, 29 deletions
diff --git a/src/libvdpau/h264_parser.c b/src/libvdpau/h264_parser.c
index 18456d47a..c41cb5cf6 100644
--- a/src/libvdpau/h264_parser.c
+++ b/src/libvdpau/h264_parser.c
@@ -226,41 +226,41 @@ void calculate_pic_order(struct nal_parser *parser)
if (sps->pic_order_cnt_type == 0) {
if (nal->nal_unit_type == NAL_SLICE_IDR) {
+ printf("IDR SLICE\n");
parser->prev_pic_order_cnt_lsb = 0;
parser->prev_pic_order_cnt_msb = 0;
}
- else {
- const int max_poc_lsb = 1 << (sps->log2_max_pic_order_cnt_lsb_minus4 + 4);
-
- if (slc->pic_order_cnt_lsb < parser->prev_pic_order_cnt_lsb
- && parser->prev_pic_order_cnt_lsb - slc->pic_order_cnt_lsb
- >= max_poc_lsb / 2)
- parser->pic_order_cnt_msb = parser->prev_pic_order_cnt_msb
- + max_poc_lsb;
- else if (slc->pic_order_cnt_lsb > parser->prev_pic_order_cnt_lsb
- && parser->prev_pic_order_cnt_lsb - slc->pic_order_cnt_lsb
- < -max_poc_lsb / 2)
- parser->pic_order_cnt_msb = parser->prev_pic_order_cnt_msb
- - max_poc_lsb;
- else
- parser->pic_order_cnt_msb = parser->prev_pic_order_cnt_msb;
- if (!slc->bottom_field_flag) {
- nal->top_field_order_cnt = parser->pic_order_cnt_msb
- + slc->pic_order_cnt_lsb;
+ const int max_poc_lsb = 1 << (sps->log2_max_pic_order_cnt_lsb_minus4 + 4);
+
+ if (slc->pic_order_cnt_lsb < parser->prev_pic_order_cnt_lsb
+ && parser->prev_pic_order_cnt_lsb - slc->pic_order_cnt_lsb
+ >= max_poc_lsb / 2)
+ parser->pic_order_cnt_msb = parser->prev_pic_order_cnt_msb
+ + max_poc_lsb;
+ else if (slc->pic_order_cnt_lsb > parser->prev_pic_order_cnt_lsb
+ && parser->prev_pic_order_cnt_lsb - slc->pic_order_cnt_lsb
+ < -max_poc_lsb / 2)
+ parser->pic_order_cnt_msb = parser->prev_pic_order_cnt_msb
+ - max_poc_lsb;
+ else
+ parser->pic_order_cnt_msb = parser->prev_pic_order_cnt_msb;
- if (!slc->field_pic_flag)
- nal->bottom_field_order_cnt = nal->top_field_order_cnt;
- else
- nal->bottom_field_order_cnt = 0;
- }
- else
- nal->bottom_field_order_cnt = parser->pic_order_cnt_msb
- + slc->pic_order_cnt_lsb;
+ if (!slc->bottom_field_flag) {
+ nal->top_field_order_cnt = parser->pic_order_cnt_msb
+ + slc->pic_order_cnt_lsb;
- if (parser->field == -1)
- nal->bottom_field_order_cnt += slc->delta_pic_order_cnt_bottom;
+ if (!slc->field_pic_flag)
+ nal->bottom_field_order_cnt = nal->top_field_order_cnt;
+ else
+ nal->bottom_field_order_cnt = 0;
}
+ else
+ nal->bottom_field_order_cnt = parser->pic_order_cnt_msb
+ + slc->pic_order_cnt_lsb;
+
+ if (parser->field == -1)
+ nal->bottom_field_order_cnt += slc->delta_pic_order_cnt_bottom;
}
}
@@ -1035,8 +1035,9 @@ int parse_nal(uint8_t *buf, int buf_len, struct nal_parser *parser)
struct nal_unit *last_nal = parser->last_nal;
int res = parse_nal_header(&bufr, parser);
- if (res == NAL_SLICE_IDR)
+ if (res == NAL_SLICE_IDR) {
parser->is_idr = 1;
+ }
if (res >= NAL_SLICE && res <= NAL_SLICE_IDR) {
// now detect if it's a new frame!