原创 SSE特殊指令集系列之一----各種數據重排指令
實際上,搞彙編優化的很多時間是在處理如何有效的組織數據,以適應並行計算指令的數據結構。 本小結描述的是數據混洗指令,這類指令使用起來相當的靈活。具體如下: 1. shufps XMM,XMM/m128,imm8(0~255)
原创 SSE特殊指令集系列之二----字節絕對差值求和指令
本文要談的是這樣一條指令: PSADBW 這條指令是SSE1引入的用於視頻編碼絕對差值求和的指令。 在視頻編碼中的運動估計模塊,一種常見的SAD代碼如下: 1 // Get the SAD 16x16 macro block with
原创 MMX指令集系列之三----數據飽和壓縮與重排指令
6. 數據壓縮指令 packuswb MM,MM/m64 把目的寄存器按字有符號數壓縮爲飽和字節無符號數放入目的寄存器低32位, 把源寄存器字有符號數壓縮爲飽和字節無符號數放入目的寄存器高32位。 簡單的說,就是
原创 談談偏微分方程在圖像特效中的應用
在很早之前,iOS上有這樣一款軟件叫Pimple Eraser,它實現的功能非常簡單,就是把人臉中的痘痘給去掉,而且效果很不錯。當然你得手動的選擇痘痘的位置和大小。不過可惜的是,這款軟件的交互做的不是很好。大約一年之後,美圖
原创 SSE4.1指令集系列之一----多字節絕對差值求和指令、水平最小值,整數格式擴展指令
本文要介紹的是SSE4.1指令集中的幾條整數指令及其在視頻編碼中的應用。 1. 單指令32字節差分絕對值求和指令 MPSADBW 這條指令類似於SSE的PSADBW,但它實現的功能更強大。包括微軟官方網站上對這條指令的說明都不
原创 SSE指令集系列之二----浮點與整數轉換指令
4. 數據重排指令集 unpckhps XMM,XMM/m128 源存儲器與目的寄存器高64位按雙字交錯排列,結果送入目的寄存器,內存變量必須對齊內存16字節. 高64位 | 低64位 目的寄存器:
原创 曲率濾波的簡單實現只有源碼
FIV_RET fiv_image_curved_filter(fiv_mat* dst_image, fiv_mat* src_image) { FIV_RET ret = FIV_RET_OK; if (dst_image ==
原创 SSE指令集系列之三----整數運算指令
6. SSE整數運算指令 pavgb MM,MM/m64 pavgb XMM,XMM/m128 把源存儲器與目的寄存器按字節無符號整數相加,再除以2,結果四捨五入爲整數放入目的寄存器。 源存儲器爲m128時,內
原创 移植FFMPEG到VS2008系列之三
5. 排除編譯錯誤。 這部分主要是修改C99的語法,常見的不兼容語法如下: 5.1 例如在文件av_codec_4xm.c最後的結構體初始化代碼如下: AVCodec ff_fourxm_decoder = { .n
原创 HDR陰影高光圖像增強
1. 技術背景 HDR圖像處理的技術本質上是對陰影,高光的細節增強。即圖像太暗或者太亮的部分,其細節丟失的比較明顯,HDR圖像處理就是對暗部和高亮部分的細節進行恢復的過程。 HDR的處理思路是這樣的。首先
原创 傅里葉變換的物理意義
假設信號的採樣頻率是Fs,信號的頻率是F,採樣點數爲N,則與傅里葉變換相關概念幾個計算公式如下: 1. 頻率計算公式
原创 SSE3指令集系列----數據加載與算術運算指令
1. 數據加載存儲指令 LDDQU xmm, m128 從非對齊的內存地址中加載128位數到XMM寄存器,此條指令比SSE2的非對齊加載指令 MOVDQU 要快。 MOVDDUP xmm, xmm/m64
原创 SSE2指令集系列之一----浮點運算指令
SSE2與SSE1使用相同寄存器,指令描述約定: MM指64位MMX寄存器 XMM指128XMM寄存器 m32 指32位內存變量 m128指128位內存變量 本小結主要描述雙精度浮點運算指令 1. 數據搬移指
原创 SSE2指令集系列之二----整數運算相關指令
本小節描述的是SSE2整數運算指令。 5. 數據搬移指令 movdqa XMM,XMM/m128 movdqa XMM/m128,XMM 把源存儲器內容值送入目的寄存器,當有m128時,內存地址必須16字節對齊.
原创 SSE指令集系列之一----數據加載與浮點運算指令
SSE有8個128位獨立寄存器(XMM1~XMM7),指令描述約定: MM指64位MMX寄存器 XMM指128XMM寄存器 m32 指32位內存變量 m128指128位內存變量 1. 數據傳送指