| /* |
| This file is provided under a dual BSD/GPLv2 license. When using or |
| redistributing this file, you may do so under either license. |
| |
| GPL LICENSE SUMMARY |
| |
| Copyright(c) 2007-2009 Intel Corporation. All rights reserved. |
| |
| This program is free software; you can redistribute it and/or modify |
| it under the terms of version 2 of the GNU General Public License as |
| published by the Free Software Foundation. |
| |
| This program 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 |
| General Public License for more details. |
| |
| You should have received a copy of the GNU General Public License |
| along with this program; if not, write to the Free Software |
| Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. |
| The full GNU General Public License is included in this distribution |
| in the file called LICENSE.GPL. |
| |
| Contact Information: |
| |
| BSD LICENSE |
| |
| Copyright(c) 2007-2009 Intel Corporation. All rights reserved. |
| All rights reserved. |
| |
| Redistribution and use in source and binary forms, with or without |
| modification, are permitted provided that the following conditions |
| are met: |
| |
| * Redistributions of source code must retain the above copyright |
| notice, this list of conditions and the following disclaimer. |
| * Redistributions in binary form must reproduce the above copyright |
| notice, this list of conditions and the following disclaimer in |
| the documentation and/or other materials provided with the |
| distribution. |
| * Neither the name of Intel Corporation nor the names of its |
| contributors may be used to endorse or promote products derived |
| from this software without specific prior written permission. |
| |
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
| "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
| LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
| A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
| OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
| SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
| LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
| DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
| THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| |
| */ |
| #ifndef VIDDEC_FW_FRAME_ATTR_H |
| #define VIDDEC_FW_FRAME_ATTR_H |
| |
| #define VIDDEC_PANSCAN_MAX_OFFSETS 4 |
| #define VIDDEC_MAX_CPB_CNT 32 |
| |
| /** |
| This enumeration lists all the frame types defined by the MPEG, VC1 and H264 specifications. |
| Frame types applicable to a single codec are specified in the comments. |
| */ |
| typedef enum |
| { |
| VIDDEC_FRAME_TYPE_INVALID=0, /** Unknown type - default value */ |
| VIDDEC_FRAME_TYPE_IDR=0x1, /** IDR frame - h264 only */ |
| VIDDEC_FRAME_TYPE_I=0x2, /** I frame */ |
| VIDDEC_FRAME_TYPE_P=0x3, /** P frame */ |
| VIDDEC_FRAME_TYPE_B=0x4, /** B frame */ |
| VIDDEC_FRAME_TYPE_BI=0x5, /** BI frame - Intracoded B frame - vc1 only */ |
| VIDDEC_FRAME_TYPE_SKIP=0x6, /** Skipped frame - vc1 only */ |
| VIDDEC_FRAME_TYPE_D=0x7, /** D frame - mpeg1 only */ |
| VIDDEC_FRAME_TYPE_S=0x8, /** SVOP frame - mpeg4 only - sprite encoded frame - treat as P */ |
| VIDDEC_FRAME_TYPE_MAX, |
| } viddec_frame_type_t; |
| |
| /** |
| This structure contains the content size info extracted from the stream. |
| */ |
| typedef struct viddec_rect_size |
| { |
| unsigned int width; |
| unsigned int height; |
| } viddec_rect_size_t; |
| |
| /** |
| This structure contains MPEG2 specific pan scan offsets extracted from the stream. |
| */ |
| typedef struct viddec_mpeg2_frame_center_offset |
| { |
| int horz; |
| int vert; |
| } viddec_mpeg2_frame_center_offset_t; |
| |
| /** |
| This structure contains the MPEG2 specific frame attributes. |
| */ |
| typedef struct viddec_mpeg2_frame_attributes |
| { |
| /** |
| 10 bit unsigned integer corresponding to the display order of each coded picture |
| in the stream (or gop if gop header is present). |
| Refer to "temporal_reference" of the picture header in ITU-T H.262 Specification. |
| */ |
| unsigned int temporal_ref; |
| |
| /** |
| Pan/Scan rectangle info |
| Refer to the picture display extension in ITU-T H.262 Specification. |
| */ |
| viddec_mpeg2_frame_center_offset_t frame_center_offset[VIDDEC_PANSCAN_MAX_OFFSETS]; |
| unsigned int number_of_frame_center_offsets; |
| |
| /** |
| Top-Field first flag |
| Refer to "top_field_first" of the picture coding extension in ITU-T H.262 Specification. |
| */ |
| unsigned int top_field_first; |
| |
| /** |
| Progressive frame flag - Indicates if current frame is progressive or not. |
| Refer to "progressive_frame" of the picture coding extension in ITU-T H.262 Specification. |
| */ |
| unsigned int progressive_frame; |
| |
| /** |
| Frame/field polarity for each coded picture. |
| Refer to Table 6-14 in ITU-T H.262 Specification. |
| */ |
| unsigned int picture_struct; |
| |
| /** |
| Repeat field/frame flag. |
| Refer to "repeat_first_field" of the picture coding extension in ITU-T H.262 Specification. |
| */ |
| unsigned int repeat_first_field; |
| |
| |
| } viddec_mpeg2_frame_attributes_t; |
| |
| /** |
| This structure contains MPEG2 specific pan scan offsets extracted from the stream. |
| */ |
| typedef struct viddec_vc1_pan_scan_window |
| { |
| unsigned int hoffset; |
| unsigned int voffset; |
| unsigned int width; |
| unsigned int height; |
| } viddec_vc1_pan_scan_window_t; |
| |
| /** |
| This structure contains the VC1 specific frame attributes. |
| */ |
| typedef struct viddec_vc1_frame_attributes |
| { |
| /** |
| Temporal Reference of frame/field. |
| Refer to "TFCNTR" in the picture layer of the SMPTE VC1 Specification. |
| */ |
| unsigned int tfcntr; |
| |
| /** |
| Frame/field repeat information in the bitstream. |
| Refer to "RPTFRM", "TFF", "BFF" in the picture layer |
| of the SMPTE VC1 Specification. |
| */ |
| unsigned int rptfrm; |
| unsigned int tff; |
| unsigned int rff; |
| |
| /** |
| Pan-scan information in the bitstream. |
| Refer to "PANSCAN_FLAG" in the entrypoint layer, "PS_PRESENT", "PS_HOFFSET", "PS_VOFFSET", |
| "PS_WIDTH" and "PS_HEIGHT" in the picture layer of the SMPTE VC1 Specification. |
| */ |
| unsigned int panscan_flag; |
| unsigned int ps_present; |
| unsigned int num_of_pan_scan_windows; |
| viddec_vc1_pan_scan_window_t pan_scan_window[VIDDEC_PANSCAN_MAX_OFFSETS]; |
| |
| } viddec_vc1_frame_attributes_t; |
| |
| /** |
| This structure contains the H264 specific frame attributes. |
| */ |
| typedef struct viddec_h264_frame_attributes |
| { |
| /** |
| used_for_reference : 1 means this frame is used as ref frame of others. 0 means no any frame ref to this frame |
| */ |
| unsigned int used_for_reference; |
| /** |
| Picture Order Count for the current frame/field. |
| This value is computed using information from the bitstream. |
| Refer to Section 8.2.1, function 8-1 of the ITU-T H.264 Specification. |
| These fileds will be supported in future |
| */ |
| int top_field_poc; |
| int bottom_field_poc; |
| |
| /** |
| Display size, which is cropped from content size. |
| Currently, the cont_size is cropped, so this paramter is redundant, but in future, cont_size may be changed |
| */ |
| viddec_rect_size_t cropped_size; |
| |
| /** |
| top_field_first: 0 means bottom_field_POC is smaller than top_field_POC, else 1 |
| */ |
| unsigned int top_field_first; |
| |
| /** |
| field_frame_flag: 0 means all slice of this frame are frame-base encoded, else 1 |
| */ |
| unsigned int field_pic_flag; |
| |
| /** |
| This data type holds view specific information of current frame. |
| The following information is packed into this data type: |
| view_id(0-9 bits): Assigned 10 bit value in the encoded stream. |
| priority_id(10-15bits): Assigned 6 bit priority id. |
| is_base_view(16th bit): Flag on true indicates current frame belongs to base view, else dependent view. |
| */ |
| #define viddec_fw_h264_mvc_get_view_id(x) viddec_fw_bitfields_extract( (x)->view_spcific_info, 0, 0x3FF) |
| #define viddec_fw_h264_mvc_set_view_id(x, val) viddec_fw_bitfields_insert( (x)->view_spcific_info, val, 0, 0x3FF) |
| #define viddec_fw_h264_mvc_get_priority_id(x) viddec_fw_bitfields_extract( (x)->view_spcific_info, 10, 0x3F) |
| #define viddec_fw_h264_mvc_set_priority_id(x, val) viddec_fw_bitfields_insert( (x)->view_spcific_info, val, 10, 0x3F) |
| #define viddec_fw_h264_mvc_get_is_base_view(x) viddec_fw_bitfields_extract( (x)->view_spcific_info, 16, 0x1) |
| #define viddec_fw_h264_mvc_set_is_base_view(x, val) viddec_fw_bitfields_insert( (x)->view_spcific_info, val, 16, 0x1) |
| unsigned int view_spcific_info; |
| } viddec_h264_frame_attributes_t; |
| |
| /** |
| This structure contains the MPEG4 specific frame attributes. |
| */ |
| typedef struct viddec_mpeg4_frame_attributes |
| { |
| /** |
| Top-Field first flag |
| Refer to "top_field_first" of the Video Object Plane of the MPEG4 Spec. |
| */ |
| unsigned int top_field_first; |
| |
| } viddec_mpeg4_frame_attributes_t; |
| |
| /** |
| This structure groups all the frame attributes that are exported by the firmware. |
| The frame attributes are split into attributes that are common to all codecs and |
| that are specific to codec type. |
| */ |
| typedef struct viddec_frame_attributes |
| { |
| /** |
| Content size specified in the stream. |
| For MPEG2, refer to "horizontal_size_value, vertical_size_value" of the sequence header and |
| "horizontal_size_extension, vertical_size_extension" of the sequence extension in ITU-T H.262 Specification. |
| For H264, refer to "pic_width_in_mbs_minus1" and "pic_height_in_map_units_minus1" of the |
| sequence parameter set in ITU-T H.264 Specification. |
| For VC1, refer to "MAX_CODED_WIDTH" and "MAX_CODED_HEIGHT" in the sequence layer, |
| "CODED_SIZE_FLAG", "CODED_WIDTH" and "CODED_HEIGHT" in the entrypoint layer of the SMPTE VC1 Specification. |
| */ |
| viddec_rect_size_t cont_size; |
| |
| /** |
| Type of frame populated in the workload. |
| frame_type contains the frame type for progressive frame and the field type for the top field for interlaced frames. |
| bottom_field_type contains the field type for the bottom field for interlaced frames. |
| For MPEG2, refer to "picture_coding_type" in picture header (Table 6-12) in ITU-T H.262 Specification. |
| For H264, refer to "slice_type" in slice header (Table 7-6) in ITU-T H.264 Specification. |
| For VC1, refer to "PTYPE" and FPTYPE in the picture layer (Tables 33, 34, 35, 105) in SMPTE VC1 Specification. |
| */ |
| viddec_frame_type_t frame_type; |
| viddec_frame_type_t bottom_field_type; |
| |
| /** Codec specific attributes */ |
| union |
| { |
| viddec_mpeg2_frame_attributes_t mpeg2; |
| viddec_vc1_frame_attributes_t vc1; |
| viddec_h264_frame_attributes_t h264; |
| viddec_mpeg4_frame_attributes_t mpeg4; |
| }; |
| |
| } viddec_frame_attributes_t; |
| |
| #endif /* VIDDEC_FRAME_ATTR_H */ |