diff options
Diffstat (limited to 'fftools/ffmpeg.c')
-rw-r--r-- | fftools/ffmpeg.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/fftools/ffmpeg.c b/fftools/ffmpeg.c index a9bb9d964d..5365f711e5 100644 --- a/fftools/ffmpeg.c +++ b/fftools/ffmpeg.c @@ -535,6 +535,7 @@ static void ffmpeg_cleanup(int ret) av_frame_free(&frame); } av_fifo_freep(&ifilter->frame_queue); + av_freep(&ifilter->displaymatrix); if (ist->sub2video.sub_queue) { while (av_fifo_size(ist->sub2video.sub_queue)) { AVSubtitle sub; @@ -2183,6 +2184,7 @@ static int ifilter_has_all_input_formats(FilterGraph *fg) static int ifilter_send_frame(InputFilter *ifilter, AVFrame *frame) { FilterGraph *fg = ifilter->graph; + AVFrameSideData *sd; int need_reinit, ret, i; /* determine if the parameters for this input changed */ @@ -2207,6 +2209,12 @@ static int ifilter_send_frame(InputFilter *ifilter, AVFrame *frame) (ifilter->hw_frames_ctx && ifilter->hw_frames_ctx->data != frame->hw_frames_ctx->data)) need_reinit = 1; + if (sd = av_frame_get_side_data(frame, AV_FRAME_DATA_DISPLAYMATRIX)) { + if (!ifilter->displaymatrix || memcmp(sd->data, ifilter->displaymatrix, sizeof(int32_t) * 9)) + need_reinit = 1; + } else if (ifilter->displaymatrix) + need_reinit = 1; + if (need_reinit) { ret = ifilter_parameters_from_frame(ifilter, frame); if (ret < 0) |