gstreamer/subprojects/gst-plugins-bad/sys/androidmedia/gstamc-constants.h
Jan Schmidt 70f628c117 androidmedia: Add more pixel format mappings
Add missing pixel format constants, and mappings for
P010, packed variants of 420 and RGBA layouts to GStreamer
buffer formats. This fixes problems with android decoders
refusing to output raw video frames with decoders that
announce support for these common pixel formats and
only allowing the 'hardware surfaces output' path.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7743>
2024-10-30 14:05:24 +00:00

305 lines
8.5 KiB
C

/*
* Copyright (C) 2012, Collabora Ltd.
* Author: Sebastian Dröge <sebastian.droege@collabora.co.uk>
*
* 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_AMC_CONSTANTS_H__
#define __GST_AMC_CONSTANTS_H__
/* FIXME: We might need to get these values from Java if there's
* ever a device or Android version that changes these values
*/
/* Copies from MediaCodec.java */
enum
{
BUFFER_FLAG_SYNC_FRAME = 1,
BUFFER_FLAG_CODEC_CONFIG = 2,
BUFFER_FLAG_END_OF_STREAM = 4,
BUFFER_FLAG_PARTIAL_FRAME = 8,
};
enum
{
CONFIGURE_FLAG_ENCODE = 1
};
enum
{
INFO_TRY_AGAIN_LATER = -1,
INFO_OUTPUT_FORMAT_CHANGED = -2,
INFO_OUTPUT_BUFFERS_CHANGED = -3
};
/* Copies from MediaCodecInfo.java */
/* From https://android.googlesource.com/platform/frameworks/base/+/master/media/java/android/media/MediaCodecInfo.java
* To update, cat MediaCodecInfo.java | sed -n -e 's/^.*int \(COLOR_[a-zA-Z0-9]*\)\ *\(= .*\);$/\1 \2,/p'
* but watch out for additional platform specific constants below,
* and COLOR_FormatSurface is called COLOR_FormatAndroidOpaque here for historic reasons
*/
enum
{
COLOR_FormatMonochrome = 1,
COLOR_Format8bitRGB332 = 2,
COLOR_Format12bitRGB444 = 3,
COLOR_Format16bitARGB4444 = 4,
COLOR_Format16bitARGB1555 = 5,
COLOR_Format16bitRGB565 = 6,
COLOR_Format16bitBGR565 = 7,
COLOR_Format18bitRGB666 = 8,
COLOR_Format18bitARGB1665 = 9,
COLOR_Format19bitARGB1666 = 10,
COLOR_Format24bitRGB888 = 11,
COLOR_Format24bitBGR888 = 12,
COLOR_Format24bitARGB1887 = 13,
COLOR_Format25bitARGB1888 = 14,
COLOR_Format32bitBGRA8888 = 15,
COLOR_Format32bitARGB8888 = 16,
COLOR_FormatYUV411Planar = 17,
COLOR_FormatYUV411PackedPlanar = 18,
COLOR_FormatYUV420Planar = 19,
COLOR_FormatYUV420PackedPlanar = 20,
COLOR_FormatYUV420SemiPlanar = 21,
COLOR_FormatYUV422Planar = 22,
COLOR_FormatYUV422PackedPlanar = 23,
COLOR_FormatYUV422SemiPlanar = 24,
COLOR_FormatYCbYCr = 25,
COLOR_FormatYCrYCb = 26,
COLOR_FormatCbYCrY = 27,
COLOR_FormatCrYCbY = 28,
COLOR_FormatYUV444Interleaved = 29,
COLOR_FormatRawBayer8bit = 30,
COLOR_FormatRawBayer10bit = 31,
COLOR_FormatRawBayer8bitcompressed = 32,
COLOR_FormatL2 = 33,
COLOR_FormatL4 = 34,
COLOR_FormatL8 = 35,
COLOR_FormatL16 = 36,
COLOR_FormatL24 = 37,
COLOR_FormatL32 = 38,
COLOR_FormatYUV420PackedSemiPlanar = 39,
COLOR_FormatYUV422PackedSemiPlanar = 40,
COLOR_Format18BitBGR666 = 41,
COLOR_Format24BitARGB6666 = 42,
COLOR_Format24BitABGR6666 = 43,
COLOR_FormatYUVP010 = 54,
COLOR_FormatAndroidOpaque = 0x7F000789,
COLOR_Format64bitABGRFloat = 0x7F000F16,
COLOR_Format32bitABGR8888 = 0x7F00A000,
COLOR_Format32bitABGR2101010 = 0x7F00AAA2,
COLOR_FormatYUV420Flexible = 0x7F420888,
COLOR_FormatYUV422Flexible = 0x7F422888,
COLOR_FormatYUV444Flexible = 0x7F444888,
COLOR_FormatRGBFlexible = 0x7F36B888,
COLOR_FormatRGBAFlexible = 0x7F36A888,
COLOR_INTEL_FormatYUV420PackedSemiPlanar = 0x7fa00e00,
COLOR_INTEL_FormatYUV420PackedSemiPlanar_Tiled = 0x7fa00f00,
COLOR_QCOM_FormatYUV420SemiPlanar = 0x7fa30c00,
COLOR_QCOM_FormatYUV420PackedSemiPlanar64x32Tile2m8ka = 0x7fa30c03,
/* NV12 but with stride and plane heights aligned to 32 */
COLOR_QCOM_FormatYVU420SemiPlanar32m = 0x7fa30c04,
/* NV12 but with stride and plane heights aligned to 32, Stores two images,
* one after the other in top-bottom layout */
COLOR_QCOM_FormatYVU420SemiPlanar32mMultiView = 0x7fa30c05,
COLOR_TI_FormatYUV420PackedSemiPlanar = 0x7f000100,
/* From hardware/ti/omap4xxx/domx/omx_core/inc/OMX_TI_IVCommon.h */
COLOR_TI_FormatYUV420PackedSemiPlanarInterlaced = 0x7f000001,
/* This format is Exynos specific from the OMX vendor-specific
* numeric range, but is defined in the Android OMX headers, so
* we shouldn't find incompatible usage and crash horribly... right?
* FIXME: Not actually implemented in the video decoder, it will just error out
* The format seems to be equiv to V4L2_PIX_FMT_NV12MT_16X16 */
COLOR_OMX_SEC_FormatNV12Tiled = 0x7fc00002,
/* YV12: http://developer.android.com/reference/android/graphics/ImageFormat.html#YV12 */
COLOR_FormatYV12 = 0x32315659,
};
enum
{
HEVCProfileMain = 0x01,
HEVCProfileMain10 = 0x02,
HEVCProfileMain10HDR10 = 0x1000,
HEVCProfileMain10HDR10Plus = 0x2000,
HEVCProfileMainStill = 0x4
};
enum
{
HEVCMainTierLevel1 = 0x1,
HEVCHighTierLevel1 = 0x2,
HEVCMainTierLevel2 = 0x4,
HEVCHighTierLevel2 = 0x8,
HEVCMainTierLevel21 = 0x10,
HEVCHighTierLevel21 = 0x20,
HEVCMainTierLevel3 = 0x40,
HEVCHighTierLevel3 = 0x80,
HEVCMainTierLevel31 = 0x100,
HEVCHighTierLevel31 = 0x200,
HEVCMainTierLevel4 = 0x400,
HEVCHighTierLevel4 = 0x800,
HEVCMainTierLevel41 = 0x1000,
HEVCHighTierLevel41 = 0x2000,
HEVCMainTierLevel5 = 0x4000,
HEVCHighTierLevel5 = 0x8000,
HEVCMainTierLevel51 = 0x10000,
HEVCHighTierLevel51 = 0x20000,
HEVCMainTierLevel52 = 0x40000,
HEVCHighTierLevel52 = 0x80000,
HEVCMainTierLevel6 = 0x100000,
HEVCHighTierLevel6 = 0x200000,
HEVCMainTierLevel61 = 0x400000,
HEVCHighTierLevel61 = 0x800000,
HEVCMainTierLevel62 = 0x1000000,
HEVCHighTierLevel62 = 0x2000000
};
enum
{
AVCProfileBaseline = 0x01,
AVCProfileConstrainedBaseline = 0x10000,
AVCProfileConstrainedHigh = 0x80000,
AVCProfileMain = 0x02,
AVCProfileExtended = 0x04,
AVCProfileHigh = 0x08,
AVCProfileHigh10 = 0x10,
AVCProfileHigh422 = 0x20,
AVCProfileHigh444 = 0x40
};
enum
{
AVCLevel1 = 0x01,
AVCLevel1b = 0x02,
AVCLevel11 = 0x04,
AVCLevel12 = 0x08,
AVCLevel13 = 0x10,
AVCLevel2 = 0x20,
AVCLevel21 = 0x40,
AVCLevel22 = 0x80,
AVCLevel3 = 0x100,
AVCLevel31 = 0x200,
AVCLevel32 = 0x400,
AVCLevel4 = 0x800,
AVCLevel41 = 0x1000,
AVCLevel42 = 0x2000,
AVCLevel5 = 0x4000,
AVCLevel51 = 0x8000,
AVCLevel6 = 0x20000,
AVCLevel61 = 0x40000,
AVCLevel62 = 0x80000
};
enum
{
H263ProfileBaseline = 0x01,
H263ProfileH320Coding = 0x02,
H263ProfileBackwardCompatible = 0x04,
H263ProfileISWV2 = 0x08,
H263ProfileISWV3 = 0x10,
H263ProfileHighCompression = 0x20,
H263ProfileInternet = 0x40,
H263ProfileInterlace = 0x80,
H263ProfileHighLatency = 0x100
};
enum
{
H263Level10 = 0x01,
H263Level20 = 0x02,
H263Level30 = 0x04,
H263Level40 = 0x08,
H263Level45 = 0x10,
H263Level50 = 0x20,
H263Level60 = 0x40,
H263Level70 = 0x80
};
enum
{
MPEG4ProfileSimple = 0x01,
MPEG4ProfileSimpleScalable = 0x02,
MPEG4ProfileCore = 0x04,
MPEG4ProfileMain = 0x08,
MPEG4ProfileNbit = 0x10,
MPEG4ProfileScalableTexture = 0x20,
MPEG4ProfileSimpleFace = 0x40,
MPEG4ProfileSimpleFBA = 0x80,
MPEG4ProfileBasicAnimated = 0x100,
MPEG4ProfileHybrid = 0x200,
MPEG4ProfileAdvancedRealTime = 0x400,
MPEG4ProfileCoreScalable = 0x800,
MPEG4ProfileAdvancedCoding = 0x1000,
MPEG4ProfileAdvancedCore = 0x2000,
MPEG4ProfileAdvancedScalable = 0x4000,
MPEG4ProfileAdvancedSimple = 0x8000
};
enum
{
MPEG4Level0 = 0x01,
MPEG4Level0b = 0x02,
MPEG4Level1 = 0x04,
MPEG4Level2 = 0x08,
MPEG4Level3 = 0x10,
MPEG4Level4 = 0x20,
MPEG4Level4a = 0x40,
MPEG4Level5 = 0x80
};
enum
{
AACObjectMain = 1,
AACObjectLC = 2,
AACObjectSSR = 3,
AACObjectLTP = 4,
AACObjectHE = 5,
AACObjectScalable = 6,
AACObjectERLC = 17,
AACObjectLD = 23,
AACObjectHE_PS = 29,
AACObjectELD = 39
};
/* Copies from AudioFormat.java */
enum
{
CHANNEL_OUT_FRONT_LEFT = 0x4,
CHANNEL_OUT_FRONT_RIGHT = 0x8,
CHANNEL_OUT_FRONT_CENTER = 0x10,
CHANNEL_OUT_LOW_FREQUENCY = 0x20,
CHANNEL_OUT_BACK_LEFT = 0x40,
CHANNEL_OUT_BACK_RIGHT = 0x80,
CHANNEL_OUT_FRONT_LEFT_OF_CENTER = 0x100,
CHANNEL_OUT_FRONT_RIGHT_OF_CENTER = 0x200,
CHANNEL_OUT_BACK_CENTER = 0x400,
CHANNEL_OUT_SIDE_LEFT = 0x800,
CHANNEL_OUT_SIDE_RIGHT = 0x1000,
CHANNEL_OUT_TOP_CENTER = 0x2000,
CHANNEL_OUT_TOP_FRONT_LEFT = 0x4000,
CHANNEL_OUT_TOP_FRONT_CENTER = 0x8000,
CHANNEL_OUT_TOP_FRONT_RIGHT = 0x10000,
CHANNEL_OUT_TOP_BACK_LEFT = 0x20000,
CHANNEL_OUT_TOP_BACK_CENTER = 0x40000,
CHANNEL_OUT_TOP_BACK_RIGHT = 0x80000
};
#endif