流媒体 码率 Android 835,流媒体比特率与实际传输速率不同

FPGA获取数据,并将它们放入TXT文件中。

我正在测试从FIFO接口(32位)。

虽然流光显示的比特率为180Mb/s,实际传输速率约为8Mb/s。

这是显示比特率的流线型的C代码。

公共不安全空隙XFEDATA(字节[]CBUFS,字节[]]XBUFS,字节[][OLAPS,ISO-PKtiOFIMP[]]PKTSHINFO)

{

INT K=0;

In LeN=0;

成功率=0;

故障=0;

xFixBy数=0;

T1= DATETIME.现在;

为(布伦宁;)

{

/ WaitForXfer

固定(字节*tMPOVLAP=OLAPS[k])

{

重叠* OVLAP状态=(重叠*)TMPOVLAP;

如果(!)端点WaitForXfer(OVLAP STATION & GT;HEVER,500)

{

端点。

PInvoke . WaitForSingleObject(OVLAP Stand & GT;HEVER,500);

}

}

If(EndoPositAt==1)

{

CysCon点ISOCO=端点为CysCo终点;

/ FinishDataXfer

如果(ISOC.FinishDataXfer(REF CBUFS [K],REF XBUFS [K],REF LeN,REF OLAPS[K],REF PKTSHIFO[K]))

{

ISO-PKTIONF[]PKPS= PKTSHIFO[K];

对于(int j=0;j& lt;ppx;j++)

{

如果(PKTs[j],状态=0)

{

XFelByth++PKTs[j]长度;

成功+++;

}

其他的

故障+ +;

PKTs [J]。长度=0;

}

}

其他的

故障+ +;

}

其他的

{

/ FinishDataXfer

If(端点FinishDataXfer(REF CBUFS [K],REF XBUFS [K],REF LeN,REF OLAPS[K]))

{

XFelByth++LeN;

成功+++;

}

其他的

故障+ +;

}

K++;

如果(k==QueLeSZ)//每次只通过队列更新显示统计数据一次

{

K=0;

T2= DATETIME.现在;

经过时间= T2-T1;

xFrRe= =(long)(xFixByth/EaspPo.TimeMyLimeNDS);

xFrRe= xFrRAT/(int)100 *(int)100;

//在主线程中调用StaseUpDeDeO()

这是调用(UpDATEUI);

//对于小队列或PPX,循环太紧,UI线程无法得到服务。

//没有这个,应用程序挂在这些场景中。

线程:睡眠(1);

}

//将此缓冲区重新提交到队列中

Lee=BufSz;

端点BeginDataXfer(REF CBUFS [K],REF XBUFS [K],REF LEN,REF OLAPS [K]);

} / /端无限环

}

这是我用来写文件的代码:

公共不安全空隙写入文件()

{

int字节=16384;

字节[]缓冲器=新字节[字节];

BOL BXFEXCENTALL = FALSE;

BoL ISPKT=FALSE;

CyBulkEndotBuRFrd=端点为CyBurkEndoPoT;

如果(炮制)!=空)

BxFrExt==Bulrest.XFEDATA(REF缓冲区,REF字节,IsPkt);

尝试

{

虽然(真)

写入数据(缓冲器,字节,BXFEALTER);

}

catch(null参考异常)

{

E.GETBaseExabVIEW();

调用。

}

}

问题是什么?

谢谢您!

以上来自于百度翻译

以下为原文

Hi!

I've build an application in C# wich takes data from a Spartan6 FPGA and put them into a txt file.

I am testing the slave fifo interface (32 bit).

While the Streamer shows a bitrate of 180MB/s, the actual transfer rate is around 8MB/s.

This is the C# code of Streamer that show the bitrate:

public unsafe void XferData(byte[][] cBufs, byte[][] xBufs, byte[][] oLaps, ISO_PKT_INFO[][] pktsInfo)

{

int k = 0;

int len = 0;

Successes = 0;

Failures = 0;

XferBytes = 0;

t1 = DateTime.Now;

for (; bRunning; )

{

// WaitForXfer

fixed (byte* tmpOvlap = oLaps[k])

{

OVERLAPPED* ovLapStatus = (OVERLAPPED*)tmpOvlap;

if (!EndPoint.WaitForXfer(ovLapStatus->hEvent, 500))

{

EndPoint.Abort();

PInvoke.WaitForSingleObject(ovLapStatus->hEvent, 500);

}

}

if (EndPoint.Attributes == 1)

{

CyIsocEndPoint isoc = EndPoint as CyIsocEndPoint;

// FinishDataXfer

if (isoc.FinishDataXfer(ref cBufs[k], ref xBufs[k], ref len, ref oLaps[k], ref pktsInfo[k]))

{

ISO_PKT_INFO[] pkts = pktsInfo[k];

for (int j = 0; j < PPX; j++)

{

if (pkts[j].Status == 0)

{

XferBytes += pkts[j].Length;

Successes++;

}

else

Failures++;

pkts[j].Length = 0;

}

}

else

Failures++;

}

else

{

// FinishDataXfer

if (EndPoint.FinishDataXfer(ref cBufs[k], ref xBufs[k], ref len, ref oLaps[k]))

{

XferBytes += len;

Successes++;

}

else

Failures++;

}

k++;

if (k == QueueSz)  // Only update displayed stats once each time through the queue

{

k = 0;

t2 = DateTime.Now;

elapsed = t2 - t1;

xferRate = (long)(XferBytes / elapsed.TotalMilliseconds);

xferRate = xferRate / (int)100 * (int)100;

// Call StatusUpdate() in the main thread

this.Invoke(updateUI);

// For small QueueSz or PPX, the loop is too tight for UI thread to ever get service.

// Without this, app hangs in those scenarios.

Thread.Sleep(1);

}

// Re-submit this buffer into the queue

len = BufSz;

EndPoint.BeginDataXfer(ref cBufs[k], ref xBufs[k], ref len, ref oLaps[k]);

} // End infinite loop

}

And this is the code that I use to write into file:

public unsafe void WriteToFileThread()

{

int bytes = 16384;

byte[] buffer = new byte[bytes];

bool bXferCompleted = false;

bool IsPkt = false;

CyBulkEndPoint bulkEpt = EndPoint as CyBulkEndPoint;

if (bulkEpt != null)

bXferCompleted = bulkEpt.XferData(ref buffer, ref bytes, IsPkt);

try

{

while(true)

WriteXferData(buffer, bytes, bXferCompleted);

}

catch (NullReferenceException e)

{

e.GetBaseException();

this.Invoke(handleException);

}

}

What is the problem?

Thank you!

699ba7046c51816a17b33a7caa85f179.png

0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值