]> git.sesse.net Git - vlc/blobdiff - modules/demux/mpeg/m4a.c
Clean up mpga demuxer and properly fix #1081 (ie without segfault).
[vlc] / modules / demux / mpeg / m4a.c
index 017b4e74c2db4c17caccdd260fcbebbd89b121f7..a54f793b82c5b4a4c185eee340c051562733a59f 100644 (file)
@@ -29,7 +29,8 @@
 # include "config.h"
 #endif
 
-#include <vlc/vlc.h>
+#include <vlc_common.h>
+#include <vlc_plugin.h>
 #include <vlc_demux.h>
 #include <vlc_codec.h>
 #include <vlc_input.h>
@@ -43,7 +44,7 @@ static void Close( vlc_object_t * );
 vlc_module_begin();
     set_category( CAT_INPUT );
     set_subcategory( SUBCAT_INPUT_DEMUX );
-    set_description( _("MPEG-4 audio demuxer" ) );
+    set_description( N_("MPEG-4 audio demuxer" ) );
     set_capability( "demux", 110 );
     set_callbacks( Open, Close );
     add_shortcut( "m4a" );
@@ -159,16 +160,20 @@ static int Demux( demux_t *p_demux)
                                           &p_sys->p_packetizer->fmt_out);
             }
 
-            es_out_Control( p_demux->out, ES_OUT_SET_PCR, p_block_out->i_dts );
-
-            p_block_out->p_next = NULL;
-
             p_sys->i_pts = p_block_out->i_pts;
-            if( p_sys->i_pts > M4A_PTS_START + I64C(500000) )
+            if( p_sys->i_pts > M4A_PTS_START + INT64_C(500000) )
                 p_sys->i_bitrate_avg =
-                    8*I64C(1000000)*p_sys->i_bytes/(p_sys->i_pts-M4A_PTS_START);
+                    8*INT64_C(1000000)*p_sys->i_bytes/(p_sys->i_pts-M4A_PTS_START);
 
             p_sys->i_bytes += p_block_out->i_buffer;
+
+            /* Correct timestamp */
+            p_block_out->i_pts += p_sys->i_time_offset;
+            p_block_out->i_dts += p_sys->i_time_offset;
+
+            /* */
+            es_out_Control( p_demux->out, ES_OUT_SET_PCR, p_block_out->i_dts );
+
             es_out_Send( p_demux->out, p_sys->p_es, p_block_out );
 
             p_block_out = p_next;
@@ -207,7 +212,7 @@ static int Control( demux_t *p_demux, int i_query, va_list args )
         if( (i_query == DEMUX_SET_POSITION || i_query == DEMUX_SET_TIME ) &&
             i_ret == VLC_SUCCESS && p_sys->i_bitrate_avg > 0 )
         {
-            int64_t i_time = I64C(8000000) * stream_Tell(p_demux->s) /
+            int64_t i_time = INT64_C(8000000) * stream_Tell(p_demux->s) /
                 p_sys->i_bitrate_avg;
 
             if( i_time >= 0 )