h264.c
上传用户:kjfoods
上传日期:2020-07-06
资源大小:29949k
文件大小:34k
源码类别:

midi

开发平台:

Unix_Linux

  1. /*****************************************************************************
  2.  * h264.c: h264/avc video packetizer
  3.  *****************************************************************************
  4.  * Copyright (C) 2001, 2002, 2006 the VideoLAN team
  5.  * $Id: 534ee7bcbe6f58954dea56a0eba722a09b851456 $
  6.  *
  7.  * Authors: Laurent Aimar <fenrir@via.ecp.fr>
  8.  *          Eric Petit <titer@videolan.org>
  9.  *          Gildas Bazin <gbazin@videolan.org>
  10.  *          Derk-Jan Hartman <hartman at videolan dot org>
  11.  *
  12.  * This program is free software; you can redistribute it and/or modify
  13.  * it under the terms of the GNU General Public License as published by
  14.  * the Free Software Foundation; either version 2 of the License, or
  15.  * (at your option) any later version.
  16.  *
  17.  * This program is distributed in the hope that it will be useful,
  18.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  19.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  20.  * GNU General Public License for more details.
  21.  *
  22.  * You should have received a copy of the GNU General Public License
  23.  * along with this program; if not, write to the Free Software
  24.  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  25.  *****************************************************************************/
  26. /*****************************************************************************
  27.  * Preamble
  28.  *****************************************************************************/
  29. #ifdef HAVE_CONFIG_H
  30. # include "config.h"
  31. #endif
  32. #include <vlc_common.h>
  33. #include <vlc_plugin.h>
  34. #include <vlc_sout.h>
  35. #include <vlc_codec.h>
  36. #include <vlc_block.h>
  37. #include "vlc_block_helper.h"
  38. #include "vlc_bits.h"
  39. #include "../codec/cc.h"
  40. #include "packetizer_helper.h"
  41. /*****************************************************************************
  42.  * Module descriptor
  43.  *****************************************************************************/
  44. static int  Open ( vlc_object_t * );
  45. static void Close( vlc_object_t * );
  46. vlc_module_begin ()
  47.     set_category( CAT_SOUT )
  48.     set_subcategory( SUBCAT_SOUT_PACKETIZER )
  49.     set_description( N_("H.264 video packetizer") )
  50.     set_capability( "packetizer", 50 )
  51.     set_callbacks( Open, Close )
  52. vlc_module_end ()
  53. /****************************************************************************
  54.  * Local prototypes
  55.  ****************************************************************************/
  56. typedef struct
  57. {
  58.     int i_nal_type;
  59.     int i_nal_ref_idc;
  60.     int i_frame_type;
  61.     int i_pic_parameter_set_id;
  62.     int i_frame_num;
  63.     int i_field_pic_flag;
  64.     int i_bottom_field_flag;
  65.     int i_idr_pic_id;
  66.     int i_pic_order_cnt_lsb;
  67.     int i_delta_pic_order_cnt_bottom;
  68.     int i_delta_pic_order_cnt0;
  69.     int i_delta_pic_order_cnt1;
  70. } slice_t;
  71. #define SPS_MAX (32)
  72. #define PPS_MAX (256)
  73. struct decoder_sys_t
  74. {
  75.     /* */
  76.     packetizer_t packetizer;
  77.     /* */
  78.     bool    b_slice;
  79.     block_t *p_frame;
  80.     bool   b_header;
  81.     bool   b_sps;
  82.     bool   b_pps;
  83.     block_t *pp_sps[SPS_MAX];
  84.     block_t *pp_pps[PPS_MAX];
  85.     /* avcC data */
  86.     int i_avcC_length_size;
  87.     /* Useful values of the Sequence Parameter Set */
  88.     int i_log2_max_frame_num;
  89.     int b_frame_mbs_only;
  90.     int i_pic_order_cnt_type;
  91.     int i_delta_pic_order_always_zero_flag;
  92.     int i_log2_max_pic_order_cnt_lsb;
  93.     /* Value from Picture Parameter Set */
  94.     int i_pic_order_present_flag;
  95.     /* Useful values of the Slice Header */
  96.     slice_t slice;
  97.     /* */
  98.     mtime_t i_frame_pts;
  99.     mtime_t i_frame_dts;
  100.     /* */
  101.     uint32_t i_cc_flags;
  102.     mtime_t i_cc_pts;
  103.     mtime_t i_cc_dts;
  104.     cc_data_t cc;
  105.     cc_data_t cc_next;
  106. };
  107. enum nal_unit_type_e
  108. {
  109.     NAL_UNKNOWN = 0,
  110.     NAL_SLICE   = 1,
  111.     NAL_SLICE_DPA   = 2,
  112.     NAL_SLICE_DPB   = 3,
  113.     NAL_SLICE_DPC   = 4,
  114.     NAL_SLICE_IDR   = 5,    /* ref_idc != 0 */
  115.     NAL_SEI         = 6,    /* ref_idc == 0 */
  116.     NAL_SPS         = 7,
  117.     NAL_PPS         = 8,
  118.     NAL_AU_DELIMITER= 9
  119.     /* ref_idc == 0 for 6,9,10,11,12 */
  120. };
  121. enum nal_priority_e
  122. {
  123.     NAL_PRIORITY_DISPOSABLE = 0,
  124.     NAL_PRIORITY_LOW        = 1,
  125.     NAL_PRIORITY_HIGH       = 2,
  126.     NAL_PRIORITY_HIGHEST    = 3,
  127. };
  128. static block_t *Packetize( decoder_t *, block_t ** );
  129. static block_t *PacketizeAVC1( decoder_t *, block_t ** );
  130. static block_t *GetCc( decoder_t *p_dec, bool pb_present[4] );
  131. static void PacketizeReset( void *p_private, bool b_broken );
  132. static block_t *PacketizeParse( void *p_private, bool *pb_ts_used, block_t * );
  133. static int PacketizeValidate( void *p_private, block_t * );
  134. static block_t *ParseNALBlock( decoder_t *, bool *pb_used_ts, block_t * );
  135. static block_t *CreateAnnexbNAL( decoder_t *, const uint8_t *p, int );
  136. static block_t *OutputPicture( decoder_t *p_dec );
  137. static void PutSPS( decoder_t *p_dec, block_t *p_frag );
  138. static void PutPPS( decoder_t *p_dec, block_t *p_frag );
  139. static void ParseSlice( decoder_t *p_dec, bool *pb_new_picture, slice_t *p_slice,
  140.                         int i_nal_ref_idc, int i_nal_type, const block_t *p_frag );
  141. static void ParseSei( decoder_t *, block_t * );
  142. static const uint8_t p_h264_startcode[3] = { 0x00, 0x00, 0x01 };
  143. /*****************************************************************************
  144.  * Open: probe the packetizer and return score
  145.  * When opening after demux, the packetizer is only loaded AFTER the decoder
  146.  * That means that what you set in fmt_out is ignored by the decoder in this special case
  147.  *****************************************************************************/
  148. static int Open( vlc_object_t *p_this )
  149. {
  150.     decoder_t     *p_dec = (decoder_t*)p_this;
  151.     decoder_sys_t *p_sys;
  152.     int i;
  153.     if( p_dec->fmt_in.i_codec != VLC_FOURCC( 'h', '2', '6', '4') &&
  154.         p_dec->fmt_in.i_codec != VLC_FOURCC( 'H', '2', '6', '4') &&
  155.         p_dec->fmt_in.i_codec != VLC_FOURCC( 'V', 'S', 'S', 'H') &&
  156.         p_dec->fmt_in.i_codec != VLC_FOURCC( 'v', 's', 's', 'h') &&
  157.         p_dec->fmt_in.i_codec != VLC_FOURCC( 'D', 'A', 'V', 'C') &&
  158.         p_dec->fmt_in.i_codec != VLC_FOURCC( 'x', '2', '6', '4') &&
  159.         p_dec->fmt_in.i_codec != VLC_FOURCC( 'X', '2', '6', '4') &&
  160.         ( p_dec->fmt_in.i_codec != VLC_FOURCC( 'a', 'v', 'c', '1') ||
  161.           p_dec->fmt_in.i_extra < 7 ) )
  162.     {
  163.         return VLC_EGENERIC;
  164.     }
  165.     /* Allocate the memory needed to store the decoder's structure */
  166.     if( ( p_dec->p_sys = p_sys = malloc( sizeof(decoder_sys_t) ) ) == NULL )
  167.     {
  168.         return VLC_ENOMEM;
  169.     }
  170.     packetizer_Init( &p_sys->packetizer,
  171.                      p_h264_startcode, sizeof(p_h264_startcode),
  172.                      p_h264_startcode, 1,
  173.                      PacketizeReset, PacketizeParse, PacketizeValidate, p_dec );
  174.     p_sys->b_slice = false;
  175.     p_sys->p_frame = NULL;
  176.     p_sys->b_header= false;
  177.     p_sys->b_sps   = false;
  178.     p_sys->b_pps   = false;
  179.     for( i = 0; i < SPS_MAX; i++ )
  180.         p_sys->pp_sps[i] = NULL;
  181.     for( i = 0; i < PPS_MAX; i++ )
  182.         p_sys->pp_pps[i] = NULL;
  183.     p_sys->slice.i_nal_type = -1;
  184.     p_sys->slice.i_nal_ref_idc = -1;
  185.     p_sys->slice.i_idr_pic_id = -1;
  186.     p_sys->slice.i_frame_num = -1;
  187.     p_sys->slice.i_frame_type = 0;
  188.     p_sys->slice.i_pic_parameter_set_id = -1;
  189.     p_sys->slice.i_field_pic_flag = 0;
  190.     p_sys->slice.i_bottom_field_flag = -1;
  191.     p_sys->slice.i_pic_order_cnt_lsb = -1;
  192.     p_sys->slice.i_delta_pic_order_cnt_bottom = -1;
  193.     p_sys->i_frame_dts = -1;
  194.     p_sys->i_frame_pts = -1;
  195.     /* Setup properties */
  196.     es_format_Copy( &p_dec->fmt_out, &p_dec->fmt_in );
  197.     p_dec->fmt_out.i_codec = VLC_FOURCC( 'h', '2', '6', '4' );
  198.     if( p_dec->fmt_in.i_codec == VLC_FOURCC( 'a', 'v', 'c', '1' ) )
  199.     {
  200.         /* This type of stream is produced by mp4 and matroska
  201.          * when we want to store it in another streamformat, you need to convert
  202.          * The fmt_in.p_extra should ALWAYS contain the avcC
  203.          * The fmt_out.p_extra should contain all the SPS and PPS with 4 byte startcodes */
  204.         uint8_t *p = &((uint8_t*)p_dec->fmt_in.p_extra)[4];
  205.         int i_sps, i_pps;
  206.         bool b_dummy;
  207.         int i;
  208.         /* Parse avcC */
  209.         p_sys->i_avcC_length_size = 1 + ((*p++)&0x03);
  210.         /* Read SPS */
  211.         i_sps = (*p++)&0x1f;
  212.         for( i = 0; i < i_sps; i++ )
  213.         {
  214.             uint16_t i_length = GetWBE( p ); p += 2;
  215.             if( i_length >
  216.                 (uint8_t*)p_dec->fmt_in.p_extra + p_dec->fmt_in.i_extra - p )
  217.             {
  218.                 return VLC_EGENERIC;
  219.             }
  220.             block_t *p_sps = CreateAnnexbNAL( p_dec, p, i_length );
  221.             if( !p_sps )
  222.                 return VLC_EGENERIC;
  223.             ParseNALBlock( p_dec, &b_dummy, p_sps );
  224.             p += i_length;
  225.         }
  226.         /* Read PPS */
  227.         i_pps = *p++;
  228.         for( i = 0; i < i_pps; i++ )
  229.         {
  230.             uint16_t i_length = GetWBE( p ); p += 2;
  231.             if( i_length >
  232.                 (uint8_t*)p_dec->fmt_in.p_extra + p_dec->fmt_in.i_extra - p )
  233.             {
  234.                 return VLC_EGENERIC;
  235.             }
  236.             block_t *p_pps = CreateAnnexbNAL( p_dec, p, i_length );
  237.             if( !p_pps )
  238.                 return VLC_EGENERIC;
  239.             ParseNALBlock( p_dec, &b_dummy, p_pps );
  240.             p += i_length;
  241.         }
  242.         msg_Dbg( p_dec, "avcC length size=%d, sps=%d, pps=%d",
  243.                  p_sys->i_avcC_length_size, i_sps, i_pps );
  244.         if( !p_sys->b_sps || !p_sys->b_pps )
  245.             return VLC_EGENERIC;
  246.         /* FIXME: FFMPEG isn't happy at all if you leave this */
  247.         if( p_dec->fmt_out.i_extra > 0 )
  248.             free( p_dec->fmt_out.p_extra );
  249.         p_dec->fmt_out.i_extra = 0;
  250.         p_dec->fmt_out.p_extra = NULL;
  251.         /* Set the new extradata */
  252.         for( i = 0; i < SPS_MAX; i++ )
  253.         {
  254.             if( p_sys->pp_sps[i] )
  255.                 p_dec->fmt_out.i_extra += p_sys->pp_sps[i]->i_buffer;
  256.         }
  257.         for( i = 0; i < PPS_MAX; i++ )
  258.         {
  259.             if( p_sys->pp_pps[i] )
  260.                 p_dec->fmt_out.i_extra += p_sys->pp_pps[i]->i_buffer;
  261.         }
  262.         p_dec->fmt_out.p_extra = malloc( p_dec->fmt_out.i_extra );
  263.         if( p_dec->fmt_out.p_extra )
  264.         {
  265.             uint8_t *p_dst = p_dec->fmt_out.p_extra;
  266.             for( i = 0; i < SPS_MAX; i++ )
  267.             {
  268.                 if( p_sys->pp_sps[i] )
  269.                 {
  270.                     memcpy( p_dst, p_sys->pp_sps[i]->p_buffer, p_sys->pp_sps[i]->i_buffer );
  271.                     p_dst += p_sys->pp_sps[i]->i_buffer;
  272.                 }
  273.             }
  274.             for( i = 0; i < PPS_MAX; i++ )
  275.             {
  276.                 if( p_sys->pp_pps[i] )
  277.                 {
  278.                     memcpy( p_dst, p_sys->pp_pps[i]->p_buffer, p_sys->pp_pps[i]->i_buffer );
  279.                     p_dst += p_sys->pp_pps[i]->i_buffer;
  280.                 }
  281.             }
  282.             p_sys->b_header = true;
  283.         }
  284.         else
  285.         {
  286.             p_dec->fmt_out.i_extra = 0;
  287.         }
  288.         /* Set callback */
  289.         p_dec->pf_packetize = PacketizeAVC1;
  290.         /* TODO CC ? */
  291.     }
  292.     else
  293.     {
  294.         /* This type of stream contains data with 3 of 4 byte startcodes
  295.          * The fmt_in.p_extra MAY contain SPS/PPS with 4 byte startcodes
  296.          * The fmt_out.p_extra should be the same */
  297.         /* Set callback */
  298.         p_dec->pf_packetize = Packetize;
  299.         p_dec->pf_get_cc = GetCc;
  300.         /* */
  301.         p_sys->i_cc_pts = 0;
  302.         p_sys->i_cc_dts = 0;
  303.         p_sys->i_cc_flags = 0;
  304.         cc_Init( &p_sys->cc );
  305.         cc_Init( &p_sys->cc_next );
  306.         /* */
  307.         if( p_dec->fmt_in.i_extra > 0 )
  308.             packetizer_Header( &p_sys->packetizer,
  309.                                p_dec->fmt_in.p_extra, p_dec->fmt_in.i_extra );
  310.     }
  311.     return VLC_SUCCESS;
  312. }
  313. /*****************************************************************************
  314.  * Close: clean up the packetizer
  315.  *****************************************************************************/
  316. static void Close( vlc_object_t *p_this )
  317. {
  318.     decoder_t *p_dec = (decoder_t*)p_this;
  319.     decoder_sys_t *p_sys = p_dec->p_sys;
  320.     int i;
  321.     if( p_sys->p_frame )
  322.         block_ChainRelease( p_sys->p_frame );
  323.     for( i = 0; i < SPS_MAX; i++ )
  324.     {
  325.         if( p_sys->pp_sps[i] )
  326.             block_Release( p_sys->pp_sps[i] );
  327.     }
  328.     for( i = 0; i < PPS_MAX; i++ )
  329.     {
  330.         if( p_sys->pp_pps[i] )
  331.             block_Release( p_sys->pp_pps[i] );
  332.     }
  333.     packetizer_Clean( &p_sys->packetizer );
  334.     if( p_dec->pf_get_cc )
  335.     {
  336.          cc_Exit( &p_sys->cc_next );
  337.          cc_Exit( &p_sys->cc );
  338.     }
  339.     free( p_sys );
  340. }
  341. /****************************************************************************
  342.  * Packetize: the whole thing
  343.  * Search for the startcodes 3 or more bytes
  344.  * Feed ParseNALBlock ALWAYS with 4 byte startcode prepended NALs
  345.  ****************************************************************************/
  346. static block_t *Packetize( decoder_t *p_dec, block_t **pp_block )
  347. {
  348.     decoder_sys_t *p_sys = p_dec->p_sys;
  349.     return packetizer_Packetize( &p_sys->packetizer, pp_block );
  350. }
  351. /****************************************************************************
  352.  * PacketizeAVC1: Takes VCL blocks of data and creates annexe B type NAL stream
  353.  * Will always use 4 byte 0 0 0 1 startcodes
  354.  * Will prepend a SPS and PPS before each keyframe
  355.  ****************************************************************************/
  356. static block_t *PacketizeAVC1( decoder_t *p_dec, block_t **pp_block )
  357. {
  358.     decoder_sys_t *p_sys = p_dec->p_sys;
  359.     block_t       *p_block;
  360.     block_t       *p_ret = NULL;
  361.     uint8_t       *p;
  362.     if( !pp_block || !*pp_block )
  363.         return NULL;
  364.     if( (*pp_block)->i_flags&(BLOCK_FLAG_DISCONTINUITY|BLOCK_FLAG_CORRUPTED) )
  365.     {
  366.         block_Release( *pp_block );
  367.         return NULL;
  368.     }
  369.     p_block = *pp_block;
  370.     *pp_block = NULL;
  371.     for( p = p_block->p_buffer; p < &p_block->p_buffer[p_block->i_buffer]; )
  372.     {
  373.         block_t *p_pic;
  374.         bool b_dummy;
  375.         int i_size = 0;
  376.         int i;
  377.         for( i = 0; i < p_sys->i_avcC_length_size; i++ )
  378.         {
  379.             i_size = (i_size << 8) | (*p++);
  380.         }
  381.         if( i_size <= 0 ||
  382.             i_size > ( p_block->p_buffer + p_block->i_buffer - p ) )
  383.         {
  384.             msg_Err( p_dec, "Broken frame : size %d is too big", i_size );
  385.             break;
  386.         }
  387.         block_t *p_part = CreateAnnexbNAL( p_dec, p, i_size );
  388.         if( !p_part )
  389.             break;
  390.         p_part->i_dts = p_block->i_dts;
  391.         p_part->i_pts = p_block->i_pts;
  392.         /* Parse the NAL */
  393.         if( ( p_pic = ParseNALBlock( p_dec, &b_dummy, p_part ) ) )
  394.         {
  395.             block_ChainAppend( &p_ret, p_pic );
  396.         }
  397.         p += i_size;
  398.     }
  399.     block_Release( p_block );
  400.     return p_ret;
  401. }
  402. /*****************************************************************************
  403.  * GetCc:
  404.  *****************************************************************************/
  405. static block_t *GetCc( decoder_t *p_dec, bool pb_present[4] )
  406. {
  407.     decoder_sys_t *p_sys = p_dec->p_sys;
  408.     block_t *p_cc;
  409.     for( int i = 0; i < 4; i++ )
  410.         pb_present[i] = p_sys->cc.pb_present[i];
  411.     if( p_sys->cc.i_data <= 0 )
  412.         return NULL;
  413.     p_cc = block_New( p_dec, p_sys->cc.i_data);
  414.     if( p_cc )
  415.     {
  416.         memcpy( p_cc->p_buffer, p_sys->cc.p_data, p_sys->cc.i_data );
  417.         p_cc->i_dts =
  418.         p_cc->i_pts = p_sys->cc.b_reorder ? p_sys->i_cc_pts : p_sys->i_cc_dts;
  419.         p_cc->i_flags = ( p_sys->cc.b_reorder  ? p_sys->i_cc_flags : BLOCK_FLAG_TYPE_P ) & BLOCK_FLAG_TYPE_MASK;
  420.     }
  421.     cc_Flush( &p_sys->cc );
  422.     return p_cc;
  423. }
  424. /****************************************************************************
  425.  * Helpers
  426.  ****************************************************************************/
  427. static void PacketizeReset( void *p_private, bool b_broken )
  428. {
  429.     decoder_t *p_dec = p_private;
  430.     decoder_sys_t *p_sys = p_dec->p_sys;
  431.     if( b_broken )
  432.     {
  433.         if( p_sys->p_frame )
  434.             block_ChainRelease( p_sys->p_frame );
  435.         p_sys->p_frame = NULL;
  436.         p_sys->slice.i_frame_type = 0;
  437.         p_sys->b_slice = false;
  438.     }
  439.     p_sys->i_frame_pts = -1;
  440.     p_sys->i_frame_dts = -1;
  441. }
  442. static block_t *PacketizeParse( void *p_private, bool *pb_ts_used, block_t *p_block )
  443. {
  444.     decoder_t *p_dec = p_private;
  445.     /* Remove trailing 0 bytes */
  446.     while( p_block->i_buffer && p_block->p_buffer[p_block->i_buffer-1] == 0x00 )
  447.         p_block->i_buffer--;
  448.     return ParseNALBlock( p_dec, pb_ts_used, p_block );
  449. }
  450. static int PacketizeValidate( void *p_private, block_t *p_au )
  451. {
  452.     VLC_UNUSED(p_private);
  453.     VLC_UNUSED(p_au);
  454.     return VLC_SUCCESS;
  455. }
  456. static block_t *CreateAnnexbNAL( decoder_t *p_dec, const uint8_t *p, int i_size )
  457. {
  458.     block_t *p_nal;
  459.     p_nal = block_New( p_dec, 4 + i_size );
  460.     if( !p_nal ) return NULL;
  461.     /* Add start code */
  462.     p_nal->p_buffer[0] = 0x00;
  463.     p_nal->p_buffer[1] = 0x00;
  464.     p_nal->p_buffer[2] = 0x00;
  465.     p_nal->p_buffer[3] = 0x01;
  466.     /* Copy nalu */
  467.     memcpy( &p_nal->p_buffer[4], p, i_size );
  468.     VLC_UNUSED(p_dec);
  469.     return p_nal;
  470. }
  471. static void CreateDecodedNAL( uint8_t **pp_ret, int *pi_ret,
  472.                               const uint8_t *src, int i_src )
  473. {
  474.     const uint8_t *end = &src[i_src];
  475.     uint8_t *dst = malloc( i_src );
  476.     *pp_ret = dst;
  477.     if( dst )
  478.     {
  479.         while( src < end )
  480.         {
  481.             if( src < end - 3 && src[0] == 0x00 && src[1] == 0x00 &&
  482.                 src[2] == 0x03 )
  483.             {
  484.                 *dst++ = 0x00;
  485.                 *dst++ = 0x00;
  486.                 src += 3;
  487.                 continue;
  488.             }
  489.             *dst++ = *src++;
  490.         }
  491.     }
  492.     *pi_ret = dst - *pp_ret;
  493. }
  494. static inline int bs_read_ue( bs_t *s )
  495. {
  496.     int i = 0;
  497.     while( bs_read1( s ) == 0 && s->p < s->p_end && i < 32 )
  498.     {
  499.         i++;
  500.     }
  501.     return( ( 1 << i) - 1 + bs_read( s, i ) );
  502. }
  503. static inline int bs_read_se( bs_t *s )
  504. {
  505.     int val = bs_read_ue( s );
  506.     return val&0x01 ? (val+1)/2 : -(val/2);
  507. }
  508. /*****************************************************************************
  509.  * ParseNALBlock: parses annexB type NALs
  510.  * All p_frag blocks are required to start with 0 0 0 1 4-byte startcode
  511.  *****************************************************************************/
  512. static block_t *ParseNALBlock( decoder_t *p_dec, bool *pb_used_ts, block_t *p_frag )
  513. {
  514.     decoder_sys_t *p_sys = p_dec->p_sys;
  515.     block_t *p_pic = NULL;
  516.     const int i_nal_ref_idc = (p_frag->p_buffer[4] >> 5)&0x03;
  517.     const int i_nal_type = p_frag->p_buffer[4]&0x1f;
  518.     const mtime_t i_frag_dts = p_frag->i_dts;
  519.     const mtime_t i_frag_pts = p_frag->i_pts;
  520.     if( p_sys->b_slice && ( !p_sys->b_sps || !p_sys->b_pps ) )
  521.     {
  522.         block_ChainRelease( p_sys->p_frame );
  523.         msg_Warn( p_dec, "waiting for SPS/PPS" );
  524.         /* Reset context */
  525.         p_sys->slice.i_frame_type = 0;
  526.         p_sys->p_frame = NULL;
  527.         p_sys->b_slice = false;
  528.         cc_Flush( &p_sys->cc_next );
  529.     }
  530.     if( ( !p_sys->b_sps || !p_sys->b_pps ) &&
  531.         i_nal_type >= NAL_SLICE && i_nal_type <= NAL_SLICE_IDR )
  532.     {
  533.         p_sys->b_slice = true;
  534.         /* Fragment will be discarded later on */
  535.     }
  536.     else if( i_nal_type >= NAL_SLICE && i_nal_type <= NAL_SLICE_IDR )
  537.     {
  538.         slice_t slice;
  539.         bool  b_new_picture;
  540.         ParseSlice( p_dec, &b_new_picture, &slice, i_nal_ref_idc, i_nal_type, p_frag );
  541.         /* */
  542.         if( b_new_picture && p_sys->b_slice )
  543.             p_pic = OutputPicture( p_dec );
  544.         /* */
  545.         p_sys->slice = slice;
  546.         p_sys->b_slice = true;
  547.     }
  548.     else if( i_nal_type == NAL_SPS )
  549.     {
  550.         if( p_sys->b_slice )
  551.             p_pic = OutputPicture( p_dec );
  552.         PutSPS( p_dec, p_frag );
  553.         /* Do not append the SPS because we will insert it on keyframes */
  554.         p_frag = NULL;
  555.     }
  556.     else if( i_nal_type == NAL_PPS )
  557.     {
  558.         if( p_sys->b_slice )
  559.             p_pic = OutputPicture( p_dec );
  560.         PutPPS( p_dec, p_frag );
  561.         /* Do not append the PPS because we will insert it on keyframes */
  562.         p_frag = NULL;
  563.     }
  564.     else if( i_nal_type == NAL_AU_DELIMITER ||
  565.              i_nal_type == NAL_SEI ||
  566.              ( i_nal_type >= 13 && i_nal_type <= 18 ) )
  567.     {
  568.         if( p_sys->b_slice )
  569.             p_pic = OutputPicture( p_dec );
  570.         /* Parse SEI for CC support */
  571.         if( i_nal_type == NAL_SEI )
  572.             ParseSei( p_dec, p_frag );
  573.     }
  574.     /* Append the block */
  575.     if( p_frag )
  576.         block_ChainAppend( &p_sys->p_frame, p_frag );
  577.     *pb_used_ts = false;
  578.     if( p_sys->i_frame_dts < 0 && p_sys->i_frame_pts < 0 )
  579.     {
  580.         p_sys->i_frame_dts = i_frag_dts;
  581.         p_sys->i_frame_pts = i_frag_pts;
  582.         *pb_used_ts = true;
  583.     }
  584.     return p_pic;
  585. }
  586. static block_t *OutputPicture( decoder_t *p_dec )
  587. {
  588.     decoder_sys_t *p_sys = p_dec->p_sys;
  589.     block_t *p_pic;
  590.     if( !p_sys->b_header && p_sys->slice.i_frame_type != BLOCK_FLAG_TYPE_I)
  591.         return NULL;
  592.     if( p_sys->slice.i_frame_type == BLOCK_FLAG_TYPE_I && p_sys->b_sps && p_sys->b_pps )
  593.     {
  594.         block_t *p_list = NULL;
  595.         int i;
  596.         for( i = 0; i < SPS_MAX; i++ )
  597.         {
  598.             if( p_sys->pp_sps[i] )
  599.                 block_ChainAppend( &p_list, block_Duplicate( p_sys->pp_sps[i] ) );
  600.         }
  601.         for( i = 0; i < PPS_MAX; i++ )
  602.         {
  603.             if( p_sys->pp_pps[i] )
  604.                 block_ChainAppend( &p_list, block_Duplicate( p_sys->pp_pps[i] ) );
  605.         }
  606.         if( p_list )
  607.             p_sys->b_header = true;
  608.         block_ChainAppend( &p_list, p_sys->p_frame );
  609.         p_pic = block_ChainGather( p_list );
  610.     }
  611.     else
  612.     {
  613.         p_pic = block_ChainGather( p_sys->p_frame );
  614.     }
  615.     p_pic->i_dts = p_sys->i_frame_dts;
  616.     p_pic->i_pts = p_sys->i_frame_pts;
  617.     p_pic->i_length = 0;    /* FIXME */
  618.     p_pic->i_flags |= p_sys->slice.i_frame_type;
  619.     p_sys->slice.i_frame_type = 0;
  620.     p_sys->p_frame = NULL;
  621.     p_sys->i_frame_dts = -1;
  622.     p_sys->i_frame_pts = -1;
  623.     p_sys->b_slice = false;
  624.     /* CC */
  625.     p_sys->i_cc_pts = p_pic->i_pts;
  626.     p_sys->i_cc_dts = p_pic->i_dts;
  627.     p_sys->i_cc_flags = p_pic->i_flags;
  628.     /* Swap cc buffer */
  629.     cc_data_t cc_tmp = p_sys->cc;
  630.     p_sys->cc = p_sys->cc_next;
  631.     p_sys->cc_next = cc_tmp;
  632.     cc_Flush( &p_sys->cc_next );
  633.     return p_pic;
  634. }
  635. static void PutSPS( decoder_t *p_dec, block_t *p_frag )
  636. {
  637.     decoder_sys_t *p_sys = p_dec->p_sys;
  638.     uint8_t *pb_dec = NULL;
  639.     int     i_dec = 0;
  640.     bs_t s;
  641.     int i_tmp;
  642.     int i_sps_id;
  643.     CreateDecodedNAL( &pb_dec, &i_dec, &p_frag->p_buffer[5],
  644.                      p_frag->i_buffer - 5 );
  645.     bs_init( &s, pb_dec, i_dec );
  646.     int i_profile_idc = bs_read( &s, 8 );
  647.     /* Skip constraint_set0123, reserved(4), level(8) */
  648.     bs_skip( &s, 1+1+1+1 + 4 + 8 );
  649.     /* sps id */
  650.     i_sps_id = bs_read_ue( &s );
  651.     if( i_sps_id >= SPS_MAX )
  652.     {
  653.         msg_Warn( p_dec, "invalid SPS (sps_id=%d)", i_sps_id );
  654.         free( pb_dec );
  655.         block_Release( p_frag );
  656.         return;
  657.     }
  658.     if( i_profile_idc == 100 || i_profile_idc == 110 ||
  659.         i_profile_idc == 122 || i_profile_idc == 244 ||
  660.         i_profile_idc ==  44 || i_profile_idc ==  83 ||
  661.         i_profile_idc ==  86 )
  662.     {
  663.         /* chroma_format_idc */
  664.         const int i_chroma_format_idc = bs_read_ue( &s );
  665.         if( i_chroma_format_idc == 3 )
  666.             bs_skip( &s, 1 ); /* seperate_colour_plane_flag */
  667.         /* bit_depth_luma_minus8 */
  668.         bs_read_ue( &s );
  669.         /* bit_depth_chroma_minus8 */
  670.         bs_read_ue( &s );
  671.         /* qpprime_y_zero_transform_bypass_flag */
  672.         bs_skip( &s, 1 );
  673.         /* seq_scaling_matrix_present_flag */
  674.         i_tmp = bs_read( &s, 1 );
  675.         if( i_tmp )
  676.         {
  677.             for( int i = 0; i < ((3 != i_chroma_format_idc) ? 8 : 12); i++ )
  678.             {
  679.                 /* seq_scaling_list_present_flag[i] */
  680.                 i_tmp = bs_read( &s, 1 );
  681.                 if( !i_tmp )
  682.                     continue;
  683.                 const int i_size_of_scaling_list = (i < 6 ) ? 16 : 64;
  684.                 /* scaling_list (...) */
  685.                 int i_lastscale = 8;
  686.                 int i_nextscale = 8;
  687.                 for( int j = 0; j < i_size_of_scaling_list; j++ )
  688.                 {
  689.                     if( i_nextscale != 0 )
  690.                     {
  691.                         /* delta_scale */
  692.                         i_tmp = bs_read( &s, 1 );
  693.                         i_nextscale = ( i_lastscale + i_tmp + 256 ) % 256;
  694.                         /* useDefaultScalingMatrixFlag = ... */
  695.                     }
  696.                     /* scalinglist[j] */
  697.                     i_lastscale = ( i_nextscale == 0 ) ? i_lastscale : i_nextscale;
  698.                 }
  699.             }
  700.         }
  701.     }
  702.     /* Skip i_log2_max_frame_num */
  703.     p_sys->i_log2_max_frame_num = bs_read_ue( &s );
  704.     if( p_sys->i_log2_max_frame_num > 12)
  705.         p_sys->i_log2_max_frame_num = 12;
  706.     /* Read poc_type */
  707.     p_sys->i_pic_order_cnt_type = bs_read_ue( &s );
  708.     if( p_sys->i_pic_order_cnt_type == 0 )
  709.     {
  710.         /* skip i_log2_max_poc_lsb */
  711.         p_sys->i_log2_max_pic_order_cnt_lsb = bs_read_ue( &s );
  712.         if( p_sys->i_log2_max_pic_order_cnt_lsb > 12 )
  713.             p_sys->i_log2_max_pic_order_cnt_lsb = 12;
  714.     }
  715.     else if( p_sys->i_pic_order_cnt_type == 1 )
  716.     {
  717.         int i_cycle;
  718.         /* skip b_delta_pic_order_always_zero */
  719.         p_sys->i_delta_pic_order_always_zero_flag = bs_read( &s, 1 );
  720.         /* skip i_offset_for_non_ref_pic */
  721.         bs_read_se( &s );
  722.         /* skip i_offset_for_top_to_bottom_field */
  723.         bs_read_se( &s );
  724.         /* read i_num_ref_frames_in_poc_cycle */
  725.         i_cycle = bs_read_ue( &s );
  726.         if( i_cycle > 256 ) i_cycle = 256;
  727.         while( i_cycle > 0 )
  728.         {
  729.             /* skip i_offset_for_ref_frame */
  730.             bs_read_se(&s );
  731.             i_cycle--;
  732.         }
  733.     }
  734.     /* i_num_ref_frames */
  735.     bs_read_ue( &s );
  736.     /* b_gaps_in_frame_num_value_allowed */
  737.     bs_skip( &s, 1 );
  738.     /* Read size */
  739.     p_dec->fmt_out.video.i_width  = 16 * ( bs_read_ue( &s ) + 1 );
  740.     p_dec->fmt_out.video.i_height = 16 * ( bs_read_ue( &s ) + 1 );
  741.     /* b_frame_mbs_only */
  742.     p_sys->b_frame_mbs_only = bs_read( &s, 1 );
  743.     if( p_sys->b_frame_mbs_only == 0 )
  744.     {
  745.         bs_skip( &s, 1 );
  746.     }
  747.     /* b_direct8x8_inference */
  748.     bs_skip( &s, 1 );
  749.     /* crop */
  750.     i_tmp = bs_read( &s, 1 );
  751.     if( i_tmp )
  752.     {
  753.         /* left */
  754.         bs_read_ue( &s );
  755.         /* right */
  756.         bs_read_ue( &s );
  757.         /* top */
  758.         bs_read_ue( &s );
  759.         /* bottom */
  760.         bs_read_ue( &s );
  761.     }
  762.     /* vui */
  763.     i_tmp = bs_read( &s, 1 );
  764.     if( i_tmp )
  765.     {
  766.         /* read the aspect ratio part if any */
  767.         i_tmp = bs_read( &s, 1 );
  768.         if( i_tmp )
  769.         {
  770.             static const struct { int w, h; } sar[17] =
  771.             {
  772.                 { 0,   0 }, { 1,   1 }, { 12, 11 }, { 10, 11 },
  773.                 { 16, 11 }, { 40, 33 }, { 24, 11 }, { 20, 11 },
  774.                 { 32, 11 }, { 80, 33 }, { 18, 11 }, { 15, 11 },
  775.                 { 64, 33 }, { 160,99 }, {  4,  3 }, {  3,  2 },
  776.                 {  2,  1 },
  777.             };
  778.             int i_sar = bs_read( &s, 8 );
  779.             int w, h;
  780.             if( i_sar < 17 )
  781.             {
  782.                 w = sar[i_sar].w;
  783.                 h = sar[i_sar].h;
  784.             }
  785.             else if( i_sar == 255 )
  786.             {
  787.                 w = bs_read( &s, 16 );
  788.                 h = bs_read( &s, 16 );
  789.             }
  790.             else
  791.             {
  792.                 w = 0;
  793.                 h = 0;
  794.             }
  795.             if( h != 0 )
  796.                 p_dec->fmt_out.video.i_aspect = (int64_t)VOUT_ASPECT_FACTOR *
  797.                         ( w * p_dec->fmt_out.video.i_width ) /
  798.                         ( h * p_dec->fmt_out.video.i_height);
  799.             else
  800.                 p_dec->fmt_out.video.i_aspect = VOUT_ASPECT_FACTOR;
  801.         }
  802.     }
  803.     free( pb_dec );
  804.     /* We have a new SPS */
  805.     if( !p_sys->b_sps )
  806.         msg_Dbg( p_dec, "found NAL_SPS (sps_id=%d)", i_sps_id );
  807.     p_sys->b_sps = true;
  808.     if( p_sys->pp_sps[i_sps_id] )
  809.         block_Release( p_sys->pp_sps[i_sps_id] );
  810.     p_sys->pp_sps[i_sps_id] = p_frag;
  811. }
  812. static void PutPPS( decoder_t *p_dec, block_t *p_frag )
  813. {
  814.     decoder_sys_t *p_sys = p_dec->p_sys;
  815.     bs_t s;
  816.     int i_pps_id;
  817.     int i_sps_id;
  818.     bs_init( &s, &p_frag->p_buffer[5], p_frag->i_buffer - 5 );
  819.     i_pps_id = bs_read_ue( &s ); // pps id
  820.     i_sps_id = bs_read_ue( &s ); // sps id
  821.     if( i_pps_id >= PPS_MAX || i_sps_id >= SPS_MAX )
  822.     {
  823.         msg_Warn( p_dec, "invalid PPS (pps_id=%d sps_id=%d)", i_pps_id, i_sps_id );
  824.         block_Release( p_frag );
  825.         return;
  826.     }
  827.     bs_skip( &s, 1 ); // entropy coding mode flag
  828.     p_sys->i_pic_order_present_flag = bs_read( &s, 1 );
  829.     /* TODO */
  830.     /* We have a new PPS */
  831.     if( !p_sys->b_pps )
  832.         msg_Dbg( p_dec, "found NAL_PPS (pps_id=%d sps_id=%d)", i_pps_id, i_sps_id );
  833.     p_sys->b_pps = true;
  834.     if( p_sys->pp_pps[i_pps_id] )
  835.         block_Release( p_sys->pp_pps[i_pps_id] );
  836.     p_sys->pp_pps[i_pps_id] = p_frag;
  837. }
  838. static void ParseSlice( decoder_t *p_dec, bool *pb_new_picture, slice_t *p_slice,
  839.                         int i_nal_ref_idc, int i_nal_type, const block_t *p_frag )
  840. {
  841.     decoder_sys_t *p_sys = p_dec->p_sys;
  842.     uint8_t *pb_dec;
  843.     int i_dec;
  844.     int i_first_mb, i_slice_type;
  845.     slice_t slice;
  846.     bs_t s;
  847.     /* do not convert the whole frame */
  848.     CreateDecodedNAL( &pb_dec, &i_dec, &p_frag->p_buffer[5],
  849.                      __MIN( p_frag->i_buffer - 5, 60 ) );
  850.     bs_init( &s, pb_dec, i_dec );
  851.     /* first_mb_in_slice */
  852.     i_first_mb = bs_read_ue( &s );
  853.     /* slice_type */
  854.     switch( (i_slice_type = bs_read_ue( &s )) )
  855.     {
  856.     case 0: case 5:
  857.         slice.i_frame_type = BLOCK_FLAG_TYPE_P;
  858.         break;
  859.     case 1: case 6:
  860.         slice.i_frame_type = BLOCK_FLAG_TYPE_B;
  861.         break;
  862.     case 2: case 7:
  863.         slice.i_frame_type = BLOCK_FLAG_TYPE_I;
  864.         break;
  865.     case 3: case 8: /* SP */
  866.         slice.i_frame_type = BLOCK_FLAG_TYPE_P;
  867.         break;
  868.     case 4: case 9:
  869.         slice.i_frame_type = BLOCK_FLAG_TYPE_I;
  870.         break;
  871.     default:
  872.         slice.i_frame_type = 0;
  873.         break;
  874.     }
  875.     /* */
  876.     slice.i_nal_type = i_nal_type;
  877.     slice.i_nal_ref_idc = i_nal_ref_idc;
  878.     slice.i_pic_parameter_set_id = bs_read_ue( &s );
  879.     slice.i_frame_num = bs_read( &s, p_sys->i_log2_max_frame_num + 4 );
  880.     slice.i_field_pic_flag = 0;
  881.     slice.i_bottom_field_flag = -1;
  882.     if( !p_sys->b_frame_mbs_only )
  883.     {
  884.         /* field_pic_flag */
  885.         slice.i_field_pic_flag = bs_read( &s, 1 );
  886.         if( slice.i_field_pic_flag )
  887.             slice.i_bottom_field_flag = bs_read( &s, 1 );
  888.     }
  889.     slice.i_idr_pic_id = p_sys->slice.i_idr_pic_id;
  890.     if( slice.i_nal_type == NAL_SLICE_IDR )
  891.         slice.i_idr_pic_id = bs_read_ue( &s );
  892.     slice.i_pic_order_cnt_lsb = -1;
  893.     slice.i_delta_pic_order_cnt_bottom = -1;
  894.     slice.i_delta_pic_order_cnt0 = 0;
  895.     slice.i_delta_pic_order_cnt1 = 0;
  896.     if( p_sys->i_pic_order_cnt_type == 0 )
  897.     {
  898.         slice.i_pic_order_cnt_lsb = bs_read( &s, p_sys->i_log2_max_pic_order_cnt_lsb + 4 );
  899.         if( p_sys->i_pic_order_present_flag && !slice.i_field_pic_flag )
  900.             slice.i_delta_pic_order_cnt_bottom = bs_read_se( &s );
  901.     }
  902.     else if( (p_sys->i_pic_order_cnt_type == 1) &&
  903.              (!p_sys->i_delta_pic_order_always_zero_flag) )
  904.     {
  905.         slice.i_delta_pic_order_cnt0 = bs_read_se( &s );
  906.         if( p_sys->i_pic_order_present_flag && !slice.i_field_pic_flag )
  907.             slice.i_delta_pic_order_cnt1 = bs_read_se( &s );
  908.     }
  909.     free( pb_dec );
  910.     /* Detection of the first VCL NAL unit of a primary coded picture
  911.      * (cf. 7.4.1.2.4) */
  912.     bool b_pic = false;
  913.     if( slice.i_frame_num != p_sys->slice.i_frame_num ||
  914.         slice.i_pic_parameter_set_id != p_sys->slice.i_pic_parameter_set_id ||
  915.         slice.i_field_pic_flag != p_sys->slice.i_field_pic_flag ||
  916.         slice.i_nal_ref_idc != p_sys->slice.i_nal_ref_idc )
  917.         b_pic = true;
  918.     if( (slice.i_bottom_field_flag != -1) &&
  919.         (p_sys->slice.i_bottom_field_flag != -1) &&
  920.         (slice.i_bottom_field_flag != p_sys->slice.i_bottom_field_flag) )
  921.         b_pic = true;
  922.     if( p_sys->i_pic_order_cnt_type == 0 &&
  923.         ( slice.i_pic_order_cnt_lsb != p_sys->slice.i_pic_order_cnt_lsb ||
  924.           slice.i_delta_pic_order_cnt_bottom != p_sys->slice.i_delta_pic_order_cnt_bottom ) )
  925.         b_pic = true;
  926.     else if( p_sys->i_pic_order_cnt_type == 1 &&
  927.              ( slice.i_delta_pic_order_cnt0 != p_sys->slice.i_delta_pic_order_cnt0 ||
  928.                slice.i_delta_pic_order_cnt1 != p_sys->slice.i_delta_pic_order_cnt1 ) )
  929.         b_pic = true;
  930.     if( ( slice.i_nal_type == NAL_SLICE_IDR || p_sys->slice.i_nal_type == NAL_SLICE_IDR ) &&
  931.         ( slice.i_nal_type != p_sys->slice.i_nal_type || slice.i_idr_pic_id != p_sys->slice.i_idr_pic_id ) )
  932.             b_pic = true;
  933.     /* */
  934.     *pb_new_picture = b_pic;
  935.     *p_slice = slice;
  936. }
  937. static void ParseSei( decoder_t *p_dec, block_t *p_frag )
  938. {
  939.     decoder_sys_t *p_sys = p_dec->p_sys;
  940.     uint8_t *pb_dec;
  941.     int i_dec;
  942.     /* */
  943.     CreateDecodedNAL( &pb_dec, &i_dec, &p_frag->p_buffer[5], p_frag->i_buffer - 5 );
  944.     if( !pb_dec )
  945.         return;
  946.     /* The +1 is for rbsp trailing bits */
  947.     for( int i_used = 0; i_used+1 < i_dec; )
  948.     {
  949.         /* Read type */
  950.         int i_type = 0;
  951.         while( i_used+1 < i_dec )
  952.         {
  953.             const int i_byte = pb_dec[i_used++];
  954.             i_type += i_byte;
  955.             if( i_byte != 0xff )
  956.                 break;
  957.         }
  958.         /* Read size */
  959.         int i_size = 0;
  960.         while( i_used+1 < i_dec )
  961.         {
  962.             const int i_byte = pb_dec[i_used++];
  963.             i_size += i_byte;
  964.             if( i_byte != 0xff )
  965.                 break;
  966.         }
  967.         /* Check room */
  968.         if( i_used + i_size + 1 > i_dec )
  969.             break;
  970.         /* Look for user_data_registered_itu_t_t35 */
  971.         if( i_type == 4 )
  972.         {
  973.             static const uint8_t p_dvb1_data_start_code[] = {
  974.                 0xb5,
  975.                 0x00, 0x31,
  976.                 0x47, 0x41, 0x39, 0x34
  977.             };
  978.             const int      i_t35 = i_size;
  979.             const uint8_t *p_t35 = &pb_dec[i_used];
  980.             /* Check for we have DVB1_data() */
  981.             if( i_t35 >= 5 &&
  982.                 !memcmp( p_t35, p_dvb1_data_start_code, sizeof(p_dvb1_data_start_code) ) )
  983.             {
  984.                 cc_Extract( &p_sys->cc_next, &p_t35[3], i_t35 - 3 );
  985.             }
  986.         }
  987.         i_used += i_size;
  988.     }
  989.     free( pb_dec );
  990. }