小编And*_*ell的帖子

使用标签进行C struct初始化.它有效,但如何?

昨天我发现了一些结构初始化代码,它让我循环.这是一个例子:

typedef struct { int first; int second; } TEST_STRUCT;
void testFunc() {
    TEST_STRUCT test = {
        second: 2,
        first:  1
    };
    printf("test.first=%d test.second=%d\n", test.first, test.second);
}
Run Code Online (Sandbox Code Playgroud)

令人惊讶的是(对我来说),这是输出:

-> testFunc
test.first=1 test.second=2
Run Code Online (Sandbox Code Playgroud)

如您所见,struct正确初始化.我不知道标签语句可以这样使用.我已经看到了其他几种进行结构初始化的方法,但我没有在任何在线C FAQ上找到任何这种结构初始化的例子.有人知道这是如何/为什么有效?

c label struct initialization

41
推荐指数
4
解决办法
4万
查看次数

术语:前向声明与功能原型

对我来说,这些术语在使用C编程语言时基本上是同义词.在实践中,我可能更喜欢文件内原型的"前向声明"而不是通过头文件包含的原型的"函数原型".但是当你考虑预处理后发生的事情时,即使这是一个人为的区别.也许我错过了一些东西.

关于何时使用一个术语而不是另一个术语是否存在共识?

c terminology forward-declaration function-prototypes

16
推荐指数
3
解决办法
8923
查看次数

如何将Camera预览传递给MediaCodec.createInputSurface()创建的Surface?

理想情况下,我想完成两个目标:

  1. 通过Camera预览将预览数据传递给MediaCodec编码器Surface.我可以创建Surface使用MediaCodec.createInputSurface()但是Camera.setPreviewDisplay()需要a SurfaceHolder,而不是a Surface.
  2. 除了将Camera预览数据传递给编码器之外,我还想在屏幕上显示预览(这样用户实际上可以看到他们编码的内容).如果编码器没有参与,那么我会使用a SurfaceView,但这似乎不适用于这种情况,因为SurfaceView创建了自己的编码器Surface,我认为我需要使用创建的编码器MediaCodec.

我在网上搜索了很多解决方案,但没有找到解决方案.bigflake.com上的一些例子似乎是朝着正确方向迈出的一步,但他们采取了一种方法,增加了一堆我想避免的EGL/SurfaceTexture开销.我希望有一个简单的例子或解决方案,我能得到Camera并且MediaCodec不涉及EGL或纹理更直接交谈.

camera android encoder surfaceview mediacodec

15
推荐指数
1
解决办法
5429
查看次数

MediaMuxer错误"无法停止复用器"

Camera使用MediaCodecmime-type"video/avc" 编码预览数据,并将编码数据(仅限视频,无音频)传递给MediaMuxer.复用器似乎运行正常并创建一个合理大小的输出文件(即,我记录的时间越长,越大).但是,当我尝试停止复用器时,我得到"无法停止复用器"错误:

10-21 10:39:40.755: E/AndroidRuntime(2166): Caused by: java.lang.IllegalStateException: Failed to stop the muxer
Run Code Online (Sandbox Code Playgroud)

在失败的停止之前有一些可疑的MPEG4Writer日志消息:

10-21 10:39:40.740: D/MPEG4Writer(2166): Stopping Video track
10-21 10:39:40.740: E/MPEG4Writer(2166): Missing codec specific data
10-21 10:39:40.740: W/MPEG4Writer(2166): 0-duration samples found: 122
10-21 10:39:40.740: I/MPEG4Writer(2166): Received total/0-length (123/1) buffers and encoded 123 frames. - video
10-21 10:39:40.740: D/MPEG4Writer(2166): Stopping Video track source
10-21 10:39:40.740: D/MPEG4Writer(2166): Video track stopped
10-21 10:39:40.740: D/MPEG4Writer(2166): Stopping writer thread
10-21 10:39:40.740: D/MPEG4Writer(2166): 0 chunks are written in …
Run Code Online (Sandbox Code Playgroud)

mp4 android muxer mediacodec

11
推荐指数
2
解决办法
1万
查看次数

如何在ARM处理器上检测冷启动与热启动?

我正在寻找一种方法来确定ARM处理器是从冷启动(即初始上电)到热启动(即没有实际功率损耗的复位断言)启动.具体来说,我正在使用ARM968内核,将使用C或汇编进行确定,我将使用该确定,因此某些操作仅在初始上电时运行,而不是在后续复位时运行.在之前的项目中,我利用外部电路(例如FPGA)来检测不同的启动方案,但在这种情况下,我仅限于ARM内核.

c embedded boot arm reset

7
推荐指数
2
解决办法
4395
查看次数

将MediaCodec解码视频帧绘制到屏幕的最快方法?

我正在寻找从MediaCodec解码器接收图像帧并将其绘制到Android设备屏幕的最快方法.重要的限制和解释是:

  1. 无法使用MediaPlayer.不允许使用中间应用.

  2. 必须尽快将MediaCodec解码器的输出帧绘制到屏幕上(最小化延迟).

  3. 可用的解码器输出格式如下:
    ColorFormat [0] 0x00000013 COLOR_FormatYUV420Planar
    ColorFormat [1] 0x00000015 COLOR_FormatYUV420SemiPlanar
    ColorFormat [2] 0x7F000001 OMX_SEC_COLOR_FormatNV12TPhysicalAddress
    ColorFormat [3] 0x7FC00002 OMX_SEC_COLOR_FormatNV12Tiled

  4. 视频分辨率以及每个输出帧的分辨率为960x720.

  5. 目标平台是Galaxy Note II,该方法可以特定于该平台(例如,利用可用的硬件功能).这不需要在其他平台上工作或者是通用解决方案.

一种不到66毫秒的方法会很好.不到33毫秒会很棒.我目前的方法需要80-90毫秒,这很糟糕.(我不打算去描述它,因为我不想在任何特定的方向上扭曲答案.)

android yuv decoder surfaceview mediacodec

6
推荐指数
1
解决办法
4525
查看次数

4.1中未调用Android Camera PreviewCallback

我有一个应用程序来获取带有曲面的相机预览帧.它适用于Android 4.0.4,但在更新后它不适用于同一设备上的Jelly Bean,4.1.2.简单地说,回调永远不会被回调.这是代码:剪了一下:

public class Panel extends Activity {
    Camera myCamera;
    int cameraId = -1;
    MyCameraSurfaceView myCameraSurfaceView;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_panel);

        myCamera = getCameraInstance();
        myCamera.setPreviewCallback(new Camera.PreviewCallback() {
            @Override
            public void onPreviewFrame(byte[] data, Camera camera) {
                Log.d("Camera Preview", data.length + "");
            }
        });

        myCameraSurfaceView = new MyCameraSurfaceView(this, myCamera);
        FrameLayout myCameraPreview = (FrameLayout) findViewById(R.id.videoview);
        myCameraPreview.addView(myCameraSurfaceView);
    }

    private Camera getCameraInstance() {
        Camera c = null;
        try {
            c = Camera.open();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return c; …
Run Code Online (Sandbox Code Playgroud)

video camera android callback frame

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

给定映射到 C 结构的字节,如何通过 C 结构的变量名访问字节

(请耐心等待,我认为是用 C 而不是 Python,所以你可能会看到一些真正愚蠢的东西......)

我有许多(100+)不同的 C structs,作为 拉入 Python(版本 3.5.1)bytes,我希望能够使用原始 C 结构体的变量名来访问它们。这是一个简单的例子。在Python中我收到了这些bytes

# In Python:
example1_bytes = b'\x08\x09\x0a\x0b'
Run Code Online (Sandbox Code Playgroud)

假设这些bytes是由运行 C 的程序提供的,使用struct以下格式:

// In C:
struct example1 {
  uint8_t val1;
  uint8_t val2;
  uint8_t val3;
  uint8_t val4; };
Run Code Online (Sandbox Code Playgroud)

我该如何处理example1_bytes才能像这样访问它们:

# In Python:
result = process_example1_bytes(example1_bytes)
print(result.val1)
# Prints "8"
print(result.val2)
# Prints "9"
# Et cetera
Run Code Online (Sandbox Code Playgroud)

更进一步,如果 Cstruct更复杂并且包含数组和/或子结构怎么办?例如,这样的事情:

// In C:
struct substruct {
  uint8_t ss_val1;
  uint8_t ss_val2; }; …
Run Code Online (Sandbox Code Playgroud)

python python-3.x

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

我在哪里可以获得针对ADT的功能性Wi-Fi Direct演示Android应用程序项目?

我在developer.android.com上看到了对Wi-Fi Direct演示应用程序的引用,但我不知道如何定位和/或导入它.大多数Android教程都是直截了当的,我可以下载并添加项目作为现有代码(例如网络服务发现),但我对Wi-Fi Direct没有任何好运.

这不一定是股票Wi-Fi Direct演示(假设存在一个).我只想要一些我可以进入ADT的东西,所以我有一些示例源代码.(我知道我链接的Wi-Fi Direct页面上有代码片段,但我正在寻找一个已知功能项目,而不是片段.)

作为参考,我正在运行Android Developer Tools Build:v21.1.0-569685,我有两部运行Android版本4.2.x的手机.

android adt android-wifi wifi-direct

4
推荐指数
3
解决办法
2万
查看次数