FPGA----视频下采样------分辨率转换-----yuv444----yuv420

3 篇文章 0 订阅

本篇文章主要介绍了"FPGA----视频下采样------分辨率转换-----yuv444----yuv420 ",主要涉及到FPGA----视频下采样------分辨率转换-----yuv444----yuv420 方面的内容,对于FPGA----视频下采样------分辨率转换-----yuv444----yuv420 感兴趣的同学可以参考一下。


1、分辨率下采样:1080P到720P

  1080P即:1920*1080

  720P即:  1280*720

  a:列变换:1920--1280

    a.1:求最大公约数 为640

    a.2:1920/640=3; 1280/640=2

    a.3:裁剪比为2/3=1280/1920    即1920的视频每3列取2列,丢一列,做为1280的视频

  b:行变换:1080--720

    b.1:求最大公约数 为360

    b.2:1920/360=5; 1280/360=3

    b.3:裁剪比为3/5=720/1080 即1080的视频每5行取2行,丢一行,做为720的视频


2、YUV444--YUV422

   列    像素点1  像素点2  像素点3  像素点4

  YUV444    YUV     YUV    YUV      YUV

  YUV422    YU     YV      YU        YV


3、YUV422--YUV420

  

  YUV422第一行    YU     YV      YU        YV

  YUV422第二行    YU     YV      YU        YV

  YUV422第三行    YU     YV      YU        YV

  YUV422第四行    YU     YV      YU        YV

  YUV422第五行    YU     YV      YU        YV

  YUV422第六行    YU     YV      YU        YV


    变换:将偶数行的颜色分量丢弃

 

  YUV420第一行    YU     YV      YU        YV

  YUV420第二行    Y       Y        Y          Y

  YUV420第三行    YU     YV      YU        YV

  YUV420第四行    Y       Y        Y          Y

  YUV420第五行    YU     YV      YU        YV

  YUV420第六行    Y      Y        Y         Y


4、RGB到YUV转

Y <=   ( (263 * iRed) + (516 * iGreen) + (100 * iBlue) +  16384)>>10;
  U <=   ( (450 * iRed) - (377 * iGreen) - ( 73 * iBlue)   +  131072)>>10;
  V <=   (-(152 * iRed) - (298 * iGreen) + (450 * iBlue)  +  131072)>>10; 	

  注意:

    如果时钟频率过高、组合逻辑耗费时间太长、FPGA等级低---即变为流水线来实现

    如果为BT655传输:Y/U/V的值应该在-- 16<Y/U/V<235


  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在chi-cdk中,可以使用MediaCodec类和MediaExtractor类来获取yuv420格式的图像。具体步骤如下: 1. 创建一个MediaExtractor对象并设置要解码的视频文件路径: ``` MediaExtractor extractor = new MediaExtractor(); extractor.setDataSource(filePath); ``` 2. 找到包含视频流的轨道: ``` int trackIndex = -1; for (int i = 0; i < extractor.getTrackCount(); i++) { MediaFormat format = extractor.getTrackFormat(i); String mime = format.getString(MediaFormat.KEY_MIME); if (mime.startsWith("video/")) { trackIndex = i; break; } } ``` 3. 选择并配置要解码的轨道: ``` extractor.selectTrack(trackIndex); MediaFormat format = extractor.getTrackFormat(trackIndex); String mime = format.getString(MediaFormat.KEY_MIME); MediaCodec codec = MediaCodec.createDecoderByType(mime); codec.configure(format, null, null, 0); codec.start(); ``` 4. 循环读取每个视频帧并解码: ``` ByteBuffer[] inputBuffers = codec.getInputBuffers(); ByteBuffer[] outputBuffers = codec.getOutputBuffers(); MediaCodec.BufferInfo info = new MediaCodec.BufferInfo(); boolean isEOS = false; while (!isEOS) { int inIndex = codec.dequeueInputBuffer(1000); if (inIndex >= 0) { ByteBuffer buffer = inputBuffers[inIndex]; int sampleSize = extractor.readSampleData(buffer, 0); if (sampleSize < 0) { codec.queueInputBuffer(inIndex, 0, 0, 0, MediaCodec.BUFFER_FLAG_END_OF_STREAM); isEOS = true; } else { codec.queueInputBuffer(inIndex, 0, sampleSize, extractor.getSampleTime(), 0); extractor.advance(); } } int outIndex = codec.dequeueOutputBuffer(info, 1000); switch (outIndex) { case MediaCodec.INFO_OUTPUT_BUFFERS_CHANGED: outputBuffers = codec.getOutputBuffers(); break; case MediaCodec.INFO_OUTPUT_FORMAT_CHANGED: format = codec.getOutputFormat(); break; case MediaCodec.INFO_TRY_AGAIN_LATER: break; default: ByteBuffer buffer = outputBuffers[outIndex]; // 这里的buffer即为yuv420的图像数据 codec.releaseOutputBuffer(outIndex, true); break; } } ``` 通过以上步骤,就可以获取到yuv420格式的图像数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值