lavc/h264_parser: export field order in more cases
This commit is contained in:
parent
d13740f3a2
commit
f271a9bd99
@ -61,6 +61,7 @@ typedef struct H264ParseContext {
|
|||||||
int parse_history_count;
|
int parse_history_count;
|
||||||
int parse_last_mb;
|
int parse_last_mb;
|
||||||
int64_t reference_dts;
|
int64_t reference_dts;
|
||||||
|
int last_frame_num, last_picture_structure;
|
||||||
} H264ParseContext;
|
} H264ParseContext;
|
||||||
|
|
||||||
|
|
||||||
@ -528,8 +529,20 @@ static inline int parse_nal_units(AVCodecParserContext *s,
|
|||||||
s->picture_structure = AV_PICTURE_STRUCTURE_TOP_FIELD;
|
s->picture_structure = AV_PICTURE_STRUCTURE_TOP_FIELD;
|
||||||
else
|
else
|
||||||
s->picture_structure = AV_PICTURE_STRUCTURE_BOTTOM_FIELD;
|
s->picture_structure = AV_PICTURE_STRUCTURE_BOTTOM_FIELD;
|
||||||
|
if (p->poc.frame_num == p->last_frame_num &&
|
||||||
|
p->last_picture_structure != AV_PICTURE_STRUCTURE_UNKNOWN &&
|
||||||
|
p->last_picture_structure != AV_PICTURE_STRUCTURE_FRAME &&
|
||||||
|
p->last_picture_structure != s->picture_structure) {
|
||||||
|
if (p->last_picture_structure == AV_PICTURE_STRUCTURE_TOP_FIELD)
|
||||||
|
s->field_order = AV_FIELD_TT;
|
||||||
|
else
|
||||||
|
s->field_order = AV_FIELD_BB;
|
||||||
|
} else {
|
||||||
s->field_order = AV_FIELD_UNKNOWN;
|
s->field_order = AV_FIELD_UNKNOWN;
|
||||||
}
|
}
|
||||||
|
p->last_picture_structure = s->picture_structure;
|
||||||
|
p->last_frame_num = p->poc.frame_num;
|
||||||
|
}
|
||||||
|
|
||||||
av_freep(&nal.rbsp_buffer);
|
av_freep(&nal.rbsp_buffer);
|
||||||
return 0; /* no need to evaluate the rest */
|
return 0; /* no need to evaluate the rest */
|
||||||
@ -677,6 +690,7 @@ static av_cold int init(AVCodecParserContext *s)
|
|||||||
H264ParseContext *p = s->priv_data;
|
H264ParseContext *p = s->priv_data;
|
||||||
|
|
||||||
p->reference_dts = AV_NOPTS_VALUE;
|
p->reference_dts = AV_NOPTS_VALUE;
|
||||||
|
p->last_frame_num = INT_MAX;
|
||||||
ff_h264dsp_init(&p->h264dsp, 8, 1);
|
ff_h264dsp_init(&p->h264dsp, 8, 1);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user