From f9ea2860b5fd8877ec4aa45c63ae4db98847a252 Mon Sep 17 00:00:00 2001
From: Yogender Gupta <ygupta@nvidia.com>
Date: Fri, 11 Nov 2016 10:56:17 +0530
Subject: [PATCH] ffmpeg : Fix hwaccel transcoding

---
 ffmpeg.c        |  2 +-
 ffmpeg.h        |  2 +-
 ffmpeg_filter.c | 11 +++++++----
 ffmpeg_opt.c    |  2 +-
 4 files changed, 10 insertions(+), 7 deletions(-)

diff --git a/ffmpeg.c b/ffmpeg.c
index 067ef1d..6c69a90 100644
--- a/ffmpeg.c
+++ b/ffmpeg.c
@@ -3336,7 +3336,7 @@ static int transcode_init(void)
 
                     if (dec_ctx) {
                         ret = ifilter_parameters_from_decoder(fg->inputs[0],
-                                                              dec_ctx);
+                                                              ist);
                         if (ret < 0) {
                             av_log(NULL, AV_LOG_FATAL, "Error initializing filter input\n");
                             exit_program(1);
diff --git a/ffmpeg.h b/ffmpeg.h
index 49924a3..adc6af1 100644
--- a/ffmpeg.h
+++ b/ffmpeg.h
@@ -616,7 +616,7 @@ int init_simple_filtergraph(InputStream *ist, OutputStream *ost);
 int init_complex_filtergraph(FilterGraph *fg);
 
 int ifilter_parameters_from_frame(InputFilter *ifilter, const AVFrame *frame);
-int ifilter_parameters_from_decoder(InputFilter *ifilter, const AVCodecContext *avctx);
+int ifilter_parameters_from_decoder(InputFilter *ifilter, InputStream *ist);
 
 int ffmpeg_parse_options(int argc, char **argv);
 
diff --git a/ffmpeg_filter.c b/ffmpeg_filter.c
index 2a9be64..674f193 100644
--- a/ffmpeg_filter.c
+++ b/ffmpeg_filter.c
@@ -1122,8 +1122,10 @@ int ifilter_parameters_from_frame(InputFilter *ifilter, const AVFrame *frame)
     return 0;
 }
 
-int ifilter_parameters_from_decoder(InputFilter *ifilter, const AVCodecContext *avctx)
+int ifilter_parameters_from_decoder(InputFilter *ifilter, InputStream *ist)
 {
+    const AVCodecContext *avctx = ist->dec_ctx;
+
     av_buffer_unref(&ifilter->hw_frames_ctx);
 
     if (avctx->codec_type == AVMEDIA_TYPE_VIDEO)
@@ -1142,9 +1144,10 @@ int ifilter_parameters_from_decoder(InputFilter *ifilter, const AVCodecContext *
     ifilter->channels            = avctx->channels;
     ifilter->channel_layout      = avctx->channel_layout;
 
-    if (avctx->hw_frames_ctx) {
-        ifilter->hw_frames_ctx = av_buffer_ref(avctx->hw_frames_ctx);
-        if (!ifilter->hw_frames_ctx)
+    if (ist->hw_frames_ctx) {
+        ifilter->format = ist->resample_pix_fmt;
+        ifilter->hw_frames_ctx = av_buffer_ref(ist->hw_frames_ctx);
+        if (!ist->hw_frames_ctx)
             return AVERROR(ENOMEM);
     }
 
diff --git a/ffmpeg_opt.c b/ffmpeg_opt.c
index 29d0bed..455e49d 100644
--- a/ffmpeg_opt.c
+++ b/ffmpeg_opt.c
@@ -2018,7 +2018,7 @@ static int configure_complex_filters(void)
 
         for (j = 0; j < fg->nb_inputs; j++) {
             ret = ifilter_parameters_from_decoder(fg->inputs[j],
-                                                  fg->inputs[j]->ist->dec_ctx);
+                                                  fg->inputs[j]->ist);
             if (ret < 0) {
                 av_log(NULL, AV_LOG_ERROR,
                        "Error initializing filtergraph %d input %d\n", i, j);
-- 
2.10.1.windows.1

