jpg转nv12_jpeg改jpg

jpg转nv12_jpeg改jpg代码主要用到了libyuv库和libjpeg库。编译:g++demo.cpp-lyuv-ljpeg-odemoubuntu下测试(需安装ffmpeg,width以及height按实际情况填写):ffplay-itest.yuv-pixel_formatnv12-swidthxheightdemo:#include<stdio.h>#include<stdlib.h>#include<libyuv.h>#..

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

代码主要用到了libyuv库和libjpeg库。

编译:

g++ demo.cpp -lyuv -ljpeg -o demo

ubuntu下测试(需安装ffmpeg,width以及height按实际情况填写): 

ffplay -i test.yuv -pixel_format nv12 -video_size widthxheight

demo: 

#include <stdio.h>
#include <stdlib.h>
#include <libyuv.h>

#define align_buffer_page_end(var, size)                                    \
    uint8_t* var##_mem =                                                    \
        reinterpret_cast<uint8_t*>(malloc(((size) + 4095 + 63) & ~4095));   \
    uint8_t* var = reinterpret_cast<uint8_t*>(                              \
        (intptr_t)(var##_mem + (((size) + 4095 + 63) & ~4095) - (size)) & ~63)

#define free_aligned_buffer_page_end(var)   \
    free(var##_mem);                        \
    var = 0

using namespace libyuv;

int main(int argc, char *argv[])
{
    int32_t width = 0, height = 0;

    FILE *dst;
    FILE *ori = fopen("test.jpg", "rb+");
    fseek(ori, 0, SEEK_END);
    uint32_t data_size = ftell(ori);
    fseek(ori, 0, SEEK_SET);
    uint8_t *data = (uint8_t *)calloc(1, data_size);
    fread(data, data_size, 1, ori);
    fclose(ori);

    int32_t ret = MJPGSize(data, data_size, &width, &height);
    int32_t half_width = (width + 1) / 2;
    int32_t half_height = (height + 1) / 2;

    align_buffer_page_end(dst_y, width * height);
    align_buffer_page_end(dst_uv, half_width * half_height * 2);

    ret = MJPGToNV12(data, data_size, dst_y, width, dst_uv, half_width * 2, width, height, width, height);
    if (0 == ret) {
        printf("change to nv12 success\n");
    } else {
        printf("change to nv12 failed\n");
        goto errChange;
    }

    dst = fopen("test.yuv", "wb+");
    fwrite(dst_y, width * height, 1, dst);
    fwrite(dst_uv, half_width * half_height * 2, 1, dst);
    fclose(dst);

errChange:
    free(data);
    free_aligned_buffer_page_end(dst_y);
    free_aligned_buffer_page_end(dst_uv);

    return 0;
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/192969.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ubuntu java 卸载_ubuntu 怎么卸载java「建议收藏」

    ubuntu java 卸载_ubuntu 怎么卸载java「建议收藏」很简单。许多人比较厌恶Java,但是很有可能因为某些原因你需要安装Java,尽管你很讨厌它。在这篇文章中,我们将展示如何在Ubuntu14.04安装Java(也可能在LinuxMint17同样适用)。JREvsOpenJDKvsOracleJDK在我们继续了解如何安装Java之前,让我们快速地了解JRE、OpenJDK和OracleJDK之间的不同之处。JRE(JavaRunt…

    2022年5月12日
    51
  • BitBlt_bitcmp

    BitBlt_bitcmp/*—————————————–HELLOBIT.C–BitmapDemonstration(c)CharlesPetzold,1998—————————————–*/#include#include”resourc

    2022年10月18日
    2
  • 笑说程序员的工作_程序员工作辛苦吗

    笑说程序员的工作_程序员工作辛苦吗笑说程序员的工作

    2022年4月22日
    37
  • navicat注册码最新_navicat激活工具

    navicat注册码最新_navicat激活工具navicat10.1.7版本,亲测可用。名:NAVN-LNXG-XHHX-5NOO组织:NAVN-LNXG-XHHX-5NOO注册码:NAVN-LNXG-XHHX-5NOO

    2022年10月13日
    1
  • addslashes和stripslashes函数

    addslashes和stripslashes函数addslashes()函数返回在预定义字符之前添加反斜杠的字符串。预定义字符是:单引号(’)双引号(”)反斜杠(\)NULLecho”Who’sBillGates?<br>”;echoaddslashes(“Who’sBillGates?”)结果:Who’sBillGates?Who\’sBill…

    2022年10月21日
    2
  • pip的安装与卸载「建议收藏」

    前言我个人的理解是,pip是一种工具,可以帮助用户安装卸载一些需要的安装包,非常的简单实用,类似于yum下面介绍的是使用系统自带的python来安装pip。安装方法一sudoaptinstallpython-pip方法二wgethttps://bootstrap.pypa.io/get-pip.py#科学上网pythonget-pip.pypyth…

    2022年4月5日
    58

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号