if (!omx_running) return 0; // if we are not runnig do not do this
if (paused) return 0; //Block if we pause
+ //Log::getInstance()->log("Audio", Log::DEBUG, "DMP mark 1");
//Log::getInstance()->log("Audio", Log::DEBUG, "DeliverMediaPacketOMX time %lld",packet.presentation_time);
return packet.length;
}*/
-
+ //Log::getInstance()->log("Audio", Log::DEBUG, "DMP mark 2");
UINT headerstrip = 0;
if (packet.disconti) {
}
lsync=true;
}
-
+ //Log::getInstance()->log("Audio", Log::DEBUG, "DMP mark 3");
if (packet.type != lastAType) {//Format Change //Push data out !
firstsynched = false;
achange=true;
}
cur_input_buf_omx = NULL;
}
+ int oldcancelstate;
+ int oldcanceltype;
+ pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &oldcancelstate);
+ pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, &oldcanceltype);
vw->LockClock();
if (!ChangeAudioPortConfig(true)) {
Log::getInstance()->log("Audio", Log::DEBUG,
"Changing audio port config failed", error);
}
vw->UnlockClock();
+ pthread_setcancelstate(oldcancelstate, NULL);
+ pthread_setcanceltype(oldcanceltype, NULL);
lsync=true;
}
+ //Log::getInstance()->log("Audio", Log::DEBUG, "DMP mark 4");
/*Inspect PES-Header */
if (*samplepos == 0 && packet.type != MPTYPE_MPEG_AUDIO_LAYER3) {//stripheader
if (!firstsynched) {//
*samplepos = packet.length;//if we have not processed at least one
decompress_buffer_filled=0;
+ //Log::getInstance()->log("Audio", Log::DEBUG, "DMP mark 5");
return packet.length;//synched packet ignore it!
}
}
input_bufs_omx_mutex.Lock();
if (input_bufs_omx_free.size()==0) {
input_bufs_omx_mutex.Unlock();
+ //Log::getInstance()->log("Audio", Log::DEBUG, "DMP mark 6");
//Log::getInstance()->log("Audio", Log::DEBUG, "Deliver MediaPacket no free sample");
return 0; // we do not have a free media sample
input_bufs_omx_free.pop_front();
input_bufs_omx_mutex.Unlock();
}
+ //Log::getInstance()->log("Audio", Log::DEBUG, "DMP mark 7");
if (cur_input_buf_omx->nFilledLen == 0) {//will only be changed on first packet
if (packet.synched) {
}
}
+ //Log::getInstance()->log("Audio", Log::DEBUG, "DMP mark 8");
if (*samplepos>packet.length) *samplepos=0; //propably the thread got interrupted and sample is not valid any more!
unsigned int haveToCopy=packet.length-*samplepos;
if (passthrough) {
while (haveToCopy>0) {
+ //Log::getInstance()->log("Audio", Log::DEBUG, "DMP mark 9");
if (lsync) {
unsigned int gotframesize=0;
int adv=0;
*samplepos+=adv;
} else {
*samplepos=packet.length; //no ac3 sync byte
+ //Log::getInstance()->log("Audio", Log::DEBUG, "DMP mark 10");
return packet.length;
}
}
haveToCopy-=cancopy;
cur_input_buf_omx->nFilledLen+=cancopy;
*samplepos+=cancopy;
+ //Log::getInstance()->log("Audio", Log::DEBUG, "DMP mark 11");
error = vw->ProtOMXEmptyThisBuffer(omx_aud_rend/*dec*/, cur_input_buf_omx);
if (error != OMX_ErrorNone) {
input_bufs_omx_free.pop_front();
input_bufs_omx_mutex.Unlock();
}
-
+ //Log::getInstance()->log("Audio", Log::DEBUG, "DMP mark 12");
}
+ //Log::getInstance()->log("Audio", Log::DEBUG, "DMP mark 13");
} else {
int len;
incoming_paket_libav.data =(uint8_t*) buffer+packet.pos_buffer+*samplepos;
incoming_paket_libav.size = haveToCopy;
}
+ //Log::getInstance()->log("Audio", Log::DEBUG, "DMP mark 18");
while (haveToCopy> 0 && errcount<3) {
}
// else Log::getInstance()->log("Audio", Log::DEBUG,"Loop run" );
}
-
+ //Log::getInstance()->log("Audio", Log::DEBUG, "DMP mark 19");
if (!donotdecompress) {
int oldcancelstate;
int oldcanceltype;
len=0;
}
//Log::getInstance()->log("Audio", Log::DEBUG, "libav out2");
+ //Log::getInstance()->log("Audio", Log::DEBUG, "DMP mark 20");
if (!omx_running) {
libav_mutex.Unlock();
return *samplepos;
framesize=haveToCopy;
}
}
+ //Log::getInstance()->log("Audio", Log::DEBUG, "DMP mark 21");
incoming_paket_libav.size =framesize;
if (gotta) {
// Log::getInstance()->log("Audio", Log::DEBUG,
// "Deliver MediaPacket no free sample");
MILLISLEEP(5);
+ //Log::getInstance()->log("Audio", Log::DEBUG, "DMP mark22");
if (!omx_running) return *samplepos;
+ //Log::getInstance()->log("Audio", Log::DEBUG, "DMP mark 23");
continue;
}
cur_input_buf_omx = input_bufs_omx_free.front();
}
}
+ //Log::getInstance()->log("Audio", Log::DEBUG, "DMP mark 24");
decompress_buffer_filled=0;
if (haveToCopy ) {
Log::getInstance()->log("Audio", Log::DEBUG,"We can not decompress %d save for later %d %x %x",haveToCopy,packet.type,incoming_paket_libav.data,packet.pos_buffer);
}
-
+ //Log::getInstance()->log("Audio", Log::DEBUG, "DMP mark 25");
*samplepos=packet.length;
return packet.length;
}
/* TODO end */
-
clock_mutex.Lock();
if (h264) {
error=OMX_GetHandle(&omx_vid_dec,VPE_OMX_H264_DECODER,NULL,&callbacks);
return 0;
long long ncur_clock_time = cur_clock_time;
if (omx_running) {
+ int oldcancelstate;
+ int oldcanceltype;
+ pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &oldcancelstate);
+ pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, &oldcanceltype);
clock_mutex.Lock();
OMX_ERRORTYPE error;
OMX_TIME_CONFIG_CLOCKSTATETYPE clock_conf;
}
}
clock_mutex.Unlock();
+ pthread_setcancelstate(oldcancelstate, NULL);
+ pthread_setcanceltype(oldcanceltype, NULL);
}
//ncur_clock_time -= startoffset;
void VideoOMX::DeinterlaceFix()
{
-
+ int oldcancelstate;
+ int oldcanceltype;
Demuxer* demux=Demuxer::getInstance();
+ pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &oldcancelstate);
+ pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, &oldcanceltype);
clock_mutex.Lock();
OMX_ERRORTYPE error;
OMX_PARAM_PORTDEFINITIONTYPE port_def_type;
Log::getInstance()->log("Video", Log::DEBUG,
"Set OMX_IndexParamPortDefinition1 failed %x", error);
clock_mutex.Unlock();
+ pthread_setcancelstate(oldcancelstate, NULL);
+ pthread_setcanceltype(oldcanceltype, NULL);
return;
}
Log::getInstance()->log("Video", Log::DEBUG,
"Set OMX_IndexParamPortDefinition2 failed %x", error);
clock_mutex.Unlock();
+ pthread_setcancelstate(oldcancelstate, NULL);
+ pthread_setcanceltype(oldcanceltype, NULL);
return;
}
EnablePort(omx_vid_sched,omx_shed_input_port,false);
}
clock_mutex.Unlock();
+ pthread_setcancelstate(oldcancelstate, NULL);
+ pthread_setcanceltype(oldcanceltype, NULL);
+
}
/* long long temp =buffer->nTimeStamp.nLowPart
| ((long long) buffer->nTimeStamp.nHighPart << 32);*/
- pthread_testcancel();
+ //pthread_testcancel();
pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &oldcancelstate);
pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, &oldcanceltype);
clock_mutex.Lock();
clock_mutex.Unlock();
pthread_setcancelstate(oldcancelstate, NULL);
pthread_setcanceltype(oldcanceltype, NULL);
- pthread_testcancel();
+ //pthread_testcancel();
return ret_val;
}
if (!omx_running) return 0; // if we are not runnig do not do this
if (paused) return 0; //Block if we pause
+// Log::getInstance()->log("Video", Log::DEBUG, "DMP mark 1");
//Log::getInstance()->log("Video", Log::DEBUG, "DeliverMediaPacketOMX time %lld",packet.presentation_time);
-/* if (packet.synched && packet.presentation_time <= 0) {
- *samplepos = packet.length;
- firstsynched = false;
- Log::getInstance()->log("Video", Log::DEBUG,
- "DeliverMediaPacketOMX Frameskip");
- return packet.length;
- }*/
- /*if (packet.synched && FrameSkip(packet.presentation_time)) {
- *samplepos=packet.length;
- Log::getInstance()->log("Video", Log::DEBUG, "DeliverMediaPacketOMX Frameskip");
- *samplepos=packet.length;
- return packet.length;
- }*/
- //long long current_media_time=GetCurrentSystemTime()+playbacktimeoffset;
-/* if (packet.synched &&
- (packet.presentation_time<0 /*|| // preroll skip frames
- (packet.presentation_time+5000000LL)<(current_media_time)*)) { // we are late skip
- Log::getInstance()->log("Video", Log::DEBUG, "DeliverMediaPacketOMX Preroll or too late %lld %lld; %lld", packet.presentation_time,current_media_time,playbacktimeoffset);
- *samplepos=packet.length;
- return packet.length;
- }*/
OMX_ERRORTYPE error;
cur_input_buf_omx=NULL;
}
}
-
+ //Log::getInstance()->log("Video", Log::DEBUG, "DMP mark 2");
/*Inspect PES-Header */
// OMX_STATETYPE temp_state;
*samplepos+=headerstrip;
if ( packet.synched ) {
if (!firstsynched) {
+ //Log::getInstance()->log("Video", Log::DEBUG, "DMP mark 2a");
// check if this is an I frame, the decoder does not like non I frames at startup!
if (!detectIFrame(buffer,packet.length)) {
*samplepos=packet.length;//if we have not processed at least one
+ //Log::getInstance()->log("Video", Log::DEBUG, "DMP mark 3");
return packet.length;//synched packet ignore it!
}
}
if (cur_input_buf_omx) {
+ //Log::getInstance()->log("Video", Log::DEBUG, "DMP mark 4a");
cur_input_buf_omx->nFlags|=OMX_BUFFERFLAG_ENDOFFRAME;
PutBufferToPres(cur_input_buf_omx);
cur_input_buf_omx=NULL;//write out old data
+ //Log::getInstance()->log("Video", Log::DEBUG, "DMP mark 4b");
}
firstsynched=true;
} else {
if (!firstsynched) {//
*samplepos=packet.length;//if we have not processed at least one
+ //Log::getInstance()->log("Video", Log::DEBUG, "DMP mark 5");
return packet.length;//synched packet ignore it!
}
}
}
-
+ //Log::getInstance()->log("Video", Log::DEBUG, "DMP mark 6");
if (!cur_input_buf_omx) {
input_bufs_omx_mutex.Lock();
if (input_bufs_omx_free.size()==0) {
input_bufs_omx_mutex.Unlock();
//Log::getInstance()->log("Video", Log::DEBUG, "Deliver MediaPacket no free sample");
+ //Log::getInstance()->log("Video", Log::DEBUG, "DMP mark 7");
return 0; // we do not have a free media sample
}
}
unsigned int haveToCopy=packet.length-*samplepos;
+ //Log::getInstance()->log("Video", Log::DEBUG, "DMP mark 8");
while (haveToCopy> (cur_input_buf_omx->nAllocLen-cur_input_buf_omx->nFilledLen)) {
//Log::getInstance()->log("Video", Log::DEBUG, "Big buffer %d %d %d",packet.length,cur_input_buf_omx->nAllocLen,cur_input_buf_omx->nFilledLen);
cur_input_buf_omx->nFilledLen+=cancopy;
*samplepos+=cancopy;
// push old buffer out
+ //Log::getInstance()->log("Video", Log::DEBUG, "DMP mark 9");
PutBufferToPres(cur_input_buf_omx);
cur_input_buf_omx=NULL;
cur_input_buf_omx->nTimeStamp=intToOMXTicks(0);
input_bufs_omx_free.pop_front();
input_bufs_omx_mutex.Unlock();
+ //Log::getInstance()->log("Video", Log::DEBUG, "DMP mark 10");
}
memcpy(cur_input_buf_omx->pBuffer+cur_input_buf_omx->nFilledLen,
buffer+packet.pos_buffer+*samplepos,haveToCopy);
cur_input_buf_omx->nFilledLen+=haveToCopy;
-
+// Log::getInstance()->log("Video", Log::DEBUG, "DMP mark 11");
*samplepos+=haveToCopy;