這幾天在工作中遇到乙個問題:
在這個接收和傳入編碼的過程中不能進行大資料量的拷貝工作,(原因我們都知道,拷貝這麼多的數量在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...