summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gst-libs/gst/video/gstvideometa.c24
-rw-r--r--gst-libs/gst/video/gstvideometa.h10
-rw-r--r--gst-libs/gst/video/gstvideopool.c3
-rw-r--r--gst-libs/gst/video/video.c15
-rw-r--r--gst-libs/gst/video/video.h34
5 files changed, 52 insertions, 34 deletions
diff --git a/gst-libs/gst/video/gstvideometa.c b/gst-libs/gst/video/gstvideometa.c
index 2c970c6c7..f8d14aafa 100644
--- a/gst-libs/gst/video/gstvideometa.c
+++ b/gst-libs/gst/video/gstvideometa.c
@@ -39,8 +39,8 @@ gst_video_meta_transform (GstBuffer * dest, GstMeta * meta,
dmeta->buffer = dest;
GST_DEBUG ("copy video metadata");
- dmeta->flags = smeta->flags;
dmeta->format = smeta->format;
+ dmeta->frame_flags = smeta->frame_flags;
dmeta->id = smeta->id;
dmeta->width = smeta->width;
dmeta->height = smeta->height;
@@ -164,8 +164,8 @@ default_unmap (GstVideoMeta * meta, guint plane, GstMapInfo * info)
/**
* gst_buffer_add_video_meta:
* @buffer: a #GstBuffer
- * @flags: #GstVideoFlags
* @format: a #GstVideoFormat
+ * @frame_flags: #GstVideoFrameFlags
* @width: the width
* @height: the height
*
@@ -178,16 +178,18 @@ default_unmap (GstVideoMeta * meta, guint plane, GstMapInfo * info)
* Returns: the #GstVideoMeta on @buffer.
*/
GstVideoMeta *
-gst_buffer_add_video_meta (GstBuffer * buffer, GstVideoFlags flags,
- GstVideoFormat format, guint width, guint height)
+gst_buffer_add_video_meta (GstBuffer * buffer,
+ GstVideoFormat format, GstVideoFrameFlags frame_flags, guint width,
+ guint height)
{
GstVideoMeta *meta;
GstVideoInfo info;
gst_video_info_set_format (&info, format, width, height);
- meta = gst_buffer_add_video_meta_full (buffer, flags, format, width, height,
- info.finfo->n_planes, info.offset, info.stride);
+ meta =
+ gst_buffer_add_video_meta_full (buffer, format, frame_flags, width,
+ height, info.finfo->n_planes, info.offset, info.stride);
return meta;
}
@@ -195,8 +197,8 @@ gst_buffer_add_video_meta (GstBuffer * buffer, GstVideoFlags flags,
/**
* gst_buffer_add_video_meta_full:
* @buffer: a #GstBuffer
- * @flags: #GstVideoFlags
* @format: a #GstVideoFormat
+ * @frame_flags: #GstVideoFrameFlags
* @width: the width
* @height: the height
* @n_planes: number of planes
@@ -208,9 +210,9 @@ gst_buffer_add_video_meta (GstBuffer * buffer, GstVideoFlags flags,
* Returns: the #GstVideoMeta on @buffer.
*/
GstVideoMeta *
-gst_buffer_add_video_meta_full (GstBuffer * buffer, GstVideoFlags flags,
- GstVideoFormat format, guint width, guint height,
- guint n_planes, gsize offset[GST_VIDEO_MAX_PLANES],
+gst_buffer_add_video_meta_full (GstBuffer * buffer,
+ GstVideoFormat format, GstVideoFrameFlags frame_flags, guint width,
+ guint height, guint n_planes, gsize offset[GST_VIDEO_MAX_PLANES],
gint stride[GST_VIDEO_MAX_PLANES])
{
GstVideoMeta *meta;
@@ -219,8 +221,8 @@ gst_buffer_add_video_meta_full (GstBuffer * buffer, GstVideoFlags flags,
meta =
(GstVideoMeta *) gst_buffer_add_meta (buffer, GST_VIDEO_META_INFO, NULL);
- meta->flags = flags;
meta->format = format;
+ meta->frame_flags = frame_flags;
meta->id = 0;
meta->width = width;
meta->height = height;
diff --git a/gst-libs/gst/video/gstvideometa.h b/gst-libs/gst/video/gstvideometa.h
index a9d77d780..097d0a09c 100644
--- a/gst-libs/gst/video/gstvideometa.h
+++ b/gst-libs/gst/video/gstvideometa.h
@@ -58,8 +58,8 @@ struct _GstVideoMeta {
GstBuffer *buffer;
- GstVideoFlags flags;
GstVideoFormat format;
+ GstVideoFrameFlags frame_flags;
gint id;
guint width;
guint height;
@@ -79,10 +79,10 @@ const GstMetaInfo * gst_video_meta_get_info (void);
#define gst_buffer_get_video_meta(b) ((GstVideoMeta*)gst_buffer_get_meta((b),GST_VIDEO_META_API_TYPE))
GstVideoMeta * gst_buffer_get_video_meta_id (GstBuffer *buffer, gint id);
-GstVideoMeta * gst_buffer_add_video_meta (GstBuffer *buffer, GstVideoFlags flags,
- GstVideoFormat format, guint width, guint height);
-GstVideoMeta * gst_buffer_add_video_meta_full (GstBuffer *buffer, GstVideoFlags flags,
- GstVideoFormat format, guint width, guint height,
+GstVideoMeta * gst_buffer_add_video_meta (GstBuffer *buffer, GstVideoFormat format,
+ GstVideoFrameFlags frame_flags, guint width, guint height);
+GstVideoMeta * gst_buffer_add_video_meta_full (GstBuffer *buffer, GstVideoFormat format,
+ GstVideoFrameFlags frame_flags, guint width, guint height,
guint n_planes, gsize offset[GST_VIDEO_MAX_PLANES],
gint stride[GST_VIDEO_MAX_PLANES]);
diff --git a/gst-libs/gst/video/gstvideopool.c b/gst-libs/gst/video/gstvideopool.c
index 6246d37f0..c0f9bad58 100644
--- a/gst-libs/gst/video/gstvideopool.c
+++ b/gst-libs/gst/video/gstvideopool.c
@@ -260,7 +260,8 @@ video_buffer_pool_alloc (GstBufferPool * pool, GstBuffer ** buffer,
if (priv->add_videometa) {
GST_DEBUG_OBJECT (pool, "adding GstVideoMeta");
- gst_buffer_add_video_meta_full (*buffer, 0, GST_VIDEO_INFO_FORMAT (info),
+ gst_buffer_add_video_meta_full (*buffer, GST_VIDEO_INFO_FORMAT (info),
+ GST_VIDEO_FRAME_FLAG_NONE,
GST_VIDEO_INFO_WIDTH (info), GST_VIDEO_INFO_HEIGHT (info),
GST_VIDEO_INFO_N_PLANES (info), info->offset, info->stride);
}
diff --git a/gst-libs/gst/video/video.c b/gst-libs/gst/video/video.c
index de66de5f1..2fe216f68 100644
--- a/gst-libs/gst/video/video.c
+++ b/gst-libs/gst/video/video.c
@@ -1030,12 +1030,15 @@ gst_video_frame_map_id (GstVideoFrame * frame, GstVideoInfo * info,
else
meta = gst_buffer_get_video_meta_id (buffer, id);
+ /* copy the info */
+ frame->info = *info;
+
if (meta) {
- frame->info.flags = meta->flags;
frame->info.finfo = &formats[meta->format].info;
frame->info.width = meta->width;
frame->info.height = meta->height;
frame->id = meta->id;
+ frame->frame_flags = meta->frame_flags;
for (i = 0; i < info->finfo->n_planes; i++)
gst_video_meta_map (meta, i, &frame->map[i], &frame->data[i],
@@ -1046,9 +1049,15 @@ gst_video_frame_map_id (GstVideoFrame * frame, GstVideoInfo * info,
if (id != -1)
goto no_metadata;
- /* copy the info */
- frame->info = *info;
frame->id = id;
+ frame->frame_flags = 0;
+
+ if (GST_BUFFER_FLAG_IS_SET (buffer, GST_VIDEO_BUFFER_FLAG_TFF))
+ frame->frame_flags |= GST_VIDEO_FRAME_FLAG_TFF;
+ if (GST_BUFFER_FLAG_IS_SET (buffer, GST_VIDEO_BUFFER_FLAG_RFF))
+ frame->frame_flags |= GST_VIDEO_FRAME_FLAG_RFF;
+ if (GST_BUFFER_FLAG_IS_SET (buffer, GST_VIDEO_BUFFER_FLAG_ONEFIELD))
+ frame->frame_flags |= GST_VIDEO_FRAME_FLAG_ONEFIELD;
gst_buffer_map (buffer, &frame->map[0], flags);
diff --git a/gst-libs/gst/video/video.h b/gst-libs/gst/video/video.h
index 226c58931..4699baa18 100644
--- a/gst-libs/gst/video/video.h
+++ b/gst-libs/gst/video/video.h
@@ -329,10 +329,6 @@ typedef enum {
/**
* GstVideoFlags:
* @GST_VIDEO_FLAG_NONE: no flags
- * @GST_VIDEO_FLAG_INTERLACED: The video is interlaced
- * @GST_VIDEO_FLAG_TFF: The video has the top field first
- * @GST_VIDEO_FLAG_RFF: The video has the repeat flag
- * @GST_VIDEO_FLAG_ONEFIELD: one field
* @GST_VIDEO_FLAG_VARIABLE_FPS: a variable fps is selected, fps_n and fps_d
* denote the maximum fps of the video
*
@@ -340,11 +336,7 @@ typedef enum {
*/
typedef enum {
GST_VIDEO_FLAG_NONE = 0,
- GST_VIDEO_FLAG_INTERLACED = (1 << 0),
- GST_VIDEO_FLAG_TFF = (1 << 1),
- GST_VIDEO_FLAG_RFF = (1 << 2),
- GST_VIDEO_FLAG_ONEFIELD = (1 << 3),
- GST_VIDEO_FLAG_VARIABLE_FPS = (1 << 4)
+ GST_VIDEO_FLAG_VARIABLE_FPS = (1 << 0)
} GstVideoFlags;
/**
@@ -601,6 +593,21 @@ gboolean gst_video_info_convert (GstVideoInfo *info,
gint64 src_value,
GstFormat dest_format,
gint64 *dest_value);
+/**
+ * GstVideoFrameFlags:
+ * @GST_VIDEO_FRAME_FLAG_NONE: no flags
+ * @GST_VIDEO_FRAME_FLAG_TFF: The video frame has the top field first
+ * @GST_VIDEO_FRAME_FLAG_RFF: The video frame has the repeat flag
+ * @GST_VIDEO_FRAME_FLAG_ONEFIELD: The video frame has one field
+ *
+ * Extra video frame flags
+ */
+typedef enum {
+ GST_VIDEO_FRAME_FLAG_NONE = 0,
+ GST_VIDEO_FRAME_FLAG_TFF = (1 << 0),
+ GST_VIDEO_FRAME_FLAG_RFF = (1 << 1),
+ GST_VIDEO_FRAME_FLAG_ONEFIELD = (1 << 2)
+} GstVideoFrameFlags;
/**
* GstVideoFrame:
@@ -616,6 +623,7 @@ gboolean gst_video_info_convert (GstVideoInfo *info,
*/
struct _GstVideoFrame {
GstVideoInfo info;
+ GstVideoFrameFlags frame_flags;
GstBuffer *buffer;
gpointer meta;
@@ -693,7 +701,6 @@ gboolean gst_video_frame_copy_plane (GstVideoFrame *dest, const GstVideoFr
/**
* GstVideoBufferFlags:
- * @GST_VIDEO_BUFFER_FLAG_INTERLACED: Mark #GstBuffer as interlaced
* @GST_VIDEO_BUFFER_FLAG_TFF: If the #GstBuffer is interlaced, then the first field
* in the video frame is the top field. If unset, the
* bottom field is first.
@@ -707,10 +714,9 @@ gboolean gst_video_frame_copy_plane (GstVideoFrame *dest, const GstVideoFr
* Additional video buffer flags.
*/
typedef enum {
- GST_VIDEO_BUFFER_FLAG_INTERLACED = (GST_BUFFER_FLAG_LAST << 0),
- GST_VIDEO_BUFFER_FLAG_TFF = (GST_BUFFER_FLAG_LAST << 1),
- GST_VIDEO_BUFFER_FLAG_RFF = (GST_BUFFER_FLAG_LAST << 2),
- GST_VIDEO_BUFFER_FLAG_ONEFIELD = (GST_BUFFER_FLAG_LAST << 3),
+ GST_VIDEO_BUFFER_FLAG_TFF = (GST_BUFFER_FLAG_LAST << 0),
+ GST_VIDEO_BUFFER_FLAG_RFF = (GST_BUFFER_FLAG_LAST << 1),
+ GST_VIDEO_BUFFER_FLAG_ONEFIELD = (GST_BUFFER_FLAG_LAST << 2),
GST_VIDEO_BUFFER_FLAG_LAST = (GST_BUFFER_FLAG_LAST << 8)
} GstVideoBufferFlags;