231 lines · 6.7 KB · C
RawDownload
/* * This file is part of FFmpeg. * * FFmpeg 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; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg 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 FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef AVCODEC_CBS_MPEG2_H#define AVCODEC_CBS_MPEG2_H #include <stddef.h>#include <stdint.h> #include "libavutil/buffer.h"  enum {    MPEG2_START_PICTURE         = 0x00,    MPEG2_START_SLICE_MIN       = 0x01,    MPEG2_START_SLICE_MAX       = 0xaf,    MPEG2_START_USER_DATA       = 0xb2,    MPEG2_START_SEQUENCE_HEADER = 0xb3,    MPEG2_START_SEQUENCE_ERROR  = 0xb4,    MPEG2_START_EXTENSION       = 0xb5,    MPEG2_START_SEQUENCE_END    = 0xb7,    MPEG2_START_GROUP           = 0xb8,}; #define MPEG2_START_IS_SLICE(type) \    ((type) >= MPEG2_START_SLICE_MIN && \     (type) <= MPEG2_START_SLICE_MAX) enum {    MPEG2_EXTENSION_SEQUENCE                  = 0x1,    MPEG2_EXTENSION_SEQUENCE_DISPLAY          = 0x2,    MPEG2_EXTENSION_QUANT_MATRIX              = 0x3,    MPEG2_EXTENSION_COPYRIGHT                 = 0x4,    MPEG2_EXTENSION_SEQUENCE_SCALABLE         = 0x5,    MPEG2_EXTENSION_PICTURE_DISPLAY           = 0x7,    MPEG2_EXTENSION_PICTURE_CODING            = 0x8,    MPEG2_EXTENSION_PICTURE_SPATIAL_SCALABLE  = 0x9,    MPEG2_EXTENSION_PICTURE_TEMPORAL_SCALABLE = 0xa,    MPEG2_EXTENSION_CAMERA_PARAMETERS         = 0xb,    MPEG2_EXTENSION_ITU_T                     = 0xc,};  typedef struct MPEG2RawSequenceHeader {    uint8_t sequence_header_code;     uint16_t horizontal_size_value;    uint16_t vertical_size_value;    uint8_t aspect_ratio_information;    uint8_t frame_rate_code;    uint32_t bit_rate_value;    uint16_t vbv_buffer_size_value;    uint8_t constrained_parameters_flag;     uint8_t load_intra_quantiser_matrix;    uint8_t intra_quantiser_matrix[64];    uint8_t load_non_intra_quantiser_matrix;    uint8_t non_intra_quantiser_matrix[64];} MPEG2RawSequenceHeader; typedef struct MPEG2RawUserData {    uint8_t user_data_start_code;     uint8_t     *user_data;    AVBufferRef *user_data_ref;    size_t       user_data_length;} MPEG2RawUserData; typedef struct MPEG2RawSequenceExtension {    uint8_t profile_and_level_indication;    uint8_t progressive_sequence;    uint8_t chroma_format;    uint8_t horizontal_size_extension;    uint8_t vertical_size_extension;    uint16_t bit_rate_extension;    uint8_t vbv_buffer_size_extension;    uint8_t low_delay;    uint8_t frame_rate_extension_n;    uint8_t frame_rate_extension_d;} MPEG2RawSequenceExtension; typedef struct MPEG2RawSequenceDisplayExtension {    uint8_t video_format;     uint8_t colour_description;    uint8_t colour_primaries;    uint8_t transfer_characteristics;    uint8_t matrix_coefficients;     uint16_t display_horizontal_size;    uint16_t display_vertical_size;} MPEG2RawSequenceDisplayExtension; typedef struct MPEG2RawGroupOfPicturesHeader {    uint8_t group_start_code;     uint32_t time_code;    uint8_t closed_gop;    uint8_t broken_link;} MPEG2RawGroupOfPicturesHeader; typedef struct MPEG2RawExtraInformation {    uint8_t     *extra_information;    AVBufferRef *extra_information_ref;    size_t       extra_information_length;} MPEG2RawExtraInformation; typedef struct MPEG2RawPictureHeader {    uint8_t picture_start_code;     uint16_t temporal_reference;    uint8_t picture_coding_type;    uint16_t vbv_delay;     uint8_t full_pel_forward_vector;    uint8_t forward_f_code;    uint8_t full_pel_backward_vector;    uint8_t backward_f_code;     MPEG2RawExtraInformation extra_information_picture;} MPEG2RawPictureHeader; typedef struct MPEG2RawPictureCodingExtension {    uint8_t f_code[2][2];     uint8_t intra_dc_precision;    uint8_t picture_structure;    uint8_t top_field_first;    uint8_t frame_pred_frame_dct;    uint8_t concealment_motion_vectors;    uint8_t q_scale_type;    uint8_t intra_vlc_format;    uint8_t alternate_scan;    uint8_t repeat_first_field;    uint8_t chroma_420_type;    uint8_t progressive_frame;     uint8_t composite_display_flag;    uint8_t v_axis;    uint8_t field_sequence;    uint8_t sub_carrier;    uint8_t burst_amplitude;    uint8_t sub_carrier_phase;} MPEG2RawPictureCodingExtension; typedef struct MPEG2RawQuantMatrixExtension {    uint8_t load_intra_quantiser_matrix;    uint8_t intra_quantiser_matrix[64];    uint8_t load_non_intra_quantiser_matrix;    uint8_t non_intra_quantiser_matrix[64];    uint8_t load_chroma_intra_quantiser_matrix;    uint8_t chroma_intra_quantiser_matrix[64];    uint8_t load_chroma_non_intra_quantiser_matrix;    uint8_t chroma_non_intra_quantiser_matrix[64];} MPEG2RawQuantMatrixExtension; typedef struct MPEG2RawPictureDisplayExtension {    int16_t frame_centre_horizontal_offset[3];    int16_t frame_centre_vertical_offset[3];} MPEG2RawPictureDisplayExtension; typedef struct MPEG2RawExtensionData {    uint8_t extension_start_code;    uint8_t extension_start_code_identifier;     union {        MPEG2RawSequenceExtension sequence;        MPEG2RawSequenceDisplayExtension sequence_display;        MPEG2RawQuantMatrixExtension quant_matrix;        MPEG2RawPictureCodingExtension picture_coding;        MPEG2RawPictureDisplayExtension picture_display;    } data;} MPEG2RawExtensionData; typedef struct MPEG2RawSliceHeader {    uint8_t slice_vertical_position;     uint8_t slice_vertical_position_extension;    uint8_t priority_breakpoint;     uint8_t quantiser_scale_code;     uint8_t slice_extension_flag;    uint8_t intra_slice;    uint8_t slice_picture_id_enable;    uint8_t slice_picture_id;     MPEG2RawExtraInformation extra_information_slice;} MPEG2RawSliceHeader; typedef struct MPEG2RawSlice {    MPEG2RawSliceHeader header;     uint8_t     *data;    AVBufferRef *data_ref;    size_t       data_size;    int          data_bit_start;} MPEG2RawSlice; typedef struct MPEG2RawSequenceEnd {    uint8_t sequence_end_code;} MPEG2RawSequenceEnd;  typedef struct CodedBitstreamMPEG2Context {    // Elements stored in headers which are required for other decoding.    uint16_t horizontal_size;    uint16_t vertical_size;    uint8_t scalable;    uint8_t scalable_mode;    uint8_t progressive_sequence;    uint8_t number_of_frame_centre_offsets;} CodedBitstreamMPEG2Context;  #endif /* AVCODEC_CBS_MPEG2_H */

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t