@@ -47,15 +47,15 @@ class AudioReencodeBuffer : public AudioOutput
4747 audiobuffer = new unsigned char [bufsize];
4848
4949 ab_count = 0 ;
50- memset (ab_len, 0 , sizeof (ab_len));
51- memset (ab_offset, 0 , sizeof (ab_offset));
52- memset (ab_time, 0 , sizeof (ab_time));
50+ ab_size = 128 ;
51+ ab = new AudioBuffer[ab_size];
5352 m_initpassthru = passthru;
5453 }
5554
5655 ~AudioReencodeBuffer ()
5756 {
5857 delete [] audiobuffer;
58+ delete [] ab;
5959 }
6060
6161 // 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;
@@ -1152,12 +1164,12 @@ int Transcode::TranscodeFile(const QString &inputname,
11521164 audioframesize = arb->audiobuffer_len ;
11531165 if (arb->ab_count )
11541166 {
1155- for (int loop = 0 ; loop < arb->ab_count ; loop++)
1167+ for (uint loop = 0 ; loop < arb->ab_count ; loop++)
11561168 {
1157- nvr->SetOption (" audioframesize" , arb->ab_len [loop]);
1158- nvr->WriteAudio (arb->audiobuffer + arb->ab_offset [loop],
1169+ nvr->SetOption (" audioframesize" , arb->ab [loop]. len );
1170+ nvr->WriteAudio (arb->audiobuffer + arb->ab [loop]. offset ,
11591171 audioFrame++,
1160- arb->ab_time [loop] - timecodeOffset);
1172+ arb->ab [loop]. time - timecodeOffset);
11611173 if (nvr->IsErrored ())
11621174 {
11631175 LOG (VB_GENERAL, LOG_ERR,
0 commit comments