【HAL】Framework入口函数简介(5):configure_streams

一、CAMERA_DEVICE_API_VERSION_3_0 and 3_1
  1. 重置HAL相机设备正在处理的pipeline并设置新的输入和输出流。此调用将所有现有的stream配置替换为stream_list中定义的stream。在initialize()之后,使用process_capture_request()提交请求之前,将至少调用一次此方法。
  2. stream_list必须至少包含一个具有输出能力的stream,并且可能不会含一个以上具有输入能力的stream。
  3. stream_list中的stream可能也处于一组当前活跃状态stream中(来自先前configure_stream()调用)。这些stream将已经具有有效的usage、max_buffers和私有指针。
  4. 如果这样的stream已经有已注册的buffer,register_stream_buffers()将不会为这个stream再被调用,stream中的buffer可以立即被包含在输入请求当中。
  5. 如果HAL因新配置而需要更改现有stream的配置,在configure调用的时候有可能修改usage、max_Buffers的值。
  6. Framework将检测到这样的更改,然后将重新分配stream buffers,并在请求中使用该stream中的buffer之前再次调用register_stream_buffers()。
  7. 如果当前活跃的stream没有包含在stream_list,HAL可以安全地移除对该stream的任何引用。在之后的Framework调用configure()的时候将不会再使用,并且该stream中的所有gralloc buffer在configure_streams()调用返回之后将被释放。
  8. stream_list结构体归框架所有,并且一旦该调用完成就不能访问。单个camera3_stream_t的结构体地址将对HAL保持有效,直到第一个configure_stream()调用结束时为止,该调用不再在stream_list参数中包括该camera3_stream_t。HAL不能在私有指针之外更改stream结构体中的值,除了usage和max_buffer成员在configure_streams()调用自己的时候。
  9. (1) CAMERA_DEVICE_API_VERSION_3_0:
    如果是新的stream,stream结构体的usage、max_buffers和私有指针字段将被置为0。HAL device必须在configure_streams()调用返回之前设置这些字段。这些字段然后会被Framework和platform gralloc module使用去分配每个stream的gralloc buffer。
    (2) CAMERA_DEVICE_API_VERSION_3_1:
    如果是新的stream,stream结构体的max_buffers和私有指针字段将被置为0。usage将被置为用户usage flags。HAL device必须在configure_streams()调用返回之前设置这些字段。这些字段然后会被Framework和platform gralloc module使用去分配每个stream的gralloc buffer。
  10. 在这个新stream有包含在capture请求中的自己的buffer之前,Framework将使用这个stream调用register_stream_buffers()。但是,在提交请求之前,Framework不需要为所有的stream都注册buffer。允许(例如)preview stream的快速启动,最后或并行进行其他stream的分配。
二、>= CAMERA_DEVICE_API_VERSION_3_2
  1. 重置HAL相机设备正在处理的pipeline并设置新的输入和输出流。此调用将所有现有的stream配置替换为stream_list中定义的stream。在initialize()之后,使用process_capture_request()提交请求之前,将至少调用一次此方法。
  2. stream_list必须至少包含一个具有输出能力的stream,并且可能不会含一个以上具有输入能力的stream。
  3. stream_list中的stream可能也处于一组当前活跃状态stream中(来自先前configure_stream()调用)。这些stream将已经具有有效的usage、max_buffers和私有指针。
  4. 如果HAL因新配置而需要更改现有stream的配置,在configure调用的时候有可能修改usage、max_Buffers的值。
  5. Framework将检测到这样的更改,然后在使用请求里stream的buffer之前,重新分配stream buffer。
  6. 如果当前活跃的stream没有包含在stream_list,HAL可以安全地移除对该stream的任何引用。在之后的Framework调用configure()的时候将不会再使用,并且该stream中的所有gralloc buffer在configure_streams()调用返回之后将被释放。
  7. stream_list结构体归框架所有,并且一旦该调用完成就不能访问。单个camera3_stream_t的结构体地址将对HAL保持有效,直到第一个configure_stream()调用结束时为止,该调用不再在stream_list参数中包括该camera3_stream_t。HAL不能在私有指针之外更改stream结构体中的值,除了usage和max_buffer成员在configure_streams()调用自己的时候。
  8. 如果是新的stream,stream结构体的max_buffers和私有指针字段将被置为0。usage将被置为用户usage flags。HAL device必须在configure_streams()调用返回之前设置这些字段。这些字段然后会被Framework和platform gralloc module使用去分配每个stream的gralloc buffer。
  9. Framework可以在任何时间将新分配的buffer包含在capture请求中。一旦gralloc buffer通过process_capture_result返还给framework(并且它各自的release_fence已经被发送信号),Framework可以在任何时候释放或再使用它。
前提条件

Framework将仅在没有capture正被处理的时候调用这个方法。也就是,所有的结果已经被返回给Framework,并且所有途中的输入和输出buffer已经返回,HAL也发送了他们的release sync fences信号。当configure_streams()调用在进行中得时候,Framework将不会提交新的capture请求。

后续条件

HAL device必须配置自己,根据输出stream的size和format提供尽可能最大的输出帧率,就像相机设备的静态metadata中记录的那样。

性能要求

预计是个重量级的调用,可能需要几百毫秒完成,由于它需要重置和重新配置图像传感器和相机处理pipeline。然而,在应用程序操作模式切换时(例如从拍照切换到录像),HAL
device应尝试最小化重新配置延时以减小用户视觉暂停。
HAL应当500ms内且必须1000ms内返回该调用。

/**
 * camera3_stream_configuration_t:
 *
 * A structure of stream definitions, used by configure_streams(). This
 * structure defines all the output streams and the reprocessing input
 * stream for the current camera use case.
 */
typedef struct camera3_stream_configuration {
    /**
     * The total number of streams requested by the framework.
     */
    uint32_t num_streams;

    /**
     * An array of camera stream pointers, defining the input/output
     * configuration for the camera HAL device.
     */
    camera3_stream_t **streams;

    /**
     * >= CAMERA_DEVICE_API_VERSION_3_3:
     * The operation mode of streams in this configuration, one of the value
     * defined in camera3_stream_configuration_mode_t. 
     */
    uint32_t operation_mode;

    /**
     * >= CAMERA_DEVICE_API_VERSION_3_5:
     * The session metadata buffer contains the initial values of
     * ANDROID_REQUEST_AVAILABLE_SESSION_KEYS. 
     */
    const camera_metadata_t *session_parameters;
} camera3_stream_configuration_t;

待续…

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 用途是用于初始化 LCD 控制器。DMA2D_Init,用法用途是用于初始化 DMA2D 控制器。LTDC_LayerInit,用法用途是用于初始化 LTDC 图。LTDC_ReloadConfig,用法用途是用于重新加载 LTDC 配置。 ### 回答2: STM32 HAL库提供的API函数中包括LTDC_Init函数,用于初始化LTDC(LCD-TFT显示控制器)模块。 LTDC_Init函数的使用方法如下: 在使用之前,需要确保已经在项目中引入了正确的库文件,并且已经包含了相应的头文件。 1. 调用LTDC_InitTypeDef结构体来定义和配置LCD控制器的参数。这个结构体包含了与LTDC相关的各种配置选项。 2. 设置结构体中需要配置的各项参数。这些参数包括时钟分频系数、像素时钟频率、水平和垂直同步信号的极性等。 3. 调用HAL_LTDC_Init函数,将上述配置应用到LTDC模块上。 下面是一个示例代码,仅供参考: ```c // 定义并初始化LTDC_InitTypeDef结构体 LTDC_HandleTypeDef hltdc; LTDC_InitTypeDef ltdc_config; // 配置LTDC_InitTypeDef结构体的各个参数 ltdc_config.HorizontalSync = 10; ltdc_config.VerticalSync = 10; ltdc_config.AccumulatedHBP = 20; ltdc_config.AccumulatedVBP = 10; //... // 将配置应用到LTDC模块上 hltdc.Instance = LTDC; hltdc.Init = ltdc_config; HAL_LTDC_Init(&hltdc); ``` 通过以上步骤,LTDC模块的配置就完成了。接下来,可以进一步配置其他相关参数,如背光控制、前景和背景的配置等。 需要注意的是,在使用LTDC_Init函数之前,还需先调用RCC配置函数来使能LTDC的时钟,以确保LTDC模块正常工作。 请注意,以上是一个简单的示例,具体的配置参数还需要根据实际的应用和硬件平台来进行调整。建议查阅STM32的相关参考文档,以获取更详细的配置信息和实例代码。 ### 回答3: STM32 HAL库中的LTDC_Init函数是用于初始化LCD控制器(LTDC)的函数。该函数主要用于配置LCD控制器的各种参数,以便正确驱动与之连接的LCD屏幕。 首先,要使用LTDC_Init函数,需要在代码中包含stm32f4xx_hal_ltdc.h头文件。 LTDC_Init函数的原型如下: HAL_StatusTypeDef LTDC_Init(LTDC_HandleTypeDef *hltdc) 该函数的参数是一个LTDC_HandleTypeDef结构体指针,用于传递LTDC控制器的配置参数。 在调用LTDC_Init函数之前,需要先创建一个LTDC_HandleTypeDef结构体,并对其中的成员进行配置。该结构体中的成员包括: - HorizontalSync:水平同步信号的极性和水平同步信号宽度的配置; - VerticalSync:垂直同步信号的极性和垂直同步信号宽度的配置; - AccumulatedHBP:水平后沿之后的像素数,即背景显示的宽度; - AccumulatedVBP:垂直后沿之后的行数,即背景显示的高度; - AccumulatedActiveW:可见像素的宽度; - AccumulatedActiveH:可见像素的高度; - TotalWidth:一行像素的总宽度; - TotalHeigh:一帧像素的总高度; - BackColor:背景颜色的配置; - ClockPolarity:时钟极性的配置; - HorizontalBackPorch:水平前沿和有色信息之间的像素数; - VerticalBackPorch:垂直前沿和有色信息之间的行数。 配置完以上参数后,就可以调用LTDC_Init函数,将配置好的LTDC_HandleTypeDef结构体传入。LTDC_Init函数内部会根据传入的配置参数,对LTDC进行相应的初始化操作,包括时钟配置、信号极性配置、背光颜色配置等。 总之,通过调用LTDC_Init函数,可以方便地进行LTDC控制器的初始化配置,以实现对LCD屏幕的正确驱动。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值