Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

  1. /*
  2.  * H.26L/H.264/AVC/JVT/14496-10/... parser
  3.  * Copyright (c) 2003 Michael Niedermayer <michaelni@gmx.at>
  4.  *
  5.  * This file is part of FFmpeg.
  6.  *
  7.  * FFmpeg is free software; you can redistribute it and/or
  8.  * modify it under the terms of the GNU Lesser General Public
  9.  * License as published by the Free Software Foundation; either
  10.  * version 2.1 of the License, or (at your option) any later version.
  11.  *
  12.  * FFmpeg is distributed in the hope that it will be useful,
  13.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  15.  * Lesser General Public License for more details.
  16.  *
  17.  * You should have received a copy of the GNU Lesser General Public
  18.  * License along with FFmpeg; if not, write to the Free Software
  19.  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  20.  */
  21.  
  22. /**
  23.  * @file
  24.  * H.264 / AVC / MPEG4 part10 parser.
  25.  * @author Michael Niedermayer <michaelni@gmx.at>
  26.  */
  27.  
  28. #define UNCHECKED_BITSTREAM_READER 1
  29.  
  30. #include "libavutil/attributes.h"
  31. #include "parser.h"
  32. #include "h264data.h"
  33. #include "golomb.h"
  34. #include "internal.h"
  35.  
  36.  
  37. static int h264_find_frame_end(H264Context *h, const uint8_t *buf,
  38.                                int buf_size)
  39. {
  40.     int i, j;
  41.     uint32_t state;
  42.     ParseContext *pc = &h->parse_context;
  43.     int next_avc= h->is_avc ? 0 : buf_size;
  44.  
  45. //    mb_addr= pc->mb_addr - 1;
  46.     state = pc->state;
  47.     if (state > 13)
  48.         state = 7;
  49.  
  50.     if (h->is_avc && !h->nal_length_size)
  51.         av_log(h->avctx, AV_LOG_ERROR, "AVC-parser: nal length size invalid\n");
  52.  
  53.     for (i = 0; i < buf_size; i++) {
  54.         if (i >= next_avc) {
  55.             int nalsize = 0;
  56.             i = next_avc;
  57.             for (j = 0; j < h->nal_length_size; j++)
  58.                 nalsize = (nalsize << 8) | buf[i++];
  59.             if (nalsize <= 0 || nalsize > buf_size - i) {
  60.                 av_log(h->avctx, AV_LOG_ERROR, "AVC-parser: nal size %d remaining %d\n", nalsize, buf_size - i);
  61.                 return buf_size;
  62.             }
  63.             next_avc = i + nalsize;
  64.             state    = 5;
  65.         }
  66.  
  67.         if (state == 7) {
  68.             i += h->h264dsp.h264_find_start_code_candidate(buf + i, next_avc - i);
  69.             if (i < next_avc)
  70.                 state = 2;
  71.         } else if (state <= 2) {
  72.             if (buf[i] == 1)
  73.                 state ^= 5;            // 2->7, 1->4, 0->5
  74.             else if (buf[i])
  75.                 state = 7;
  76.             else
  77.                 state >>= 1;           // 2->1, 1->0, 0->0
  78.         } else if (state <= 5) {
  79.             int v = buf[i] & 0x1F;
  80.             if (v == 6 || v == 7 || v == 8 || v == 9) {
  81.                 if (pc->frame_start_found) {
  82.                     i++;
  83.                     goto found;
  84.                 }
  85.             } else if (v == 1 || v == 2 || v == 5) {
  86.                 state += 8;
  87.                 continue;
  88.             }
  89.             state = 7;
  90.         } else {
  91.             h->parse_history[h->parse_history_count++]= buf[i];
  92.             if (h->parse_history_count>3) {
  93.                 unsigned int mb, last_mb= h->parse_last_mb;
  94.                 GetBitContext gb;
  95.  
  96.                 init_get_bits(&gb, h->parse_history, 8*h->parse_history_count);
  97.                 h->parse_history_count=0;
  98.                 mb= get_ue_golomb_long(&gb);
  99.                 last_mb= h->parse_last_mb;
  100.                 h->parse_last_mb= mb;
  101.                 if (pc->frame_start_found) {
  102.                     if (mb <= last_mb)
  103.                         goto found;
  104.                 } else
  105.                     pc->frame_start_found = 1;
  106.                 state = 7;
  107.             }
  108.         }
  109.     }
  110.     pc->state = state;
  111.     if (h->is_avc)
  112.         return next_avc;
  113.     return END_NOT_FOUND;
  114.  
  115. found:
  116.     pc->state             = 7;
  117.     pc->frame_start_found = 0;
  118.     if (h->is_avc)
  119.         return next_avc;
  120.     return i - (state & 5) - 3 * (state > 7);
  121. }
  122.  
  123. static int scan_mmco_reset(AVCodecParserContext *s)
  124. {
  125.     H264Context *h = s->priv_data;
  126.  
  127.     h->slice_type_nos = s->pict_type & 3;
  128.  
  129.     if (h->pps.redundant_pic_cnt_present)
  130.         get_ue_golomb(&h->gb); // redundant_pic_count
  131.  
  132.     if (ff_set_ref_count(h) < 0)
  133.         return AVERROR_INVALIDDATA;
  134.  
  135.     if (h->slice_type_nos != AV_PICTURE_TYPE_I) {
  136.         int list;
  137.         for (list = 0; list < h->list_count; list++) {
  138.             if (get_bits1(&h->gb)) {
  139.                 int index;
  140.                 for (index = 0; ; index++) {
  141.                     unsigned int reordering_of_pic_nums_idc = get_ue_golomb_31(&h->gb);
  142.  
  143.                     if (reordering_of_pic_nums_idc < 3)
  144.                         get_ue_golomb(&h->gb);
  145.                     else if (reordering_of_pic_nums_idc > 3) {
  146.                         av_log(h->avctx, AV_LOG_ERROR,
  147.                                "illegal reordering_of_pic_nums_idc %d\n",
  148.                                reordering_of_pic_nums_idc);
  149.                         return AVERROR_INVALIDDATA;
  150.                     } else
  151.                         break;
  152.  
  153.                     if (index >= h->ref_count[list]) {
  154.                         av_log(h->avctx, AV_LOG_ERROR, "reference count overflow\n");
  155.                         return AVERROR_INVALIDDATA;
  156.                     }
  157.                 }
  158.             }
  159.         }
  160.     }
  161.  
  162.     if ((h->pps.weighted_pred && h->slice_type_nos == AV_PICTURE_TYPE_P) ||
  163.         (h->pps.weighted_bipred_idc == 1 && h->slice_type_nos == AV_PICTURE_TYPE_B))
  164.         ff_pred_weight_table(h);
  165.  
  166.     if (get_bits1(&h->gb)) { // adaptive_ref_pic_marking_mode_flag
  167.         int i;
  168.         for (i = 0; i < MAX_MMCO_COUNT; i++) {
  169.             MMCOOpcode opcode = get_ue_golomb_31(&h->gb);
  170.             if (opcode > (unsigned) MMCO_LONG) {
  171.                 av_log(h->avctx, AV_LOG_ERROR,
  172.                        "illegal memory management control operation %d\n",
  173.                        opcode);
  174.                 return AVERROR_INVALIDDATA;
  175.             }
  176.             if (opcode == MMCO_END)
  177.                return 0;
  178.             else if (opcode == MMCO_RESET)
  179.                 return 1;
  180.  
  181.             if (opcode == MMCO_SHORT2UNUSED || opcode == MMCO_SHORT2LONG)
  182.                 get_ue_golomb(&h->gb);
  183.             if (opcode == MMCO_SHORT2LONG || opcode == MMCO_LONG2UNUSED ||
  184.                 opcode == MMCO_LONG || opcode == MMCO_SET_MAX_LONG)
  185.                 get_ue_golomb_31(&h->gb);
  186.         }
  187.     }
  188.  
  189.     return 0;
  190. }
  191.  
  192. /**
  193.  * Parse NAL units of found picture and decode some basic information.
  194.  *
  195.  * @param s parser context.
  196.  * @param avctx codec context.
  197.  * @param buf buffer with field/frame data.
  198.  * @param buf_size size of the buffer.
  199.  */
  200. static inline int parse_nal_units(AVCodecParserContext *s,
  201.                                   AVCodecContext *avctx,
  202.                                   const uint8_t *buf, int buf_size)
  203. {
  204.     H264Context *h         = s->priv_data;
  205.     const uint8_t *buf_end = buf + buf_size;
  206.     unsigned int pps_id;
  207.     unsigned int slice_type;
  208.     int state = -1, got_reset = 0;
  209.     const uint8_t *ptr;
  210.     int q264 = buf_size >=4 && !memcmp("Q264", buf, 4);
  211.     int field_poc[2];
  212.  
  213.     /* set some sane default values */
  214.     s->pict_type         = AV_PICTURE_TYPE_I;
  215.     s->key_frame         = 0;
  216.     s->picture_structure = AV_PICTURE_STRUCTURE_UNKNOWN;
  217.  
  218.     h->avctx = avctx;
  219.     ff_h264_reset_sei(h);
  220.     h->sei_fpa.frame_packing_arrangement_cancel_flag = -1;
  221.  
  222.     if (!buf_size)
  223.         return 0;
  224.  
  225.     for (;;) {
  226.         int src_length, dst_length, consumed, nalsize = 0;
  227.         if (h->is_avc) {
  228.             int i;
  229.             if (h->nal_length_size >= buf_end - buf) break;
  230.             nalsize = 0;
  231.             for (i = 0; i < h->nal_length_size; i++)
  232.                 nalsize = (nalsize << 8) | *buf++;
  233.             if (nalsize <= 0 || nalsize > buf_end - buf) {
  234.                 av_log(h->avctx, AV_LOG_ERROR, "AVC: nal size %d\n", nalsize);
  235.                 break;
  236.             }
  237.             src_length = nalsize;
  238.         } else {
  239.         buf = avpriv_find_start_code(buf, buf_end, &state);
  240.         if (buf >= buf_end)
  241.             break;
  242.         --buf;
  243.         src_length = buf_end - buf;
  244.         }
  245.         switch (state & 0x1f) {
  246.         case NAL_SLICE:
  247.         case NAL_IDR_SLICE:
  248.             // Do not walk the whole buffer just to decode slice header
  249.             if ((state & 0x1f) == NAL_IDR_SLICE || ((state >> 5) & 0x3) == 0) {
  250.                 /* IDR or disposable slice
  251.                  * No need to decode many bytes because MMCOs shall not be present. */
  252.                 if (src_length > 60)
  253.                     src_length = 60;
  254.             } else {
  255.                 /* To decode up to MMCOs */
  256.                 if (src_length > 1000)
  257.                     src_length = 1000;
  258.             }
  259.             break;
  260.         }
  261.         ptr = ff_h264_decode_nal(h, buf, &dst_length, &consumed, src_length);
  262.         if (ptr == NULL || dst_length < 0)
  263.             break;
  264.  
  265.         init_get_bits(&h->gb, ptr, 8 * dst_length);
  266.         switch (h->nal_unit_type) {
  267.         case NAL_SPS:
  268.             ff_h264_decode_seq_parameter_set(h);
  269.             break;
  270.         case NAL_PPS:
  271.             ff_h264_decode_picture_parameter_set(h, h->gb.size_in_bits);
  272.             break;
  273.         case NAL_SEI:
  274.             ff_h264_decode_sei(h);
  275.             break;
  276.         case NAL_IDR_SLICE:
  277.             s->key_frame = 1;
  278.  
  279.             h->prev_frame_num        = 0;
  280.             h->prev_frame_num_offset = 0;
  281.             h->prev_poc_msb          =
  282.             h->prev_poc_lsb          = 0;
  283.         /* fall through */
  284.         case NAL_SLICE:
  285.             get_ue_golomb_long(&h->gb);  // skip first_mb_in_slice
  286.             slice_type   = get_ue_golomb_31(&h->gb);
  287.             s->pict_type = golomb_to_pict_type[slice_type % 5];
  288.             if (h->sei_recovery_frame_cnt >= 0) {
  289.                 /* key frame, since recovery_frame_cnt is set */
  290.                 s->key_frame = 1;
  291.             }
  292.             pps_id = get_ue_golomb(&h->gb);
  293.             if (pps_id >= MAX_PPS_COUNT) {
  294.                 av_log(h->avctx, AV_LOG_ERROR,
  295.                        "pps_id out of range\n");
  296.                 return -1;
  297.             }
  298.             if (!h->pps_buffers[pps_id]) {
  299.                 av_log(h->avctx, AV_LOG_ERROR,
  300.                        "non-existing PPS referenced\n");
  301.                 return -1;
  302.             }
  303.             h->pps = *h->pps_buffers[pps_id];
  304.             if (!h->sps_buffers[h->pps.sps_id]) {
  305.                 av_log(h->avctx, AV_LOG_ERROR,
  306.                        "non-existing SPS referenced\n");
  307.                 return -1;
  308.             }
  309.             h->sps       = *h->sps_buffers[h->pps.sps_id];
  310.             h->frame_num = get_bits(&h->gb, h->sps.log2_max_frame_num);
  311.  
  312.             if(h->sps.ref_frame_count <= 1 && h->pps.ref_count[0] <= 1 && s->pict_type == AV_PICTURE_TYPE_I)
  313.                 s->key_frame = 1;
  314.  
  315.             avctx->profile = ff_h264_get_profile(&h->sps);
  316.             avctx->level   = h->sps.level_idc;
  317.  
  318.             if (h->sps.frame_mbs_only_flag) {
  319.                 h->picture_structure = PICT_FRAME;
  320.             } else {
  321.                 if (get_bits1(&h->gb)) { // field_pic_flag
  322.                     h->picture_structure = PICT_TOP_FIELD + get_bits1(&h->gb); // bottom_field_flag
  323.                 } else {
  324.                     h->picture_structure = PICT_FRAME;
  325.                 }
  326.             }
  327.  
  328.             if (h->nal_unit_type == NAL_IDR_SLICE)
  329.                 get_ue_golomb(&h->gb); /* idr_pic_id */
  330.             if (h->sps.poc_type == 0) {
  331.                 h->poc_lsb = get_bits(&h->gb, h->sps.log2_max_poc_lsb);
  332.  
  333.                 if (h->pps.pic_order_present == 1 &&
  334.                     h->picture_structure == PICT_FRAME)
  335.                     h->delta_poc_bottom = get_se_golomb(&h->gb);
  336.             }
  337.  
  338.             if (h->sps.poc_type == 1 &&
  339.                 !h->sps.delta_pic_order_always_zero_flag) {
  340.                 h->delta_poc[0] = get_se_golomb(&h->gb);
  341.  
  342.                 if (h->pps.pic_order_present == 1 &&
  343.                     h->picture_structure == PICT_FRAME)
  344.                     h->delta_poc[1] = get_se_golomb(&h->gb);
  345.             }
  346.  
  347.             /* Decode POC of this picture.
  348.              * The prev_ values needed for decoding POC of the next picture are not set here. */
  349.             field_poc[0] = field_poc[1] = INT_MAX;
  350.             ff_init_poc(h, field_poc, &s->output_picture_number);
  351.  
  352.             /* Continue parsing to check if MMCO_RESET is present.
  353.              * FIXME: MMCO_RESET could appear in non-first slice.
  354.              *        Maybe, we should parse all undisposable non-IDR slice of this
  355.              *        picture until encountering MMCO_RESET in a slice of it. */
  356.             if (h->nal_ref_idc && h->nal_unit_type != NAL_IDR_SLICE) {
  357.                 got_reset = scan_mmco_reset(s);
  358.                 if (got_reset < 0)
  359.                     return got_reset;
  360.             }
  361.  
  362.             /* Set up the prev_ values for decoding POC of the next picture. */
  363.             h->prev_frame_num        = got_reset ? 0 : h->frame_num;
  364.             h->prev_frame_num_offset = got_reset ? 0 : h->frame_num_offset;
  365.             if (h->nal_ref_idc != 0) {
  366.                 if (!got_reset) {
  367.                     h->prev_poc_msb = h->poc_msb;
  368.                     h->prev_poc_lsb = h->poc_lsb;
  369.                 } else {
  370.                     h->prev_poc_msb = 0;
  371.                     h->prev_poc_lsb =
  372.                         h->picture_structure == PICT_BOTTOM_FIELD ? 0 : field_poc[0];
  373.                 }
  374.             }
  375.  
  376.             if (h->sps.pic_struct_present_flag) {
  377.                 switch (h->sei_pic_struct) {
  378.                 case SEI_PIC_STRUCT_TOP_FIELD:
  379.                 case SEI_PIC_STRUCT_BOTTOM_FIELD:
  380.                     s->repeat_pict = 0;
  381.                     break;
  382.                 case SEI_PIC_STRUCT_FRAME:
  383.                 case SEI_PIC_STRUCT_TOP_BOTTOM:
  384.                 case SEI_PIC_STRUCT_BOTTOM_TOP:
  385.                     s->repeat_pict = 1;
  386.                     break;
  387.                 case SEI_PIC_STRUCT_TOP_BOTTOM_TOP:
  388.                 case SEI_PIC_STRUCT_BOTTOM_TOP_BOTTOM:
  389.                     s->repeat_pict = 2;
  390.                     break;
  391.                 case SEI_PIC_STRUCT_FRAME_DOUBLING:
  392.                     s->repeat_pict = 3;
  393.                     break;
  394.                 case SEI_PIC_STRUCT_FRAME_TRIPLING:
  395.                     s->repeat_pict = 5;
  396.                     break;
  397.                 default:
  398.                     s->repeat_pict = h->picture_structure == PICT_FRAME ? 1 : 0;
  399.                     break;
  400.                 }
  401.             } else {
  402.                 s->repeat_pict = h->picture_structure == PICT_FRAME ? 1 : 0;
  403.             }
  404.  
  405.             if (h->picture_structure == PICT_FRAME) {
  406.                 s->picture_structure = AV_PICTURE_STRUCTURE_FRAME;
  407.                 if (h->sps.pic_struct_present_flag) {
  408.                     switch (h->sei_pic_struct) {
  409.                     case SEI_PIC_STRUCT_TOP_BOTTOM:
  410.                     case SEI_PIC_STRUCT_TOP_BOTTOM_TOP:
  411.                         s->field_order = AV_FIELD_TT;
  412.                         break;
  413.                     case SEI_PIC_STRUCT_BOTTOM_TOP:
  414.                     case SEI_PIC_STRUCT_BOTTOM_TOP_BOTTOM:
  415.                         s->field_order = AV_FIELD_BB;
  416.                         break;
  417.                     default:
  418.                         s->field_order = AV_FIELD_PROGRESSIVE;
  419.                         break;
  420.                     }
  421.                 } else {
  422.                     if (field_poc[0] < field_poc[1])
  423.                         s->field_order = AV_FIELD_TT;
  424.                     else if (field_poc[0] > field_poc[1])
  425.                         s->field_order = AV_FIELD_BB;
  426.                     else
  427.                         s->field_order = AV_FIELD_PROGRESSIVE;
  428.                 }
  429.             } else {
  430.                 if (h->picture_structure == PICT_TOP_FIELD)
  431.                     s->picture_structure = AV_PICTURE_STRUCTURE_TOP_FIELD;
  432.                 else
  433.                     s->picture_structure = AV_PICTURE_STRUCTURE_BOTTOM_FIELD;
  434.                 s->field_order = AV_FIELD_UNKNOWN;
  435.             }
  436.  
  437.             return 0; /* no need to evaluate the rest */
  438.         }
  439.         buf += h->is_avc ? nalsize : consumed;
  440.     }
  441.     if (q264)
  442.         return 0;
  443.     /* didn't find a picture! */
  444.     av_log(h->avctx, AV_LOG_ERROR, "missing picture in access unit with size %d\n", buf_size);
  445.     return -1;
  446. }
  447.  
  448. static int h264_parse(AVCodecParserContext *s,
  449.                       AVCodecContext *avctx,
  450.                       const uint8_t **poutbuf, int *poutbuf_size,
  451.                       const uint8_t *buf, int buf_size)
  452. {
  453.     H264Context *h   = s->priv_data;
  454.     ParseContext *pc = &h->parse_context;
  455.     int next;
  456.  
  457.     if (!h->got_first) {
  458.         h->got_first = 1;
  459.         if (avctx->extradata_size) {
  460.             h->avctx = avctx;
  461.             // must be done like in decoder, otherwise opening the parser,
  462.             // letting it create extradata and then closing and opening again
  463.             // will cause has_b_frames to be always set.
  464.             // Note that estimate_timings_from_pts does exactly this.
  465.             if (!avctx->has_b_frames)
  466.                 h->low_delay = 1;
  467.             ff_h264_decode_extradata(h, avctx->extradata, avctx->extradata_size);
  468.         }
  469.     }
  470.  
  471.     if (s->flags & PARSER_FLAG_COMPLETE_FRAMES) {
  472.         next = buf_size;
  473.     } else {
  474.         next = h264_find_frame_end(h, buf, buf_size);
  475.  
  476.         if (ff_combine_frame(pc, next, &buf, &buf_size) < 0) {
  477.             *poutbuf      = NULL;
  478.             *poutbuf_size = 0;
  479.             return buf_size;
  480.         }
  481.  
  482.         if (next < 0 && next != END_NOT_FOUND) {
  483.             av_assert1(pc->last_index + next >= 0);
  484.             h264_find_frame_end(h, &pc->buffer[pc->last_index + next], -next); // update state
  485.         }
  486.     }
  487.  
  488.     parse_nal_units(s, avctx, buf, buf_size);
  489.  
  490.     if (h->sei_cpb_removal_delay >= 0) {
  491.         s->dts_sync_point    = h->sei_buffering_period_present;
  492.         s->dts_ref_dts_delta = h->sei_cpb_removal_delay;
  493.         s->pts_dts_delta     = h->sei_dpb_output_delay;
  494.     } else {
  495.         s->dts_sync_point    = INT_MIN;
  496.         s->dts_ref_dts_delta = INT_MIN;
  497.         s->pts_dts_delta     = INT_MIN;
  498.     }
  499.  
  500.     if (s->flags & PARSER_FLAG_ONCE) {
  501.         s->flags &= PARSER_FLAG_COMPLETE_FRAMES;
  502.     }
  503.  
  504.     *poutbuf      = buf;
  505.     *poutbuf_size = buf_size;
  506.     return next;
  507. }
  508.  
  509. static int h264_split(AVCodecContext *avctx,
  510.                       const uint8_t *buf, int buf_size)
  511. {
  512.     int i;
  513.     uint32_t state = -1;
  514.     int has_sps    = 0;
  515.  
  516.     for (i = 0; i <= buf_size; i++) {
  517.         if ((state & 0xFFFFFF1F) == 0x107)
  518.             has_sps = 1;
  519.         /*  if ((state&0xFFFFFF1F) == 0x101 ||
  520.          *     (state&0xFFFFFF1F) == 0x102 ||
  521.          *     (state&0xFFFFFF1F) == 0x105) {
  522.          *  }
  523.          */
  524.         if ((state & 0xFFFFFF00) == 0x100 && (state & 0xFFFFFF1F) != 0x107 &&
  525.             (state & 0xFFFFFF1F) != 0x108 && (state & 0xFFFFFF1F) != 0x109) {
  526.             if (has_sps) {
  527.                 while (i > 4 && buf[i - 5] == 0)
  528.                     i--;
  529.                 return i - 4;
  530.             }
  531.         }
  532.         if (i < buf_size)
  533.             state = (state << 8) | buf[i];
  534.     }
  535.     return 0;
  536. }
  537.  
  538. static void close(AVCodecParserContext *s)
  539. {
  540.     H264Context *h   = s->priv_data;
  541.     ParseContext *pc = &h->parse_context;
  542.  
  543.     av_free(pc->buffer);
  544.     ff_h264_free_context(h);
  545. }
  546.  
  547. static av_cold int init(AVCodecParserContext *s)
  548. {
  549.     H264Context *h = s->priv_data;
  550.     h->thread_context[0]   = h;
  551.     h->slice_context_count = 1;
  552.     ff_h264dsp_init(&h->h264dsp, 8, 1);
  553.     return 0;
  554. }
  555.  
  556. AVCodecParser ff_h264_parser = {
  557.     .codec_ids      = { AV_CODEC_ID_H264 },
  558.     .priv_data_size = sizeof(H264Context),
  559.     .parser_init    = init,
  560.     .parser_parse   = h264_parse,
  561.     .parser_close   = close,
  562.     .split          = h264_split,
  563. };
  564.