summaryrefslogtreecommitdiff
path: root/libavcodec
diff options
context:
space:
mode:
authorKieran Kunhya <kieran@kunhya.com>2015-06-26 21:55:06 +0100
committerMichael Niedermayer <michaelni@gmx.at>2015-06-26 23:11:17 +0200
commit22291c372fa703242e8429bed61700ba81258f19 (patch)
treede9ee9e07cde6b602d5515bb5c23a983f867cdd4 /libavcodec
parentb75c0a72ed3bb5fab0a0b66ede94f6de887db585 (diff)
downloadffmpeg-22291c372fa703242e8429bed61700ba81258f19.tar.gz
avcodec: Add support for per-frame AFD output in h264
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec')
-rw-r--r--libavcodec/h264.c10
-rw-r--r--libavcodec/h264.h3
-rw-r--r--libavcodec/h264_sei.c6
3 files changed, 19 insertions, 0 deletions
diff --git a/libavcodec/h264.c b/libavcodec/h264.c
index 9be317c55f..1cbd4cbee8 100644
--- a/libavcodec/h264.c
+++ b/libavcodec/h264.c
@@ -608,6 +608,7 @@ static int h264_init_context(AVCodecContext *avctx, H264Context *h)
h->frame_recovered = 0;
h->prev_frame_num = -1;
h->sei_fpa.frame_packing_arrangement_cancel_flag = -1;
+ h->has_afd = 0;
h->next_outputed_poc = INT_MIN;
for (i = 0; i < MAX_DELAYED_PIC_COUNT; i++)
@@ -869,6 +870,15 @@ static void decode_postinit(H264Context *h, int setup_finished)
}
}
+ if (h->has_afd) {
+ AVFrameSideData *sd =
+ av_frame_new_side_data(cur->f, AV_FRAME_DATA_AFD, 1);
+ if (sd) {
+ *sd->data = h->afd;
+ h->has_afd = 0;
+ }
+ }
+
cur->mmco_reset = h->mmco_reset;
h->mmco_reset = 0;
diff --git a/libavcodec/h264.h b/libavcodec/h264.h
index 548510d793..7565e031d5 100644
--- a/libavcodec/h264.h
+++ b/libavcodec/h264.h
@@ -781,6 +781,9 @@ typedef struct H264Context {
int missing_fields;
+ uint8_t afd;
+ int has_afd;
+
// Timestamp stuff
int sei_buffering_period_present; ///< Buffering period SEI flag
diff --git a/libavcodec/h264_sei.c b/libavcodec/h264_sei.c
index 8e1697a31e..b6ec5c7de9 100644
--- a/libavcodec/h264_sei.c
+++ b/libavcodec/h264_sei.c
@@ -132,7 +132,13 @@ static int decode_user_data_itu_t_t35(H264Context *h, int size)
return -1;
skip_bits(&h->gb, 4);
dtg_active_format = get_bits(&h->gb, 4);
+#if FF_API_AFD
+FF_DISABLE_DEPRECATION_WARNINGS
h->avctx->dtg_active_format = dtg_active_format;
+FF_ENABLE_DEPRECATION_WARNINGS
+#endif /* FF_API_AFD */
+ h->has_afd = 1;
+ h->afd = dtg_active_format;
} else {
skip_bits(&h->gb, 6);
}