if (frame->frame == NULL &&
((frame->is_used == 1 && frame->top_field)
|| (frame->is_used == 2 && frame->bottom_field))) {
- dpb_print(DECODE_ID(hw), PRINT_FLAG_ERRORFLAG_DBG,
+ if (hw->i_only) {
+ if (frame->is_used == 1)
+ dpb_print(DECODE_ID(hw), PRINT_FLAG_VDEC_STATUS,
+ "%s No bottom_field !! frame_num %d used %d\n",
+ __func__, frame->frame_num, frame->is_used);
+ if (frame->is_used == 2)
+ dpb_print(DECODE_ID(hw), PRINT_FLAG_VDEC_STATUS,
+ "%s No top_field !! frame_num %d used %d\n",
+ __func__, frame->frame_num, frame->is_used);
+ }
+ else {
+ frame->data_flag |= ERROR_FLAG;
+ dpb_print(DECODE_ID(hw), PRINT_FLAG_ERRORFLAG_DBG,
"%s Error frame_num %d used %d\n",
__func__, frame->frame_num, frame->is_used);
- frame->data_flag |= ERROR_FLAG;
+ }
+
}
if (vdec_stream_based(vdec) && !(frame->data_flag & NODISP_FLAG)) {
if ((vdec->vbuf.no_parser == 0) || (vdec->vbuf.use_ptsserv)) {
vf->pts, vf->pts_us64, bForceInterlace);
}
}
+
+ if (hw->i_only) {
+ if (vf_count == 1 && frame->is_used == 1 && frame->top_field
+ && frame->bottom_field == NULL && frame->frame == NULL) {
+ vf->type =
+ VIDTYPE_INTERLACE_FIRST |
+ nv_order;
+ vf->type |= VIDTYPE_INTERLACE_TOP;
+ vf->duration = vf->duration/2;
+ }
+
+ if (vf_count == 1 && frame->is_used == 2 && frame->bottom_field
+ && frame->top_field == NULL && frame->frame == NULL) {
+ vf->type =
+ VIDTYPE_INTERLACE_FIRST |
+ nv_order;
+ vf->type |= VIDTYPE_INTERLACE_BOTTOM;
+ vf->duration = vf->duration/2;
+ }
+ }
+
if (i == 0) {
struct vdec_s *pvdec;
struct vdec_info vs;