[FFmpeg-cvslog] lavc/h264_parser: export field order in more cases
Rodger Combs
git at videolan.org
Mon Oct 24 09:50:14 EEST 2016
ffmpeg | branch: master | Rodger Combs <rodger.combs at gmail.com> | Mon Oct 3 21:45:56 2016 -0500| [f271a9bd991be4ce8d230b7dc6a0e56ca64b195c] | committer: Rodger Combs
lavc/h264_parser: export field order in more cases
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=f271a9bd991be4ce8d230b7dc6a0e56ca64b195c
---
libavcodec/h264_parser.c | 16 +++++++++++++++-
1 file changed, 15 insertions(+), 1 deletion(-)
diff --git a/libavcodec/h264_parser.c b/libavcodec/h264_parser.c
index 3ed7d77..bca0071 100644
--- a/libavcodec/h264_parser.c
+++ b/libavcodec/h264_parser.c
@@ -61,6 +61,7 @@ typedef struct H264ParseContext {
int parse_history_count;
int parse_last_mb;
int64_t reference_dts;
+ int last_frame_num, last_picture_structure;
} H264ParseContext;
@@ -528,7 +529,19 @@ static inline int parse_nal_units(AVCodecParserContext *s,
s->picture_structure = AV_PICTURE_STRUCTURE_TOP_FIELD;
else
s->picture_structure = AV_PICTURE_STRUCTURE_BOTTOM_FIELD;
- s->field_order = AV_FIELD_UNKNOWN;
+ 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;
+ }
+ p->last_picture_structure = s->picture_structure;
+ p->last_frame_num = p->poc.frame_num;
}
av_freep(&nal.rbsp_buffer);
@@ -677,6 +690,7 @@ static av_cold int init(AVCodecParserContext *s)
H264ParseContext *p = s->priv_data;
p->reference_dts = AV_NOPTS_VALUE;
+ p->last_frame_num = INT_MAX;
ff_h264dsp_init(&p->h264dsp, 8, 1);
return 0;
}
More information about the ffmpeg-cvslog
mailing list