Decode video in Raspberry Pi without using OpenMAX?

前端 未结 2 895
遇见更好的自我
遇见更好的自我 2021-02-12 20:21

I am looking for an example of decoding video on Raspberry Pi directly, without using OpenMAX.

This explains the different layers of multimedia software:

相关标签:
2条回答
  • 2021-02-12 20:44

    I think openmax gives more performance in multimedia processing. You can compare performance for this two alternatives simple running respective pipelines for gstreamer. For this actions not needed programming and you can use gst-launch fot this purposes. Openmax plugins for gstreamer start with 'omx' prefix. Coding and decoding operations perfectly executing with omx while main CPU get no load. Proprietary implementation for h264 coding or decoding is very difficult problem and without using libraries you can spend for this many years.

    0 讨论(0)
  • 2021-02-12 21:03

    I don't have a working example, but I have an API walkthrough. Sort of..

    Link to the full source code

    I found the following function that demonstrate how you can call vchiq_bulk_transmit

    int32_t vchi_bulk_queue_transmit(VCHI_SERVICE_HANDLE_T handle,
        void *data_src,
        uint32_t data_size,
        VCHI_FLAGS_T flags,
        void *bulk_handle)
    {
        SHIM_SERVICE_T *service = (SHIM_SERVICE_T *)handle;
        ..
        status = vchiq_bulk_transmit(service->handle, data_src,
            data_size, bulk_handle, mode);
        ..
        return vchiq_status_to_vchi(status);
    }
    EXPORT_SYMBOL(vchi_bulk_queue_transmit);
    

    There is a function to create VCHI_SERVICE_HANDLE_T

    int32_t vchi_service_create(VCHI_INSTANCE_T instance_handle,
        SERVICE_CREATION_T *setup,
        VCHI_SERVICE_HANDLE_T *handle)
    {
        VCHIQ_INSTANCE_T instance = (VCHIQ_INSTANCE_T)instance_handle;
        SHIM_SERVICE_T *service = service_alloc(instance, setup);
    
        *handle = (VCHI_SERVICE_HANDLE_T)service;
        ..
        return (service != NULL) ? 0 : -1;
    }
    EXPORT_SYMBOL(vchi_service_create);
    

    But you need a VCHI_INSTANCE_T which can be initialized here

    int32_t vchi_initialise(VCHI_INSTANCE_T *instance_handle)
    {
        VCHIQ_INSTANCE_T instance;
        VCHIQ_STATUS_T status;
    
        status = vchiq_initialise(&instance);
    
        *instance_handle = (VCHI_INSTANCE_T)instance;
    
        return vchiq_status_to_vchi(status);
    }
    EXPORT_SYMBOL(vchi_initialise);
    
    0 讨论(0)
提交回复
热议问题