小编use*_*481的帖子

如何使用 syn v2 解析这样的属性管:`#[attr("a", "b", "c")]`?

synv1中,有NestedMeta一个对于解析嵌套元非常方便的功能。但自synv2 以来,它已被删除。

例如,

trait Hello {
    fn hello();
}

#[derive(Hello)]
#[hello("world1", "world2")]
struct A;

fn main() {
    A::hello();
}
Run Code Online (Sandbox Code Playgroud)

我希望上面的代码打印Hello world1, world2!在屏幕上。我的 proc-macro 可以使用 v1 来实现,syn如下所示

use proc_macro::TokenStream;
use quote::quote;
use syn::{DeriveInput, Meta};

#[proc_macro_derive(Hello, attributes(hello))]
pub fn hello_derive(input: TokenStream) -> TokenStream {
    let ast: DeriveInput = syn::parse(input).unwrap();

    let name = &ast.ident;

    let mut target: Vec<String> = vec![];

    for attr in ast.attrs {
        if let Some(attr_meta_name) = attr.path.get_ident() {
            if attr_meta_name …
Run Code Online (Sandbox Code Playgroud)

rust syn

7
推荐指数
1
解决办法
2019
查看次数

如何使用android ndk r9b编译Android的FFMPEG

我想设计一个可以通过FFMPEG命令播放和编辑视频的Android应用程序.但我不知道如何在Android上使用FFMPEG.我尝试过从Google搜索过的很多方法,但它们太老了,无法实现.现在,最新版本的FFMPEG是2.1.1,而Android-NDK的版本是r9b.我的操作系统是Linux mint 15.如何在我的操作系统上使用eclipse IDE来实现一个拥有FFMPEG最新解码器和编码器的Android应用程序?

android ffmpeg android-ndk

5
推荐指数
1
解决办法
6599
查看次数

如何正确使用YUV_420_888和MediaCodec的ImageReader将视频编码为h264格式?

我正在Android设备上实现相机应用程序。当前,我使用Camera2 API和ImageReader来获取YUV_420_888格式的图像数据,但是我不知道如何将这些数据准确地写入MediaCodec。

这是我的问题:

  1. 什么YUV_420_888

该格式YUV_420_888是不明确的,因为它可以属于任何形式YUV420的家庭,如YUV420PYUV420PPYUV420SPYUV420PSP,对不对?

通过访问图像的三个平面(#0,#1,#2),我可以获得该图像的Y(#0),U(#1),V(#2)值。但是这些值的排列在不同设备上可能不相同。例如,如果YUV_420_888确实表示YUV420P,则Plane#1和Plane#2的大小均为Plane#0的四分之一。如果YUV_420_888确实表示YUV420SP,则Plane#1和Plane#2的大小都是Plane#0大小的一半(Plane#1和Plane#2的每个包含U,V值)。

如果要将这些数据从图像的三个平面写入MediaCodec,我需要转换为哪种格式?YUV420,NV21,NV12 ...

  1. 什么COLOR_FormatYUV420Flexible

该格式COLOR_FormatYUV420Flexible也有歧义,因为它可以是属于该YUV420家族的任何格式,对吗?如果将KEY_COLOR_FORMATMediaCodec对象的选项设置为COLOR_FormatYUV420Flexible,我应该输入哪种格式的数据(YUV420P,YUV420SP ...?)?

  1. 怎么样使用COLOR_FormatSurface

我知道MediaCodec具有自己的表面,如果我将KEY_COLOR_FORMATMediaCodec对象的选项设置为,则可以使用该表面COLOR_FormatSurface。使用Camera2 API,我不需要自己将任何数据写入MediaCodec对象。我可以耗尽输出缓冲区。

但是,我需要从相机更改图像。例如,绘制其他图片,在上面写一些文字,或将另一个视频插入为POP(图片的图片)。

我可以使用ImageReader从Camera读取图像,然后重新绘制图像,然后将新数据写入MediaCodec的表面,然后将其排干吗?怎么做?

编辑1

我通过使用COLOR_FormatSurface和RenderScript 实现了该功能。这是我的代码:

onImageAvailable 方法:

public void onImageAvailable(ImageReader imageReader) {
    try {
        try (Image image = imageReader.acquireLatestImage()) {
            if (image == null) …
Run Code Online (Sandbox Code Playgroud)

camera yuv android-camera android-camera2

5
推荐指数
1
解决办法
2486
查看次数

使用Android NDK为x86编译FFmpeg 3.1.1

最新版本FFmpeg3.1.1.版本后3.1,我不能编译FFmpegx86.(但3.0.2或更早的版本可以被编译.)

终端显示ld: error: libavutil/../compat/strtod.o: incompatible target.

我的操作系统是Xubuntu 14.04 x86x86_64.(我已经尝试了它们.)

我的NDK版本是r10e(x86)r12b(x86_64).

当我编译时FFmpeg 3.0.2,它没有错误.

这是我的配置:

./configure \
--prefix="${PREFIX}" \
--enable-shared \
--disable-static \
--disable-doc \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--cross-prefix="${PREFIX}/bin/i686-linux-android-" \
--target-os=linux \
--arch=x86 \
--enable-cross-compile \
--sysroot="${PREFIX}/sysroot" \
--extra-cflags="" \
--extra-ldflags="" \
--extra-libs="" \
--disable-debug
Run Code Online (Sandbox Code Playgroud)

${PREFIX}--install-dir运行时用于选项的目录路径,make-standalone-toolchain.sh这是Android NDK中的工具.

它只有当我编译发生 …

c c++ android ffmpeg android-ndk

3
推荐指数
1
解决办法
784
查看次数

使用 MediaMuxer 编码 MP4 文件,但在调用 mediaMuxer.stop() 时崩溃

我使用 MediaMuxer 和 MediaCodec 将相机和音频中的视频(H264)数据和音频(AAC-LC)数据编码为 MP4 文件。但 MediaMuxer 对象有时会崩溃mediaMuxer.stop(),错误日志为

11-03 16:28:36.956: A/DEBUG(711): Abort message: 'frameworks/av/media/libstagefright/MPEG4Writer.cpp:2983 CHECK_LT( mCodecSpecificDataSize + 23,128) failed: 399 vs. 128'
11-03 16:28:36.957: A/DEBUG(711):     x0   0000000000000000  x1   0000000000001184  x2   0000000000000006  x3   0000000000000000
11-03 16:28:36.957: A/DEBUG(711):     x4   0000000000000000  x5   0000000000000001  x6   0000000000000000  x7   0000000000000000
11-03 16:28:36.957: A/DEBUG(711):     x8   0000000000000083  x9   0000000000000000  x10  0000000000000000  x11  0000007f91bb0df8
11-03 16:28:36.958: A/DEBUG(711):     x12  0000007f91bb0cd0  x13  0000000000000077  x14  0000007f91bb0ea8  x15  0000000000000000
11-03 16:28:36.958: A/DEBUG(711):     x16  0000007faca8d6a8  x17  0000007faca4fb2c  x18  0000007face14418  x19  0000007f91bb3510 …
Run Code Online (Sandbox Code Playgroud)

video android mediamuxer android-mediacodec

0
推荐指数
1
解决办法
1157
查看次数