iOS libyuv

来源:https://www.cnblogs.com/wangyaoguo/archive/2018/01/09/8252112.html
-Advertisement-
Play Games

libyuv是Google開源庫,可用作圖像數據格式的轉換,比如視頻流編解碼時格式的轉換,YUV數據轉化RGB等 libyuv靜態庫 為了方便使用,已經將libyuv源代碼打包成了iOS靜態庫, "libyuv靜態庫" libyuv使用 下麵以nv12(yuv420sp)轉化為I420(yuv420 ...


libyuv是Google開源庫,可用作圖像數據格式的轉換,比如視頻流編解碼時格式的轉換,YUV數據轉化RGB等

libyuv靜態庫

為了方便使用,已經將libyuv源代碼打包成了iOS靜態庫,libyuv靜態庫

libyuv使用

下麵以nv12(yuv420sp)轉化為I420(yuv420p)為例:

void nv12_to_yuv420p(unsigned char* nv12, unsigned char* yuv420p, int width, int height) {
    
    int y_size = width * height;
    int u_size = y_size / 4;
    int v_size = u_size;
    int uv_size = u_size + v_size;

    unsigned char *src_y = malloc(y_size);
    unsigned char *src_uv = malloc(uv_size);
    memcpy(src_y, nv12, y_size);
    memcpy(src_uv, nv12 + y_size, uv_size);
    
    unsigned char *dst_y = malloc(y_size);
    unsigned char *dst_u = malloc(u_size);
    unsigned char *dst_v = malloc(v_size);
    
    int src_stride_y = width;
    int src_stride_uv = width;
    int dst_stride_y = width;
    int dst_stride_u = width >> 1;
    int dst_stride_v = dst_stride_u;
    
    NV12ToI420(src_y, src_stride_y, src_uv, src_stride_uv, dst_y, dst_stride_y, dst_u, dst_stride_u, dst_v, dst_stride_v, width, height);
    memcpy(yuv420p, dst_y, y_size);
    memcpy(yuv420p + y_size, dst_u, u_size);
    memcpy(yuv420p + y_size + u_size, dst_v, v_size);
    
    free(src_y);
    free(src_uv);
    free(dst_y);
    free(dst_u);
    free(dst_v);
}

nv12轉化yuv420p實現方法有多種,比如利用libyuv,ffmpeg,除了利用第三方庫實現轉化,也可以自己實現,代碼如下:

void yuv420sp_to_yuv420p(unsigned char* yuv420sp, unsigned char* yuv420p, int width, int height)
{
    int i, j;
    int y_size = width * height;
    
    unsigned char* y = yuv420sp;
    unsigned char* uv = yuv420sp + y_size;
    
    unsigned char* y_tmp = yuv420p;
    unsigned char* u_tmp = yuv420p + y_size;
    unsigned char* v_tmp = yuv420p + y_size * 5 / 4;
    
    memcpy(y_tmp, y, y_size);
    
    for (j = 0, i = 0; j < y_size/2; j+=2, i++)
    {
        u_tmp[i] = uv[j];
        v_tmp[i] = uv[j+1];
    }
}

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 問題:mysql不管是用免安裝版的,還是用直接安裝的,還是用phpStudy直接發佈的mysql服務。都只能用localhost登錄,不能用伺服器的ip進行遠程訪問 遇到這個問題。按照網上大家介紹的方法去解決,但是一直不行。後來發現自己的阿裡雲伺服器安全組規則中沒有添加埠號為3306的項,加上之後 ...
  • Oracle基礎練習題,採用Oracle資料庫自帶的表,適合初學者,其中包括了一些簡單的查詢,已經具有Oracle自身特點的單行函數的應用 本文使用的實例表結構與表的數據如下: emp員工表結構如下: dept部門表: 提示:工資 = 薪金 + 佣金 emp表的現有數據如下: dept表的現有數據如 ...
  • ERROR 2006 (HY000): MySQL server has gone away ...
  • 和關係資料庫一樣,Neo4j同樣可以創建索引來加快查找速度。 在關係資料庫中創建索引需要索引欄位和指向記錄的指針,通過索引可以快速查找到表中的行。 在Neo4j中,其索引是通過屬性來創建,便於快速查找節點或者關係。 手動索引 先來說一下怎樣創建手動索引。 創建索引採用顯示創建,就像添加節點一樣添加索 ...
  • imei、imsi是大部分應用自動採集的設備信息,Android中需要在MINIFEST聲明許可權,6.0以上手機還需要用戶顯示授權才可以正常獲取。這兩個標識有什麼區別、聯繫?為什麼應用這麼執著於採集這兩個信息呢? imei IMEI(International Mobile Equipment Id ...
  • 看到很多小程式里,點客服,提示關註公眾號,比如製作器里這個功能,能夠自動引導關註公眾號,圖文體驗非常好,研究了小程式客服介面後,我們就自己把它做成一個工具了,方便小程式的運營人員。芝麻小客服 體驗傳送門 http://xiaokefu.hotapp.cn 特點: (1)不需要開發,只需要在微信的小程 ...
  • 首先,咱得先說下註意點: Android中主要通過RecognizerIntent來實現語音識別,其實代碼比較簡單,但是如果找不到設置,就會拋出異常 ActivityNotFoundException,所以我們需要捕捉這個異常。而且語音識別在模擬器上是無法測試的,因為語音識別是訪問google 雲端 ...
  • 首先看一下安裝apk文件的代碼 測試發現該段代碼在7.0一下的機型上可以成功打開指定路徑下的指定apk文件 , 但是在7.0+的機型上調用該代碼會報錯: 原因在於:Android 7.0 版本開始 禁止向你的應用外公開 file:// URI。 如果一項包含文件 file:// URI類型 的 In ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...