mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-01-11 09:55:36 +00:00
omxh264enc: move profile and level parsing functions to their own files
Will allow to re-use them in the decoder element. https://bugzilla.gnome.org/show_bug.cgi?id=783114
This commit is contained in:
parent
043b417717
commit
1e570fed17
5 changed files with 127 additions and 65 deletions
|
@ -22,6 +22,7 @@ libgstomx_la_SOURCES = \
|
|||
gstomxmpeg4videodec.c \
|
||||
gstomxmpeg2videodec.c \
|
||||
gstomxh264dec.c \
|
||||
gstomxh264utils.c \
|
||||
gstomxh263dec.c \
|
||||
gstomxwmvdec.c \
|
||||
$(VP8_C_FILES) \
|
||||
|
@ -49,6 +50,7 @@ noinst_HEADERS = \
|
|||
gstomxmpeg2videodec.h \
|
||||
gstomxmpeg4videodec.h \
|
||||
gstomxh264dec.h \
|
||||
gstomxh264utils.h \
|
||||
gstomxh263dec.h \
|
||||
gstomxwmvdec.h \
|
||||
$(VP8_H_FILES) \
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
#include <gst/gst.h>
|
||||
|
||||
#include "gstomxh264enc.h"
|
||||
#include "gstomxh264utils.h"
|
||||
|
||||
#ifdef USE_OMX_TARGET_RPI
|
||||
#include <OMX_Broadcom.h>
|
||||
|
@ -233,69 +234,6 @@ gst_omx_h264_enc_stop (GstVideoEncoder * enc)
|
|||
return GST_VIDEO_ENCODER_CLASS (parent_class)->stop (enc);
|
||||
}
|
||||
|
||||
static OMX_VIDEO_AVCPROFILETYPE
|
||||
get_profile_from_str (const gchar * profile)
|
||||
{
|
||||
if (g_str_equal (profile, "baseline")) {
|
||||
return OMX_VIDEO_AVCProfileBaseline;
|
||||
} else if (g_str_equal (profile, "main")) {
|
||||
return OMX_VIDEO_AVCProfileMain;
|
||||
} else if (g_str_equal (profile, "extended")) {
|
||||
return OMX_VIDEO_AVCProfileExtended;
|
||||
} else if (g_str_equal (profile, "high")) {
|
||||
return OMX_VIDEO_AVCProfileHigh;
|
||||
} else if (g_str_equal (profile, "high-10")) {
|
||||
return OMX_VIDEO_AVCProfileHigh10;
|
||||
} else if (g_str_equal (profile, "high-4:2:2")) {
|
||||
return OMX_VIDEO_AVCProfileHigh422;
|
||||
} else if (g_str_equal (profile, "high-4:4:4")) {
|
||||
return OMX_VIDEO_AVCProfileHigh444;
|
||||
}
|
||||
|
||||
return OMX_VIDEO_AVCProfileMax;
|
||||
}
|
||||
|
||||
|
||||
static OMX_VIDEO_AVCLEVELTYPE
|
||||
get_level_from_str (const gchar * level)
|
||||
{
|
||||
if (g_str_equal (level, "1")) {
|
||||
return OMX_VIDEO_AVCLevel1;
|
||||
} else if (g_str_equal (level, "1b")) {
|
||||
return OMX_VIDEO_AVCLevel1b;
|
||||
} else if (g_str_equal (level, "1.1")) {
|
||||
return OMX_VIDEO_AVCLevel11;
|
||||
} else if (g_str_equal (level, "1.2")) {
|
||||
return OMX_VIDEO_AVCLevel12;
|
||||
} else if (g_str_equal (level, "1.3")) {
|
||||
return OMX_VIDEO_AVCLevel13;
|
||||
} else if (g_str_equal (level, "2")) {
|
||||
return OMX_VIDEO_AVCLevel2;
|
||||
} else if (g_str_equal (level, "2.1")) {
|
||||
return OMX_VIDEO_AVCLevel21;
|
||||
} else if (g_str_equal (level, "2.2")) {
|
||||
return OMX_VIDEO_AVCLevel22;
|
||||
} else if (g_str_equal (level, "3")) {
|
||||
return OMX_VIDEO_AVCLevel3;
|
||||
} else if (g_str_equal (level, "3.1")) {
|
||||
return OMX_VIDEO_AVCLevel31;
|
||||
} else if (g_str_equal (level, "3.2")) {
|
||||
return OMX_VIDEO_AVCLevel32;
|
||||
} else if (g_str_equal (level, "4")) {
|
||||
return OMX_VIDEO_AVCLevel4;
|
||||
} else if (g_str_equal (level, "4.1")) {
|
||||
return OMX_VIDEO_AVCLevel41;
|
||||
} else if (g_str_equal (level, "4.2")) {
|
||||
return OMX_VIDEO_AVCLevel42;
|
||||
} else if (g_str_equal (level, "5")) {
|
||||
return OMX_VIDEO_AVCLevel5;
|
||||
} else if (g_str_equal (level, "5.1")) {
|
||||
return OMX_VIDEO_AVCLevel51;
|
||||
}
|
||||
|
||||
return OMX_VIDEO_AVCLevelMax;
|
||||
}
|
||||
|
||||
/* Update OMX_VIDEO_PARAM_PROFILELEVELTYPE.{eProfile,eLevel}
|
||||
*
|
||||
* Returns TRUE if succeeded or if not supported, FALSE if failed */
|
||||
|
@ -607,13 +545,13 @@ gst_omx_h264_enc_set_format (GstOMXVideoEnc * enc, GstOMXPort * port,
|
|||
s = gst_caps_get_structure (peercaps, 0);
|
||||
profile_string = gst_structure_get_string (s, "profile");
|
||||
if (profile_string) {
|
||||
profile = get_profile_from_str (profile_string);
|
||||
profile = gst_omx_h264_utils_get_profile_from_str (profile_string);
|
||||
if (profile == OMX_VIDEO_AVCProfileMax)
|
||||
goto unsupported_profile;
|
||||
}
|
||||
level_string = gst_structure_get_string (s, "level");
|
||||
if (level_string) {
|
||||
level = get_level_from_str (level_string);
|
||||
level = gst_omx_h264_utils_get_level_from_str (level_string);
|
||||
if (level == OMX_VIDEO_AVCLevelMax)
|
||||
goto unsupported_level;
|
||||
}
|
||||
|
|
87
omx/gstomxh264utils.c
Normal file
87
omx/gstomxh264utils.c
Normal file
|
@ -0,0 +1,87 @@
|
|||
/*
|
||||
* Copyright (C) 2011, Hewlett-Packard Development Company, L.P.
|
||||
* Author: Sebastian Dröge <sebastian.droege@collabora.co.uk>, Collabora Ltd.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation
|
||||
* version 2.1 of the License.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include "gstomxh264utils.h"
|
||||
|
||||
OMX_VIDEO_AVCPROFILETYPE
|
||||
gst_omx_h264_utils_get_profile_from_str (const gchar * profile)
|
||||
{
|
||||
if (g_str_equal (profile, "baseline")) {
|
||||
return OMX_VIDEO_AVCProfileBaseline;
|
||||
} else if (g_str_equal (profile, "main")) {
|
||||
return OMX_VIDEO_AVCProfileMain;
|
||||
} else if (g_str_equal (profile, "extended")) {
|
||||
return OMX_VIDEO_AVCProfileExtended;
|
||||
} else if (g_str_equal (profile, "high")) {
|
||||
return OMX_VIDEO_AVCProfileHigh;
|
||||
} else if (g_str_equal (profile, "high-10")) {
|
||||
return OMX_VIDEO_AVCProfileHigh10;
|
||||
} else if (g_str_equal (profile, "high-4:2:2")) {
|
||||
return OMX_VIDEO_AVCProfileHigh422;
|
||||
} else if (g_str_equal (profile, "high-4:4:4")) {
|
||||
return OMX_VIDEO_AVCProfileHigh444;
|
||||
}
|
||||
|
||||
return OMX_VIDEO_AVCProfileMax;
|
||||
}
|
||||
|
||||
OMX_VIDEO_AVCLEVELTYPE
|
||||
gst_omx_h264_utils_get_level_from_str (const gchar * level)
|
||||
{
|
||||
if (g_str_equal (level, "1")) {
|
||||
return OMX_VIDEO_AVCLevel1;
|
||||
} else if (g_str_equal (level, "1b")) {
|
||||
return OMX_VIDEO_AVCLevel1b;
|
||||
} else if (g_str_equal (level, "1.1")) {
|
||||
return OMX_VIDEO_AVCLevel11;
|
||||
} else if (g_str_equal (level, "1.2")) {
|
||||
return OMX_VIDEO_AVCLevel12;
|
||||
} else if (g_str_equal (level, "1.3")) {
|
||||
return OMX_VIDEO_AVCLevel13;
|
||||
} else if (g_str_equal (level, "2")) {
|
||||
return OMX_VIDEO_AVCLevel2;
|
||||
} else if (g_str_equal (level, "2.1")) {
|
||||
return OMX_VIDEO_AVCLevel21;
|
||||
} else if (g_str_equal (level, "2.2")) {
|
||||
return OMX_VIDEO_AVCLevel22;
|
||||
} else if (g_str_equal (level, "3")) {
|
||||
return OMX_VIDEO_AVCLevel3;
|
||||
} else if (g_str_equal (level, "3.1")) {
|
||||
return OMX_VIDEO_AVCLevel31;
|
||||
} else if (g_str_equal (level, "3.2")) {
|
||||
return OMX_VIDEO_AVCLevel32;
|
||||
} else if (g_str_equal (level, "4")) {
|
||||
return OMX_VIDEO_AVCLevel4;
|
||||
} else if (g_str_equal (level, "4.1")) {
|
||||
return OMX_VIDEO_AVCLevel41;
|
||||
} else if (g_str_equal (level, "4.2")) {
|
||||
return OMX_VIDEO_AVCLevel42;
|
||||
} else if (g_str_equal (level, "5")) {
|
||||
return OMX_VIDEO_AVCLevel5;
|
||||
} else if (g_str_equal (level, "5.1")) {
|
||||
return OMX_VIDEO_AVCLevel51;
|
||||
}
|
||||
|
||||
return OMX_VIDEO_AVCLevelMax;
|
||||
}
|
34
omx/gstomxh264utils.h
Normal file
34
omx/gstomxh264utils.h
Normal file
|
@ -0,0 +1,34 @@
|
|||
/*
|
||||
* Copyright (C) 2011, Hewlett-Packard Development Company, L.P.
|
||||
* Author: Sebastian Dröge <sebastian.droege@collabora.co.uk>, Collabora Ltd.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation
|
||||
* version 2.1 of the License.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __GST_OMX_H264_UTILS_H__
|
||||
#define __GST_OMX_H264_UTILS_H__
|
||||
|
||||
#include "gstomx.h"
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
OMX_VIDEO_AVCPROFILETYPE gst_omx_h264_utils_get_profile_from_str (const
|
||||
gchar * profile);
|
||||
OMX_VIDEO_AVCLEVELTYPE gst_omx_h264_utils_get_level_from_str (const gchar *
|
||||
level);
|
||||
|
||||
G_END_DECLS
|
||||
#endif /* __GST_OMX_H264_UTILS_H__ */
|
|
@ -10,6 +10,7 @@ omx_sources = [
|
|||
'gstomxmpeg4videodec.c',
|
||||
'gstomxmpeg2videodec.c',
|
||||
'gstomxh264dec.c',
|
||||
'gstomxh264utils.c',
|
||||
'gstomxh263dec.c',
|
||||
'gstomxwmvdec.c',
|
||||
'gstomxmpeg4videoenc.c',
|
||||
|
|
Loading…
Reference in a new issue