}
}
// so everything is fine now do a memcpy
- int cancopy=min(haveToCopy,cur_input_buf_omx->nAllocLen-cur_input_buf_omx->nFilledLen);
- memcpy(cur_input_buf_omx->pBuffer+cur_input_buf_omx->nFilledLen,buffer+mpacket.pos_buffer+*samplepos,cancopy);
+ int cancopy = std::min(haveToCopy, cur_input_buf_omx->nAllocLen-cur_input_buf_omx->nFilledLen);
+ memcpy(cur_input_buf_omx->pBuffer + cur_input_buf_omx->nFilledLen, buffer + mpacket.pos_buffer + *samplepos, cancopy);
haveToCopy-=cancopy;
cur_input_buf_omx->nFilledLen+=cancopy;
*samplepos+=cancopy;
incoming_paket_libav.data =(uint8_t*) decompress_buffer;
memcpy(decompress_buffer+decompress_buffer_filled,
buffer+mpacket.pos_buffer+*samplepos,
- min(haveToCopy,decompress_buffer_size-decompress_buffer_filled));
+ std::min(haveToCopy,decompress_buffer_size-decompress_buffer_filled));
incoming_paket_libav.size = decompress_buffer_filled
- +min(haveToCopy,decompress_buffer_size-decompress_buffer_filled);
+ +std::min(haveToCopy,decompress_buffer_size-decompress_buffer_filled);
//LogNT::getInstance()->debug(TAG,"Use saved audio buffer {} {} {}",mpacket.type,decompress_buffer_filled,mpacket.synched);
} else {
incoming_paket_libav.data =(uint8_t*) buffer+mpacket.pos_buffer+*samplepos;
if (decompress_buffer_filled) { // reset to normal decoding
if (len>0) {
- //LogNT::getInstance()->debug(TAG,"saved audio: {}",len);
- haveToCopy -= min(len-decompress_buffer_filled,0);
- *samplepos += min(len-decompress_buffer_filled,0);
+ // len is int
+ // decompress_buffer_filled is unsigned int
+ // so if decompress_buffer_filled > len, len can go negative.
+
+ // Why would you use a min function with one of the values hard coded to zero?
+ // If param1 is positive the result is always 0.
+ // If param1 is negative the result is always param1.
+ // However, badMinimumFunction is and always was: int badMinimumFunction(u4 a, int b)
+ // .. which takes param1 as unsigned. So whatever param1 is, the result is always 0.
+
+ // A guess is that the intention was to try to calculate a positive result, but if
+ // for some reason len-decompress_buffer_filled < 0, return 0.
+ // But for that you would use a max() function...
+
+ //haveToCopy -= badMinimumFunction(len - decompress_buffer_filled, 0);
+ //*samplepos += badMinimumFunction(len - decompress_buffer_filled, 0);
+
+ int result = badMinimumFunction(len - decompress_buffer_filled, 0);
+ haveToCopy -= result;
+ *samplepos += result;
+
+ abort(); // When does this run?
+
+
+ // len is always either 0 or the result of avcodec_decode_audio4(current_context, decode_frame_libav, &gotta, &incoming_paket_libav);
+ // the result of avcodec_decode_audio4 can be negative in case of error, but that is filtered out above
+
+ // decompress_buffer_filled appears to be how much of the decompress buffer has already been written to.
+ // Presumably things can happen in multiple chunks.
+
+
//if (current_context->frame_size>0) framesize=min(current_context->frame_size,haveToCopy);
/*else*/ framesize=haveToCopy;
- } else {
+ }
+ else
+ {
framesize=haveToCopy;
}
incoming_paket_libav.data =(uint8_t*) buffer+mpacket.pos_buffer+*samplepos;
decompress_buffer_filled=0;
if (haveToCopy ) {
//LogNT::getInstance()->debug(TAG,"We can not decompress {} save for later {} {:#x} {:#x}",haveToCopy,mpacket.type,incoming_paket_libav.data,mpacket.pos_buffer);
- memcpy(decompress_buffer,incoming_paket_libav.data,min(haveToCopy,decompress_buffer_size));
+ memcpy(decompress_buffer,incoming_paket_libav.data, std::min(haveToCopy,decompress_buffer_size));
- decompress_buffer_filled=min(haveToCopy,decompress_buffer_size);
+ decompress_buffer_filled=std::min(haveToCopy,decompress_buffer_size);
}
VideoOMX* vw = dynamic_cast<VideoOMX*>(Video::getInstance());
vw->ResetTimeOffsets();
}
+
+
+int AudioOMX::badMinimumFunction(u4 a, int b)
+{
+ printf("MIN: P1: %u, P2: %i\n", a, b);
+
+ if (a > b) return b;
+ else return a;
+}