Hi again! For us it is very important to use nvv4l2decoder in our pipeline after seeking, so I found a tricky solution for the problem: I use
filesrc location=video.mkv ! matroskademux name=demuxer demuxer.video_0 ! identity name=tmp ! fakesink name=fakesink for seek to closest key frame (before target time point) and at
GST_SEGMENT_EVENT I change the pipeline dynamically (via blocking pad callback) to
filesrc location=video.mkv ! matroskademux name=demuxer demuxer.video_0 ! identity name=tmp ! nvv4l2decoder ! nvvidconv ! video/x-raw ! appsink name=sink emit-signals=true sync=false. BUT there is another problem:
NvMMLiteOpen : Block : BlockType = 280
NVMEDIA: Reading vendor.tegra.display-size : status: 6
NvMMLiteBlockCreate : Block : BlockType = 280
VP9: Warning! Resolution change is happening on Non-Key frame, Use SetMaxRes attribute...
VP9 : KeyFrameResolution = (0, 0), Non-Key Frame Resolution = (1920, 1080)
Error in ParseUncompressedVP9
And it also produces deadlock. It happens much-much rarely then previous problem, but it is still a problem. I can’t understand why it happens, because, if I understand rightly, key frame must be pushed to pipeline directly after
GST_EVENT_SEGMENT. And why vp9 key frame (in case of error) is (0, 0)? It happens even if I explicitly set caps for nvv4l2decoder during dynamic pipeline change.
Bellow you can find modified minimal example (with dynamic pipeline change):
seek_bug_min_ex_mod.zip (9.9 KB)