Skip to content
GitLab
Projects Groups Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in / Register
  • gst-plugins-good gst-plugins-good
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 646
    • Issues 646
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 71
    • Merge requests 71
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Packages and registries
    • Packages and registries
    • Container Registry
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • GStreamerGStreamer
  • gst-plugins-goodgst-plugins-good
  • Issues
  • #436
Closed
Open
Issue created Jan 31, 2018 by Bugzilla Migration User@bugzilla-migration

Imagefreeze element does not change the buffer on GST_SEEK_FLAG_FLUSH seek event

Submitted by Liene

Link to original bug (#793065)

Description

Even if the pipeline makes the seek with GST_SEEK_FLAG_FLUSH, autovideosink receives from imagefreeze the same buffer as before. So obviously imagefreez does not change the buffer. When I make a query on position, i see that position is changed relevant to seek request.

Pipeline in use : filesrc location=/path/0.mkv ! matroskademux ! avdec_h264 ! imagefreeze name=frz ! videoconvert ! autovideosink;

Main steps in code :

gst_element_query_position (data->pipeline, GST_FORMAT_TIME, &position);

and

seek_event = gst_event_new_seek (data->rate, GST_FORMAT_TIME, (GstSeekFlags)(GST_SEEK_FLAG_FLUSH),GST_SEEK_TYPE_SET, pos, GST_SEEK_TYPE_NONE, 0);

And console output with GST_DEBUG=3,imagefreeze*:6 reports:

0:00:17.220709175 31321 0xcdb590 DEBUG imagefreeze gstimagefreeze.c:681:gst_image_freeze_sink_chain:imagefreeze0:sink Already have a buffer, dropping

Absolute seek
Current position 0:00:16.961000000, new position 0:00:11.961000000
0:00:17.224094233 31321 0xcdb590 DEBUG imagefreeze gstimagefreeze.c:681:gst_image_freeze_sink_chain:imagefreeze0:sink Already have a buffer, dropping
0:00:17.227798715 31321 0xcc7c30 LOG imagefreeze gstimagefreeze.c:554:gst_image_freeze_src_event:imagefreeze0:src Got seek event
0:00:17.227876106 31321 0x7f3b9c014f20 DEBUG imagefreeze gstimagefreeze.c:801:gst_image_freeze_src_loop:imagefreeze0:src Pushing buffer resulted in flushing
0:00:17.227903018 31321 0x7f3b9c014f20 LOG imagefreeze gstimagefreeze.c:819:gst_image_freeze_src_loop:<imagefreeze0> pausing task, reason flushing
0:00:17.227947396 31321 0xcc7c30 DEBUG imagefreeze gstimagefreeze.c:647:gst_image_freeze_src_event:imagefreeze0:src Seek successful
0:00:17.228017578 31321 0x7f3b9c014f20 DEBUG imagefreeze gstimagefreeze.c:728:gst_image_freeze_src_loop:imagefreeze0:src Pushing SEGMENT event: time segment start=0:00:11.961000000, offset=0:00:00.000000000, stop=99:99:99.999999999, rate=1.000000, applied_rate=1.000000, flags=0x01, time=0:00:11.961000000, base=0:00:00.000000000, position 0:00:11.961000000, duration 99:99:99.999999999
0:00:17.228077464 31321 0x7f3b9c014f20 DEBUG imagefreeze gstimagefreeze.c:791:gst_image_freeze_src_loop:imagefreeze0:src Handling buffer with timestamp 0:00:11.960000000
0:00:17.229690575 31321 0xcdb590 DEBUG imagefreeze gstimagefreeze.c:681:gst_image_freeze_sink_chain:imagefreeze0:sink Already have a buffer, dropping

Note that i tried some ways like changing target (pipeline, sink, imagefreeze) on which sink event applied. Also tested different versions like (GST_SEEK_FLAG_FLUSH, GST_SEEK_FLAG_SEGMENT), but imagefreeze also fails to change the buffer.

Version: 1.12.2

Assignee
Assign to
Time tracking