@@ -46,15 +46,15 @@ class AudioReencodeBuffer : public AudioOutput
4646 audiobuffer = new unsigned char [bufsize];
4747
4848 ab_count = 0 ;
49- memset (ab_len, 0 , sizeof (ab_len));
50- memset (ab_offset, 0 , sizeof (ab_offset));
51- memset (ab_time, 0 , sizeof (ab_time));
49+ ab_size = 128 ;
50+ ab = new AudioBuffer[ab_size];
5251 m_initpassthru = passthru;
5352 }
5453
5554 ~AudioReencodeBuffer ()
5655 {
5756 delete [] audiobuffer;
57+ delete [] ab;
5858 }
5959
6060 // reconfigure sound out for new params
@@ -102,9 +102,16 @@ class AudioReencodeBuffer : public AudioOutput
102102 delete [] audiobuffer;
103103 audiobuffer = tmpbuf;
104104 }
105-
106- ab_len[ab_count] = len;
107- ab_offset[ab_count] = audiobuffer_len;
105+ if (ab_count >= ab_size)
106+ {
107+ AudioBuffer *tmp = new AudioBuffer[ab_size + 128 ];
108+ memcpy (tmp, ab, sizeof (AudioBuffer) * ab_size);
109+ delete[] ab;
110+ ab = tmp;
111+ ab_size += 128 ;
112+ }
113+ ab[ab_count].len = len;
114+ ab[ab_count].offset = audiobuffer_len;
108115
109116 memcpy (audiobuffer + audiobuffer_len, buffer,
110117 len);
@@ -115,7 +122,7 @@ class AudioReencodeBuffer : public AudioOutput
115122 last_audiotime = timecode + frames * 1000 /
116123 eff_audiorate;
117124
118- ab_time [ab_count] = last_audiotime;
125+ ab [ab_count]. time = last_audiotime;
119126 ab_count++;
120127
121128 return true ;
@@ -219,10 +226,15 @@ class AudioReencodeBuffer : public AudioOutput
219226 { return m_initpassthru; }
220227
221228 int bufsize;
222- int ab_count;
223- int ab_len[128 ];
224- int ab_offset[128 ];
225- long long ab_time[128 ];
229+ uint ab_count;
230+ struct AudioBuffer
231+ {
232+ int len;
233+ int offset;
234+ long long time;
235+ };
236+ AudioBuffer *ab;
237+ uint ab_size;
226238 unsigned char *audiobuffer;
227239 int audiobuffer_len, audiobuffer_frames;
228240 int channels, bits, bytes_per_frame, eff_audiorate;
@@ -1095,12 +1107,12 @@ int Transcode::TranscodeFile(
10951107 audioframesize = arb->audiobuffer_len ;
10961108 if (arb->ab_count )
10971109 {
1098- for (int loop = 0 ; loop < arb->ab_count ; loop++)
1110+ for (uint loop = 0 ; loop < arb->ab_count ; loop++)
10991111 {
1100- nvr->SetOption (" audioframesize" , arb->ab_len [loop]);
1101- nvr->WriteAudio (arb->audiobuffer + arb->ab_offset [loop],
1112+ nvr->SetOption (" audioframesize" , arb->ab [loop]. len );
1113+ nvr->WriteAudio (arb->audiobuffer + arb->ab [loop]. offset ,
11021114 audioFrame++,
1103- arb->ab_time [loop] - timecodeOffset);
1115+ arb->ab [loop]. time - timecodeOffset);
11041116 if (nvr->IsErrored ())
11051117 {
11061118 VERBOSE (VB_IMPORTANT, " Transcode: Encountered "
0 commit comments