@@ -42,6 +42,7 @@ enum p_state {
4242};
4343
4444struct dma_frame_parser {
45+ bool log_to_stdout ;
4546 enum p_state state ;
4647 struct probe_data_packet * packet ;
4748 size_t packet_size ;
@@ -85,51 +86,55 @@ bool is_audio_format(uint32_t format)
8586 return (format & PROBE_MASK_FMT_TYPE ) != 0 && (format & PROBE_MASK_AUDIO_FMT ) == 0 ;
8687}
8788
88- int init_wave (struct wave_files * files , uint32_t buffer_id , uint32_t format )
89+ int init_wave (struct dma_frame_parser * p , uint32_t buffer_id , uint32_t format )
8990{
9091 bool audio = is_audio_format (format );
9192 char path [FILE_PATH_LIMIT ];
9293 int i ;
9394
94- i = get_buffer_file_free (files );
95+ i = get_buffer_file_free (p -> files );
9596 if (i == -1 ) {
9697 fprintf (stderr , "error: too many buffers\n" );
9798 exit (0 );
9899 }
99100
100101 sprintf (path , "buffer_%d.%s" , buffer_id , audio ? "wav" : "bin" );
101102
102- fprintf (stdout , "%s:\t Creating file %s\n" , APP_NAME , path );
103+ fprintf (stderr , "%s:\t Creating file %s\n" , APP_NAME , path );
103104
104- files [i ].fd = fopen (path , "wb" );
105- if (!files [i ].fd ) {
106- fprintf (stderr , "error: unable to create file %s, error %d\n" ,
107- path , errno );
108- exit (0 );
105+ if (!audio && p -> log_to_stdout ) {
106+ p -> files [i ].fd = stdout ;
107+ } else {
108+ p -> files [i ].fd = fopen (path , "wb" );
109+ if (!p -> files [i ].fd ) {
110+ fprintf (stderr , "error: unable to create file %s, error %d\n" ,
111+ path , errno );
112+ exit (0 );
113+ }
109114 }
110115
111- files [i ].buffer_id = buffer_id ;
112- files [i ].fmt = format ;
116+ p -> files [i ].buffer_id = buffer_id ;
117+ p -> files [i ].fmt = format ;
113118
114119 if (!audio )
115120 return i ;
116121
117- files [i ].header .riff .chunk_id = HEADER_RIFF ;
118- files [i ].header .riff .format = HEADER_WAVE ;
119- files [i ].header .fmt .subchunk_id = HEADER_FMT ;
120- files [i ].header .fmt .subchunk_size = 16 ;
121- files [i ].header .fmt .audio_format = 1 ;
122- files [i ].header .fmt .num_channels = ((format & PROBE_MASK_NB_CHANNELS ) >> PROBE_SHIFT_NB_CHANNELS ) + 1 ;
123- files [i ].header .fmt .sample_rate = sample_rate [(format & PROBE_MASK_SAMPLE_RATE ) >> PROBE_SHIFT_SAMPLE_RATE ];
124- files [i ].header .fmt .bits_per_sample = (((format & PROBE_MASK_CONTAINER_SIZE ) >> PROBE_SHIFT_CONTAINER_SIZE ) + 1 ) * 8 ;
125- files [i ].header .fmt .byte_rate = files [i ].header .fmt .sample_rate *
126- files [i ].header .fmt .num_channels *
127- files [i ].header .fmt .bits_per_sample / 8 ;
128- files [i ].header .fmt .block_align = files [i ].header .fmt .num_channels *
129- files [i ].header .fmt .bits_per_sample / 8 ;
130- files [i ].header .data .subchunk_id = HEADER_DATA ;
131-
132- fwrite (& files [i ].header , sizeof (struct wave ), 1 , files [i ].fd );
122+ p -> files [i ].header .riff .chunk_id = HEADER_RIFF ;
123+ p -> files [i ].header .riff .format = HEADER_WAVE ;
124+ p -> files [i ].header .fmt .subchunk_id = HEADER_FMT ;
125+ p -> files [i ].header .fmt .subchunk_size = 16 ;
126+ p -> files [i ].header .fmt .audio_format = 1 ;
127+ p -> files [i ].header .fmt .num_channels = ((format & PROBE_MASK_NB_CHANNELS ) >> PROBE_SHIFT_NB_CHANNELS ) + 1 ;
128+ p -> files [i ].header .fmt .sample_rate = sample_rate [(format & PROBE_MASK_SAMPLE_RATE ) >> PROBE_SHIFT_SAMPLE_RATE ];
129+ p -> files [i ].header .fmt .bits_per_sample = (((format & PROBE_MASK_CONTAINER_SIZE ) >> PROBE_SHIFT_CONTAINER_SIZE ) + 1 ) * 8 ;
130+ p -> files [i ].header .fmt .byte_rate = p -> files [i ].header .fmt .sample_rate *
131+ p -> files [i ].header .fmt .num_channels *
132+ p -> files [i ].header .fmt .bits_per_sample / 8 ;
133+ p -> files [i ].header .fmt .block_align = p -> files [i ].header .fmt .num_channels *
134+ p -> files [i ].header .fmt .bits_per_sample / 8 ;
135+ p -> files [i ].header .data .subchunk_id = HEADER_DATA ;
136+
137+ fwrite (& p -> files [i ].header , sizeof (struct wave ), 1 , p -> files [i ].fd );
133138
134139 return i ;
135140}
@@ -236,6 +241,11 @@ void parser_free(struct dma_frame_parser *p)
236241 free (p );
237242}
238243
244+ void parser_log_to_stdout (struct dma_frame_parser * p )
245+ {
246+ p -> log_to_stdout = true;
247+ }
248+
239249void parser_fetch_free_buffer (struct dma_frame_parser * p , uint8_t * * d , size_t * len )
240250{
241251 * d = & p -> data [p -> start ];
@@ -286,8 +296,7 @@ int parser_parse_data(struct dma_frame_parser *p, size_t d_len)
286296 p -> packet -> buffer_id );
287297
288298 if (file < 0 )
289- file = init_wave (p -> files ,
290- p -> packet -> buffer_id ,
299+ file = init_wave (p , p -> packet -> buffer_id ,
291300 p -> packet -> format );
292301
293302 if (file < 0 ) {
@@ -326,4 +335,3 @@ int parser_parse_data(struct dma_frame_parser *p, size_t d_len)
326335 }
327336 return 0 ;
328337}
329-
0 commit comments