X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Faudio_filter%2Fconverter%2Fdtstospdif.c;h=99c57bdd2c1f62bf350bff9a4861007a0c5d4b39;hb=56220f86120b3d7b7d8c7b2957befede19f669b6;hp=c345e011cdaaa4c25f120ce08bb7ae9178d386da;hpb=25232e200b39db62c3e49f9269c215a71873c7f9;p=vlc diff --git a/modules/audio_filter/converter/dtstospdif.c b/modules/audio_filter/converter/dtstospdif.c index c345e011cd..99c57bdd2c 100644 --- a/modules/audio_filter/converter/dtstospdif.c +++ b/modules/audio_filter/converter/dtstospdif.c @@ -1,10 +1,15 @@ /***************************************************************************** * dtstospdif.c : encapsulates DTS frames into S/PDIF packets ***************************************************************************** - * Copyright (C) 2003, 2006 the VideoLAN team + * Copyright (C) 2003-2009 the VideoLAN team * $Id$ * * Authors: Jon Lech Johansen + * Gildas Bazin + * Derk-Jan Hartman + * Pierre d'Herbemont + * Rémi Denis-Courmont + * Rafaël Carré * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -28,6 +33,7 @@ # include "config.h" #endif +#define VLC_MODULE_LICENSE VLC_LICENSE_GPL_2_PLUS #include #include @@ -41,7 +47,7 @@ struct filter_sys_t { mtime_t start_date; - /* 3 DTS frames have to be packed into an S/PDIF frame. + /* 3 DTS frames (max 2048) have to be packed into an S/PDIF frame (6144). * We accumulate DTS frames from the decoder until we have enough to * send. */ size_t i_frame_size; @@ -63,7 +69,7 @@ vlc_module_begin () set_category( CAT_AUDIO ) set_subcategory( SUBCAT_AUDIO_MISC ) set_description( N_("Audio filter for DTS->S/PDIF encapsulation") ) - set_capability( "audio filter", 10 ) + set_capability( "audio converter", 10 ) set_callbacks( Create, Close ) vlc_module_end () @@ -86,6 +92,7 @@ static int Create( vlc_object_t *p_this ) p_sys = p_filter->p_sys = malloc( sizeof(*p_sys) ); if( !p_sys ) return VLC_ENOMEM; + p_sys->p_buf = NULL; p_sys->i_frame_size = 0; p_sys->i_frames = 0; @@ -132,7 +139,7 @@ static block_t *DoWork( filter_t * p_filter, block_t * p_in_buf ) /* Backup frame */ /* TODO: keeping the blocks in a list would save one memcpy */ - vlc_memcpy( p_filter->p_sys->p_buf + p_in_buf->i_buffer * + memcpy( p_filter->p_sys->p_buf + p_in_buf->i_buffer * p_filter->p_sys->i_frames, p_in_buf->p_buffer, p_in_buf->i_buffer ); @@ -150,8 +157,7 @@ static block_t *DoWork( filter_t * p_filter, block_t * p_in_buf ) } p_filter->p_sys->i_frames = 0; - block_t *p_out_buf = filter_NewAudioBuffer( p_filter, - 12 * p_in_buf->i_nb_samples ); + block_t *p_out_buf = block_Alloc( 12 * p_in_buf->i_nb_samples ); if( !p_out_buf ) goto out; @@ -171,17 +177,15 @@ static block_t *DoWork( filter_t * p_filter, block_t * p_in_buf ) /* Copy the S/PDIF headers. */ if( p_filter->fmt_out.audio.i_format == VLC_CODEC_SPDIFB ) { - vlc_memcpy( p_out, p_sync_be, 6 ); + memcpy( p_out, p_sync_be, 6 ); p_out[5] = i_ac5_spdif_type; - p_out[6] = (( i_length ) >> 5 ) & 0xFF; - p_out[7] = ( i_length << 3 ) & 0xFF; + SetWBE( p_out + 6, i_length << 3 ); } else { - vlc_memcpy( p_out, p_sync_le, 6 ); + memcpy( p_out, p_sync_le, 6 ); p_out[4] = i_ac5_spdif_type; - p_out[6] = ( i_length << 3 ) & 0xFF; - p_out[7] = (( i_length ) >> 5 ) & 0xFF; + SetWLE( p_out + 6, i_length << 3 ); } if( ( (p_in[0] == 0x1F || p_in[0] == 0x7F) && p_filter->fmt_out.audio.i_format == VLC_CODEC_SPDIFL ) || @@ -202,12 +206,12 @@ static block_t *DoWork( filter_t * p_filter, block_t * p_in_buf ) } else { - vlc_memcpy( p_out + 8, p_in, i_length ); + memcpy( p_out + 8, p_in, i_length ); } if( i_fz > i_length + 8 ) { - vlc_memset( p_out + 8 + i_length_padded, 0, + memset( p_out + 8 + i_length_padded, 0, i_fz - i_length_padded - 8 ); } }