I managed to almost do it with valve
.
If I just record and press “Stop” it works fine.
Pausing is now done by setting valve
property drop
to TRUE
and unpausing by setting it to FALSE
. If I click “Stop” while the recording is paused (i.e. drop
= TRUE
) the entire application freezes, but if I continue the recording and then stop the application works normally. So should I always set drop
to TRUE
when a user clicks “Stop” or is there a better way?
Also, pausing and unpausing produce a corrupted file. MPV gives me these errors.
Playing: Untitled.mkv
(+) Video --vid=1 (*) 'Video' (rawvideo 640x480 30.000fps)
[autoconvert] Converting yuyv422 -> yuv422p
VO: [gpu] 640x480 yuv422p
V: 00:00:00 / 00:00:11 (4%)
[mkv] Corrupt file detected. Trying to resync starting from position 7373405...
V: 00:00:00 / 00:00:11 (8%)
[mkv] Cluster found at 14746363.
V: 00:00:06 / 00:00:11 (58%)
[mkv] Corrupt file detected. Trying to resync starting from position 31335548...
V: 00:00:06 / 00:00:11 (59%)
[mkv] Cluster found at 43009425.
V: 00:00:00 / 00:00:12 (4%)
[mkv] Corrupt file detected. Trying to resync starting from position 7373405...
[mkv] Cluster found at 14746363.
V: 00:00:01 / 00:00:12 (15%)
Exiting... (Quit)
When the file is played it freezes there where I paused the recording.
Again, if I just stop the application the produced file is fine. I guess I should just use gst_pad_set_offset()
, as you have pointed out, but how can I get the duration that I need to supply? And can I apply it to the source pad of queue that forwards data to the file?