mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-19 23:06:49 +00:00
validate: Handle buffer pts/dts/duration in the appsrc-push action
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3052>
This commit is contained in:
parent
d2b4e7a38e
commit
e290e7913c
2 changed files with 60 additions and 3 deletions
|
@ -1080,12 +1080,16 @@ appsrc-push,
|
||||||
file-name=(string),
|
file-name=(string),
|
||||||
target-element-name=(string),
|
target-element-name=(string),
|
||||||
[caps=(caps)],
|
[caps=(caps)],
|
||||||
|
[dts=(GstClockTime)],
|
||||||
|
[duration=(GstClockTime)],
|
||||||
[offset=(uint64)],
|
[offset=(uint64)],
|
||||||
|
[pts=(GstClockTime)],
|
||||||
|
[segment=((GstStructure)segment,[start=(GstClockTime)][stop=(GstClockTime)][base=(GstClockTime)][offset=(GstClockTime)][time=(GstClockTime)][postion=(GstClockTime)][duration=(GstClockTime)])],
|
||||||
[size=(uint64)],
|
[size=(uint64)],
|
||||||
[playback-time=(double,string)];
|
[playback-time=(double,string)];
|
||||||
```
|
```
|
||||||
|
|
||||||
Queues a buffer in an appsrc. If the pipeline state allows flow of buffers, the next action is not run until the buffer has been pushed.
|
Queues a sample in an appsrc. If the pipeline state allows flow of buffers, the next action is not run until the buffer has been pushed.
|
||||||
* Implementer namespace: core
|
* Implementer namespace: core
|
||||||
|
|
||||||
### Parameters
|
### Parameters
|
||||||
|
@ -1104,12 +1108,36 @@ Queues a buffer in an appsrc. If the pipeline state allows flow of buffers, the
|
||||||
|
|
||||||
Default: (null)
|
Default: (null)
|
||||||
|
|
||||||
|
* `dts`:(optional): Buffer DTS
|
||||||
|
|
||||||
|
Possible types: `GstClockTime`
|
||||||
|
|
||||||
|
Default: (null)
|
||||||
|
|
||||||
|
* `duration`:(optional): Buffer duration
|
||||||
|
|
||||||
|
Possible types: `GstClockTime`
|
||||||
|
|
||||||
|
Default: (null)
|
||||||
|
|
||||||
* `offset`:(optional): Offset within the file where the buffer will start
|
* `offset`:(optional): Offset within the file where the buffer will start
|
||||||
|
|
||||||
Possible types: `uint64`
|
Possible types: `uint64`
|
||||||
|
|
||||||
Default: (null)
|
Default: (null)
|
||||||
|
|
||||||
|
* `pts`:(optional): Buffer PTS
|
||||||
|
|
||||||
|
Possible types: `GstClockTime`
|
||||||
|
|
||||||
|
Default: (null)
|
||||||
|
|
||||||
|
* `segment`:(optional): The GstSegment to configure as part of the sample
|
||||||
|
|
||||||
|
Possible types: `(GstStructure)segment,[start=(GstClockTime)][stop=(GstClockTime)][base=(GstClockTime)][offset=(GstClockTime)][time=(GstClockTime)][postion=(GstClockTime)][duration=(GstClockTime)]`
|
||||||
|
|
||||||
|
Default: (null)
|
||||||
|
|
||||||
* `size`:(optional): Number of bytes from the file that will be pushed as a buffer
|
* `size`:(optional): Number of bytes from the file that will be pushed as a buffer
|
||||||
|
|
||||||
Possible types: `uint64`
|
Possible types: `uint64`
|
||||||
|
|
|
@ -3621,7 +3621,7 @@ _execute_appsrc_push (GstValidateScenario * scenario,
|
||||||
GstBuffer *buffer;
|
GstBuffer *buffer;
|
||||||
guint64 offset = 0;
|
guint64 offset = 0;
|
||||||
guint64 size = 0, read;
|
guint64 size = 0, read;
|
||||||
gint push_buffer_ret;
|
gint push_sample_ret;
|
||||||
gboolean wait;
|
gboolean wait;
|
||||||
GFileInfo *finfo = NULL;
|
GFileInfo *finfo = NULL;
|
||||||
GFile *f = NULL;
|
GFile *f = NULL;
|
||||||
|
@ -3629,6 +3629,9 @@ _execute_appsrc_push (GstValidateScenario * scenario,
|
||||||
GstPad *peer_pad = NULL;
|
GstPad *peer_pad = NULL;
|
||||||
GInputStream *stream = NULL;
|
GInputStream *stream = NULL;
|
||||||
GstValidateExecuteActionReturn res;
|
GstValidateExecuteActionReturn res;
|
||||||
|
GstSegment segment;
|
||||||
|
GstCaps *caps = NULL;
|
||||||
|
GstSample *sample;
|
||||||
|
|
||||||
/* We will only wait for the the buffer to be pushed if we are in a state
|
/* We will only wait for the the buffer to be pushed if we are in a state
|
||||||
* that allows flow of buffers (>=PAUSED). Otherwise the buffer will just
|
* that allows flow of buffers (>=PAUSED). Otherwise the buffer will just
|
||||||
|
@ -3675,7 +3678,15 @@ _execute_appsrc_push (GstValidateScenario * scenario,
|
||||||
"Could read enough data, only read: %" G_GUINT64_FORMAT, read);
|
"Could read enough data, only read: %" G_GUINT64_FORMAT, read);
|
||||||
|
|
||||||
buffer = gst_buffer_new_wrapped (file_contents, size);
|
buffer = gst_buffer_new_wrapped (file_contents, size);
|
||||||
file_contents = NULL;
|
gst_validate_action_get_clocktime (scenario,
|
||||||
|
action, "pts", &GST_BUFFER_PTS (buffer)
|
||||||
|
);
|
||||||
|
gst_validate_action_get_clocktime (scenario,
|
||||||
|
action, "dts", &GST_BUFFER_DTS (buffer)
|
||||||
|
);
|
||||||
|
gst_validate_action_get_clocktime (scenario,
|
||||||
|
action, "duration", &GST_BUFFER_DURATION (buffer)
|
||||||
|
);
|
||||||
|
|
||||||
{
|
{
|
||||||
const GValue *caps_value;
|
const GValue *caps_value;
|
||||||
|
@ -7263,6 +7274,24 @@ register_action_types (void)
|
||||||
.mandatory = FALSE,
|
.mandatory = FALSE,
|
||||||
.types = "caps"
|
.types = "caps"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.name = "pts",
|
||||||
|
.description = "Buffer PTS",
|
||||||
|
.mandatory = FALSE,
|
||||||
|
.types = "GstClockTime"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.name = "dts",
|
||||||
|
.description = "Buffer DTS",
|
||||||
|
.mandatory = FALSE,
|
||||||
|
.types = "GstClockTime"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.name = "duration",
|
||||||
|
.description = "Buffer duration",
|
||||||
|
.mandatory = FALSE,
|
||||||
|
.types = "GstClockTime"
|
||||||
|
},
|
||||||
{NULL}
|
{NULL}
|
||||||
}),
|
}),
|
||||||
"Queues a buffer in an appsrc. If the pipeline state allows flow of buffers, the next action is not run until the buffer has been pushed.",
|
"Queues a buffer in an appsrc. If the pipeline state allows flow of buffers, the next action is not run until the buffer has been pushed.",
|
||||||
|
|
Loading…
Reference in a new issue