Hi,
I am using IPNC RDK 3.8 on DM8127. I modified the ENC_A8_DEC usecase to save H264 stream to local file. Related source code is as the following.
Void *MultiCh_ipcBitsMain(Void *prm) { UInt32 i; OSA_DmaCopy1D copy1D; Bitstream_BufList fullBitsBufList; Bitstream_BufList emptyBitsBufList; IpcBitsOutLinkHLOS_BitstreamBufReqInfo ipcReqInfo; OSA_printf("Entered IPC Bits Handler function\n"); gIpcBitsThObj.exitTh = FALSE; gIpcBitsThObj.exitDone = FALSE; //unsigned char const start_code[4] = { 0x00, 0x00, 0x00, 0x01 }; FILE *outFile = NULL; FILE *outFile2 = NULL; UInt8 *buf = NULL; UInt32 n = 0; if(outFile == NULL) { outFile = fopen("8127Test.h264", "w"); if (outFile == NULL) { OSA_printf("Failed to open file for writing\n"); exit(0); } } if(outFile2 == NULL) { outFile2 = fopen("8127Test.hdr", "w"); if (outFile2 == NULL) { OSA_printf("Failed to open file for writing\n"); exit(0); } } while(gIpcBitsThObj.exitTh == FALSE) { OSA_semWait(&gIpcBitsNotifySem,OSA_TIMEOUT_FOREVER); IpcBitsInLink_getFullVideoBitStreamBufs(gIpcBitsInHLOSId,&fullBitsBufList); if(fullBitsBufList.numBufs > 0) { for(i = 0;i < fullBitsBufList.numBufs;i++) { ipcReqInfo.numBufs = 1; ipcReqInfo.minBufSize[0] = DEC_MIN_BUF_SIZE; /* Wait till empty buffer is got from IPC Bits Out link */ do { IpcBitsOutLink_getEmptyVideoBitStreamBufs(gIpcBitsOutHLOSId,&emptyBitsBufList,&ipcReqInfo); OSA_waitMsecs(10); }while(emptyBitsBufList.numBufs == 0); /* Copy bitstream */ emptyBitsBufList.numBufs = 1; emptyBitsBufList.bufs[0]->channelNum = fullBitsBufList.bufs[i]->channelNum; emptyBitsBufList.bufs[0]->fillLength = fullBitsBufList.bufs[i]->fillLength; emptyBitsBufList.bufs[0]->timeStamp = fullBitsBufList.bufs[i]->timeStamp; if(gDmaHndl.chId == 0xFF) { memcpy(emptyBitsBufList.bufs[0]->addr, (fullBitsBufList.bufs[i]->addr + fullBitsBufList.bufs[i]->startOffset), fullBitsBufList.bufs[i]->fillLength); } else { copy1D.srcPhysAddr = (unsigned long)CMEM_getPhys(fullBitsBufList.bufs[i]->addr + fullBitsBufList.bufs[i]->startOffset); copy1D.dstPhysAddr = (unsigned long)CMEM_getPhys(emptyBitsBufList.bufs[0]->addr); copy1D.size = fullBitsBufList.bufs[i]->fillLength; OSA_dmaCopy1D(&gDmaHndl,©1D,1); } #if 1 buf = fullBitsBufList.bufs[i]->addr + fullBitsBufList.bufs[i]->startOffset; if (fwrite(buf, fullBitsBufList.bufs[i]->fillLength, 1, outFile) != 1) { OSA_printf("Failed to write data to file\n"); exit(0); } #endif fprintf(outFile2, "%d, ", fullBitsBufList.bufs[i]->fillLength); n++; if(n % 100 == 0) OSA_printf("received %d frames.\n", n); if(n == 3000) { fclose(outFile); fclose(outFile2); exit(0); } IpcBitsOutLink_putFullVideoBitStreamBufs(gIpcBitsOutHLOSId,&emptyBitsBufList); } } IpcBitsInLink_putEmptyVideoBitStreamBufs(gIpcBitsInHLOSId,&fullBitsBufList); } gIpcBitsThObj.exitDone = TRUE; OSA_printf("Exiting IPC Bits Handler function\n"); return NULL; }
When I run the program, about 2500 frames are saved successfully. Then this thread seems to be locked and no more output is seen. The log is like this:
Starting syslogd/klogd: done
_____ _____ _ _
| _ |___ ___ ___ ___ | _ |___ ___ |_|___ ___| |_
| | _| .'| . | . | | __| _| . | | | -_| _| _|
|__|__|_| |__,|_ |___| |__| |_| |___|_| |___|___|_|
|___| |___|
Arago Project http://arago-project.org DM8127_IPNC ttyO0
Arago 2011.09 DM8127_IPNC ttyO0
DM8127_IPNC login: root (automatic login)
root@DM8127_IPNC:~# mkdosfs 3.0.12 (29 Oct 2011)
unable to get drive geometry, using default 255/63
/dev/sbulla has 255 heads and 63 sectors per track,
logical sector size is 512,
using 0xf8 media descriptor, with 1024 sectors;
file system has 2 12-bit FATs and 4 sectors per cluster.
FAT size is 1 sector, and provides 247 clusters.
There is 1 reserved sector.
Root directory contains 512 slots and uses 32 sectors.
Volume ID is 63107077, no volume label.
g_file_storage gadget: No serial-number string provided!
g_file_storage gadget: File-backed Storage Gadget, version: 1 September 2010
g_file_storage gadget: Number of LUNs=1
g_file_storage gadget-lun0: ro=0, nofua=0, file: /dev/sbulla
[m3vpss ] CT: 5592, 3dlut index:2
Simple mixer control 'PGA',0
Capabilities: cvolume cswitch penum
Capture channels: Front Left - Front Right
Limits: Capture 0 - 119
Front Left: Capture 80 [67%] [40.00dB] [on]
Front Right: Capture 80 [67%] [40.00dB] [on]
queue id:0
[m3vpss ] CT: 6091, 3dlut index:3
[host] received 100 frames.
./boa: /usr/lib/libssl.so.1.0.0: no version information available (required by ./boa)
./boa: /usr/lib/libcrypto.so.1.0.0: no version information available (required by ./boa)
ApproDrvInit: 3
queue id:163845
queue id:0
queue id:32769
queue id:0
[host] received 200 frames.
[host] received 300 frames.
[host] received 400 frames.
[host] received 500 frames.
[host] received 600 frames.
TimeOut occure in boot_proc.
Program exit.
[host] received 700 frames.
TimeOut occure in boot_proc.
Program exit.
[host] received 800 frames.
[host]
Usecase is Active !!!
[host] received 900 frames.
[host] received 1000 frames.
[host] received 1100 frames.
[host] received 1200 frames.
[host] received 1300 frames.
[host] received 1400 frames.
[host] received 1500 frames.
[host] received 1600 frames.
[host] received 1700 frames.
[m3vpss ] 66182: CAMERA: Fields = 1801 (fps = 30), Total Resets = 0 (Avg 0 ms per reset)
[m3video] ==================== EncLink_PrintDetails ====================
[m3video] 67020: HDVICP-ID:0
[m3video] totalAcquire2wait in msec: 1125
[m3video] totalWait2Isr in msec: 45929
[m3video] totalIsr2Done in msec: 65
[m3video] totalWait2Done in msec: 45994
[m3video] totalDone2Release in msec: 0
[m3video] totalAcquire2Release in msec: 47715
[m3video] totalAcq2acqDelay in msec: 13053
[m3video] totalElapsedTime in msec: 60767
[m3video] numAccessCnt: 3567
[m3video] IVA-FPS : 59
[m3video]
[m3video] *** ENCODE Statistics ***
[m3video]
[m3video] Elasped Time : 60 secs
[m3video]
[m3video]
[m3video] CH | In Recv In Skip In User Out Latency
[m3video] Num | FPS FPS Skip FPS FPS Min / Max
[m3video] --------------------------------------------
[m3video] 0 | 30 0 0 29.67 14 / 56
[m3video]
[m3video] Multi Channel Encode Average Submit Batch Size
[m3video] Max Submit Batch Size : 24
[m3video] IVAHD_0 Average Batch Size : 1
[m3video] IVAHD_0 Max achieved Batch Size : 1
[m3video] ==============================================================
[host]
Usecase is Active !!!
[host] received 1800 frames.
[host] received 1900 frames.
ApproDrvExit: 7
Error: WaitStreamReady Fail.
Error: SemWait: Invalid Semaphore handler
Error: SemRelease: Invalid Semaphore handler
Error: SemWait: Invalid Semaphore handler
[host]
Force IDR on Channel: 0
[host]
Force IDR on Channel: 1Error: SemRelease: Invalid Semaphore handler
SystemInit success
Schedule manager init success
Dmva Schedule manager init success
umount: can't umount /mnt/mmc: Invalid argument
killall: dhcpcd: no process killed
rm: cannot remove '/var/run/dhcpcd-eth0.pid': No such file or directory
[host] received 2000 frames.
[host] received 2100 frames.
[host] received 2200 frames.
[host] received 2300 frames.
[host] received 2400 frames.
[host] received 2500 frames.
[host]
Usecase is Active !!!
[m3vpss ] ==================== CameraLink_PrintDetails ====================
[m3vpss ] 126123: CAMERA: Fields = 3601 (fps = 30, CPU Load = 27)
[m3vpss ] 126123: CAMERA: Num Resets = 0 (Avg 0 ms per reset)
[m3vpss ] =================================================================
[m3vpss ] 126189: CAMERA: Fields = 1801 (fps = 30), Total Resets = 0 (Avg 0 ms per reset)
[host]
Usecase is Active !!!
[host]
Usecase is Active !!!
[m3video] ==================== EncLink_PrintDetails ====================
[m3video] 161645: HDVICP-ID:0
[m3video] totalAcquire2wait in msec: 1618
[m3video] totalWait2Isr in msec: 65598
[m3video] totalIsr2Done in msec: 80
[m3video] totalWait2Done in msec: 65678
[m3video] totalDone2Release in msec: 0
[m3video] totalAcquire2Release in msec: 68152
[m3video] totalAcq2acqDelay in msec: 18103
[m3video] totalElapsedTime in msec: 86242
[m3video] numAccessCnt: 5095
[m3video] IVA-FPS : 59
[m3video]
[m3video] *** ENCODE Statistics ***
[m3video]
[m3video] Elasped Time : 94 secs
[m3video]
[m3video]
[m3video] CH | In Recv In Skip In User Out Latency
[m3video] Num | FPS FPS Skip FPS FPS Min / Max
[m3video] --------------------------------------------
[m3video] 0 | 30 22 0 8.14 14 / 29
[m3video]
[m3video] Multi Channel Encode Average Submit Batch Size
[m3video] Max Submit Batch Size : 24
[m3video] IVAHD_0 Average Batch Size : 1
[m3video] IVAHD_0 Max achieved Batch Size : 1
[m3video] ==============================================================
net_search_gateway:eth0, 1A8C0, 0, 1
dns=192.168.1.1
net_search_gateway:eth0, 1A8C0, 0, 1
net_search_gateway:eth0, 0, FE01A8C0, 3
dns=192.168.1.1
g_file_storage gadget: No serial-number string provided!
g_file_storage gadget: File-backed Storage Gadget, version: 1 September 2010
g_file_storage gadget: Number of LUNs=1
g_file_storage gadget-lun0: ro=0, nofua=0, file: /dev/sbulla
[09/Nov/2012:12:25:24 +0000] boa: server version Boa/0.94.13
[09/Nov/2012:12:25:24 +0000] boa: server built Aug 19 2014 at 09:27:37.
[09/Nov/2012:12:25:24 +0000] boa: starting server pid=549, port 80
queue id:0
<UDN>uuid:Upnp-TVEmulator-1_0-00_0095591997</UDN>
In other words, I can not save 3000 frames continuously. What is wrong?