1 /**************************************************************************
2 *
3 * Permission is hereby granted, free of charge, to any person obtaining a
4 * copy of this software and associated documentation files (the
5 * "Software"), to deal in the Software without restriction, including
6 * without limitation the rights to use, copy, modify, merge, publish,
7 * distribute, sub license, and/or sell copies of the Software, and to
8 * permit persons to whom the Software is furnished to do so, subject to
9 * the following conditions:
10 *
11 * The above copyright notice and this permission notice (including the
12 * next paragraph) shall be included in all copies or substantial portions
13 * of the Software.
14 *
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
16 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
18 * IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR
19 * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
20 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
21 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22 *
23 **************************************************************************/
24
25 #include <tizport_decls.h>
26
27 #include "vid_dec_h264_common.h"
28
29 #include "h264dprc.h"
30 #include "h264d.h"
31 #include "names.h"
32
33 static OMX_VERSIONTYPE h264_decoder_version = {{0, 0, 0, 1}};
34
instantiate_h264d_input_port(OMX_HANDLETYPE ap_hdl)35 OMX_PTR instantiate_h264d_input_port(OMX_HANDLETYPE ap_hdl)
36 {
37 OMX_VIDEO_PORTDEFINITIONTYPE portdef;
38 OMX_VIDEO_PARAM_AVCTYPE avctype;
39 OMX_VIDEO_CODINGTYPE encodings[] = {
40 OMX_VIDEO_CodingAVC,
41 OMX_VIDEO_CodingMax
42 };
43 OMX_COLOR_FORMATTYPE formats[] = {
44 OMX_COLOR_FormatUnused,
45 OMX_COLOR_FormatMax
46 };
47 tiz_port_options_t avc_port_opts = {
48 OMX_PortDomainVideo,
49 OMX_DirInput,
50 OMX_VID_DEC_AVC_INPUT_PORT_MIN_BUF_COUNT,
51 OMX_VID_DEC_AVC_PORT_MIN_INPUT_BUF_SIZE,
52 OMX_VID_DEC_AVC_PORT_NONCONTIGUOUS,
53 OMX_VID_DEC_AVC_PORT_ALIGNMENT,
54 OMX_VID_DEC_AVC_PORT_SUPPLIERPREF,
55 {OMX_VID_DEC_AVC_INPUT_PORT_INDEX, NULL, NULL, NULL},
56 1 /* slave port */
57 };
58 OMX_VIDEO_AVCLEVELTYPE levels[] = {
59 OMX_VIDEO_AVCLevel1,
60 OMX_VIDEO_AVCLevel1b,
61 OMX_VIDEO_AVCLevel11,
62 OMX_VIDEO_AVCLevel12,
63 OMX_VIDEO_AVCLevel13,
64 OMX_VIDEO_AVCLevel2,
65 OMX_VIDEO_AVCLevel21,
66 OMX_VIDEO_AVCLevel22,
67 OMX_VIDEO_AVCLevel3,
68 OMX_VIDEO_AVCLevel31,
69 OMX_VIDEO_AVCLevel32,
70 OMX_VIDEO_AVCLevel4,
71 OMX_VIDEO_AVCLevel41,
72 OMX_VIDEO_AVCLevel42,
73 OMX_VIDEO_AVCLevel5,
74 OMX_VIDEO_AVCLevel51,
75 OMX_VIDEO_AVCLevelMax
76 };
77
78 portdef.pNativeRender = NULL;
79 portdef.nFrameWidth = OMX_VID_DEC_AVC_DEFAULT_FRAME_WIDTH;
80 portdef.nFrameHeight = OMX_VID_DEC_AVC_DEFAULT_FRAME_HEIGHT;
81 portdef.nStride = 0;
82 portdef.nSliceHeight = 0;
83 portdef.nBitrate = 64000;
84 portdef.xFramerate = OMX_VID_DEC_AVC_DEFAULT_FRAME_RATE;
85 portdef.bFlagErrorConcealment = OMX_FALSE;
86 portdef.eCompressionFormat = OMX_VIDEO_CodingAVC;
87 portdef.eColorFormat = OMX_COLOR_FormatUnused;
88 portdef.pNativeWindow = NULL;
89
90 avctype.nSize = sizeof (OMX_VIDEO_PARAM_AVCTYPE);
91 avctype.nVersion.nVersion = OMX_VERSION;
92 avctype.nPortIndex = OMX_VID_DEC_AVC_INPUT_PORT_INDEX;
93 avctype.eProfile = OMX_VIDEO_AVCProfileHigh;
94 /* Encoder related, decide if need to initialise these */
95 avctype.nSliceHeaderSpacing = 0;
96 avctype.nPFrames = 0;
97 avctype.nBFrames = 0;
98 avctype.bUseHadamard = OMX_FALSE;
99 avctype.nRefFrames = 1;
100 avctype.nRefIdx10ActiveMinus1 = 1;
101 avctype.nRefIdx11ActiveMinus1 = 0;
102 avctype.bEnableUEP = OMX_FALSE;
103 avctype.bEnableFMO = OMX_FALSE;
104 avctype.bEnableASO = OMX_FALSE;
105 avctype.bEnableRS = OMX_FALSE;
106 avctype.eLevel = OMX_VIDEO_AVCLevel51;
107 avctype.nAllowedPictureTypes = 2;
108 avctype.bFrameMBsOnly = OMX_FALSE;
109 avctype.bMBAFF = OMX_FALSE;
110 avctype.bEntropyCodingCABAC = OMX_FALSE;
111 avctype.bWeightedPPrediction = OMX_FALSE;
112 avctype.nWeightedBipredicitonMode = 0;
113 avctype.bconstIpred = OMX_FALSE;
114 avctype.bDirect8x8Inference = OMX_FALSE;
115 avctype.bDirectSpatialTemporal = OMX_FALSE;
116 avctype.nCabacInitIdc = 0;
117 avctype.eLoopFilterMode = OMX_VIDEO_AVCLoopFilterEnable;
118
119 return factory_new (tiz_get_type(ap_hdl, "h264dinport"),
120 &avc_port_opts, &portdef,
121 &encodings, &formats, &avctype, &levels,
122 NULL /* OMX_VIDEO_PARAM_BITRATETYPE */,
123 NULL /* OMX_VIDEO_PARAM_QUANTIZATIONTYPE */);
124 }
125
instantiate_h264d_output_port(OMX_HANDLETYPE ap_hdl)126 OMX_PTR instantiate_h264d_output_port(OMX_HANDLETYPE ap_hdl)
127 {
128 OMX_VIDEO_PORTDEFINITIONTYPE portdef;
129 OMX_VIDEO_CODINGTYPE encodings[] = {
130 OMX_VIDEO_CodingUnused,
131 OMX_VIDEO_CodingMax
132 };
133 OMX_COLOR_FORMATTYPE formats[] = {
134 OMX_COLOR_FormatYUV420SemiPlanar,
135 OMX_COLOR_FormatMax
136 };
137 tiz_port_options_t rawvideo_port_opts = {
138 OMX_PortDomainVideo,
139 OMX_DirOutput,
140 OMX_VID_DEC_AVC_OUTPUT_PORT_MIN_BUF_COUNT,
141 OMX_VID_DEC_AVC_PORT_MIN_OUTPUT_BUF_SIZE,
142 OMX_VID_DEC_AVC_PORT_NONCONTIGUOUS,
143 OMX_VID_DEC_AVC_PORT_ALIGNMENT,
144 OMX_VID_DEC_AVC_PORT_SUPPLIERPREF,
145 {OMX_VID_DEC_AVC_OUTPUT_PORT_INDEX, NULL, NULL, NULL},
146 0 /* Master port */
147 };
148
149 portdef.pNativeRender = NULL;
150 portdef.nFrameWidth = OMX_VID_DEC_AVC_DEFAULT_FRAME_WIDTH;
151 portdef.nFrameHeight = OMX_VID_DEC_AVC_DEFAULT_FRAME_HEIGHT;
152 portdef.nStride = 0;
153 portdef.nSliceHeight = 0;
154 portdef.nBitrate = 64000;
155 portdef.xFramerate = OMX_VID_DEC_AVC_DEFAULT_FRAME_RATE;
156 portdef.bFlagErrorConcealment = OMX_FALSE;
157 portdef.eCompressionFormat = OMX_VIDEO_CodingUnused;
158 portdef.eColorFormat = OMX_COLOR_FormatYUV420SemiPlanar;
159 portdef.pNativeWindow = NULL;
160
161 return factory_new(tiz_get_type(ap_hdl, "tizvideoport"),
162 &rawvideo_port_opts, &portdef,
163 &encodings, &formats);
164 }
165
instantiate_h264d_config_port(OMX_HANDLETYPE ap_hdl)166 OMX_PTR instantiate_h264d_config_port(OMX_HANDLETYPE ap_hdl)
167 {
168 return factory_new(tiz_get_type(ap_hdl, "tizconfigport"),
169 NULL, /* this port does not take options */
170 OMX_VID_COMP_NAME, h264_decoder_version);
171 }
172
instantiate_h264d_processor(OMX_HANDLETYPE ap_hdl)173 OMX_PTR instantiate_h264d_processor(OMX_HANDLETYPE ap_hdl)
174 {
175 return factory_new(tiz_get_type(ap_hdl, "h264dprc"));
176 }
177