不需要進行大資料量的拷貝就可以進行資料傳輸

2021-05-25 15:21:23 字數 3278 閱讀 9104

這幾天在工作中遇到乙個問題:

在這個接收和傳入編碼的過程中不能進行大資料量的拷貝工作,(原因我們都知道,拷貝這麼多的數量在arm上會占用太多的資源),對此我寫了乙個佇列來完成該事情。

由於是yuv影象資料,每幀的大小都是定值,所分配的記憶體空間大小也都一致。我暫且將我的佇列大小定為25個,因為一秒的pal幀是25左右。另外我分配了多分配兩個記憶體(這兩個很重要):其中乙個作為第乙個從網路上接收的資料存放用,另乙個作為第乙個出佇列用。在這裡可能說的不夠清楚。-----意思很簡單,為了不進行大資料量的拷貝工作,我只進行記憶體位址的交換。

具體看**:

進佇列的操作:

ms_int32 enqueue_sq_yuv(yuv_frame *e)

lock(lockhandleyuv);

if ((q->rear + 1) % def_max_queues_size_yuv == q->front)

else

//q->base[q->rear] = e;

memcpy(&(q->base[q->rear]),&tmp,sizeof(yuv_frame));

q->rear = (q->rear + 1) % def_max_queues_size_yuv;

//lock_post(1);

unlock(lockhandleyuv);

return md_ok;

} 出佇列的操作:

ms_int32 dequeue_sq_yuv( yuv_frame *e)

lock(lockhandleyuv);

if (q->front == q->rear)

else

//*e = q->base[q->front];

memcpy(e,&(q->base[q->front]),sizeof(yuv_frame));

if(0)

else

q->front = (q->front + 1) % def_max_queues_size_yuv;

//lock_post(1);

unlock(lockhandleyuv);

return md_ok;

}經過上面的進隊和出隊便可以進行操作使用。下面是完整的**

#ifndef _yuv_queues_h_

#define _yuv_queues_h_

#include "c2htype.h"

#define def_max_queues_size_yuv  10

typedef struct stryuv_frameyuv_frame;

typedef struct sqqueue_yuv;

ms_int32 initqueue_sq_yuv( void ) ;//初始化佇列

ms_int32 enqueue_sq_yuv(yuv_frame* e) ;//??en,??de

ms_int32 dequeue_sq_yuv(yuv_frame *e) ;//??e

ms_int32 queuelength_sq_yuv( void ); //??

ms_int32 deletequeue_sq_yuv(void) ;//???

ms_int32 creatqueue_yuv(ms_int32 bufsize);

ms_int32 destroyqueue_yuv(ms_int32 bufsize);

#endif

#include "../include/yuv_queues.h"

static sqqueue_yuv *q = null;

static m_handle lockhandleyuv = null;

ms_int32 initqueue_sq_yuv(void)

printf("ok: create sqqueue_yuv is %08x ,create lock is %08x/n",(mu_int32)q,(mu_int32)lockhandleyuv);

return md_ok;

} ms_int32 enqueue_sq_yuv(yuv_frame *e)

lock(lockhandleyuv);

if ((q->rear + 1) % def_max_queues_size_yuv == q->front)

else

//q->base[q->rear] = e;

memcpy(&(q->base[q->rear]),&tmp,sizeof(yuv_frame));

q->rear = (q->rear + 1) % def_max_queues_size_yuv;

//lock_post(1);

unlock(lockhandleyuv);

return md_ok;

} ms_int32 dequeue_sq_yuv( yuv_frame *e)

lock(lockhandleyuv);

if (q->front == q->rear)

else

//*e = q->base[q->front];

memcpy(e,&(q->base[q->front]),sizeof(yuv_frame));

if(0)

else

q->front = (q->front + 1) % def_max_queues_size_yuv;

//lock_post(1);

unlock(lockhandleyuv);

return md_ok;

} ms_int32 queuelength_sq_yuv(void) //求對長

ms_int32 deletequeue_sq_yuv(void) //刪除

return md_ok;

}ms_int32 creatqueue_yuv(ms_int32 bufsize)

initqueue_sq_yuv();

for(i =0;i < def_max_queues_size_yuv;i++)

else

}else

enqueue_sq_yuv(&tframe);

return md_ok;

}ms_int32 destroyqueue_yuv(ms_int32 bufsize)

for(i =0;i < def_max_queues_size_yuv;i++)

}deletequeue_sq_yuv() ;

printf("ok: destroyqueue_yuv ok/n");

return md_ok;

}

輸入的資料需不需要儲存

題目描述 津津的零花錢一直都是自己管理。每個月的月初媽媽給津津300300300元錢,津津會預算這個月的花銷,並且總能做到實際花銷和預算的相同。為了讓津津學習如何儲蓄,媽媽提出,津津可以隨時把整百的錢存在她那裡,到了年末她會加上20 20 20 還給津津。因此津津制定了乙個儲蓄計畫 每個月的月初,在...

大資料量的處理

其實這個問題老是在面試的時候提到 1。建立專門的彙總表 這個表一般是每天晚上做統計處理 建立索引 索引的話,插入和修改會變慢,也是只做統計原因之一 用來查詢,如果量非常大,那麼分表,還是大,那麼分庫,就是資料倉儲概念了 2。關聯表查詢 多表聯合查詢 的大資料,首先就是1 把多個表做成乙個統計表,或者...

有python基礎學大資料還需不需要學java

python 既是一種物件導向的程式語言又因為其簡單 易學 開源 指令碼語言範兒的 人設 是一種既適合資料科學又適合大數技術從業者學習的語言。如果你想學一門語言,可以從語言的適用性 學習的難易程度 企業主的要求幾個方面考慮,從這幾個角度看,學習 python 都沒有什麼可挑剔的 從語言的適用性看,p...