- if( p_dec->p_owner->p_sout == NULL )
- {
- msg_Err( p_dec, "cannot create packetizer output" );
- p_dec->b_error = VLC_TRUE;
-
- while( p_sout_block )
- {
- block_t *p_next = p_sout_block->p_next;
- block_Release( p_sout_block );
- p_sout_block = p_next;
- }
- break;
- }
+/**
+ * Decode a block
+ *
+ * \param p_dec the decoder object
+ * \param p_block the block to decode
+ * \return VLC_SUCCESS or an error code
+ */
+static int DecoderDecode( decoder_t *p_dec, block_t *p_block )
+{
+ if( p_block->i_buffer <= 0 )
+ {
+ block_Release( p_block );
+ return VLC_SUCCESS;
+ }
+
+ if( p_dec->i_object_type == VLC_OBJECT_PACKETIZER )
+ {
+ block_t *p_sout_block;
+
+ while( (p_sout_block = p_dec->pf_packetize( p_dec, &p_block )) )
+ {
+ if( !p_dec->p_owner->p_sout_input )
+ {
+ es_format_Copy( &p_dec->p_owner->sout, &p_dec->fmt_out );
+ if( p_dec->p_owner->p_es_descriptor->p_pgrm )
+ {
+ p_dec->p_owner->sout.i_group =
+ p_dec->p_owner->p_es_descriptor->p_pgrm->i_number;
+ }
+ p_dec->p_owner->sout.i_id = p_dec->p_owner->p_es_descriptor->i_id - 1;
+ if( p_dec->fmt_in.psz_language )
+ {
+ p_dec->p_owner->sout.psz_language = strdup( p_dec->fmt_in.psz_language );