This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TDA4VM: Processors forum

Part Number: TDA4VM

Hi Ti's Experts,

     We found that com.ti.hwa.video_encoder does not support pipeline when the pipeline buffer depth is greater than 1. 

     Assume the input image frame rate is 30, if the input  pipeline buffer depth of  com.ti.hwa.video_encoder set to 2, the actual encoding frame rate is only 15;if set 3, encoding frame rate is only 10.

     Therefore, for the official demo: ti-processor-sdk-rtos-j721e-evm-07_03_00_07/vision_apps/apps/dl_demos/app_tidl_avp4,

           tivxSetNodeParameterNumBufByIndex(obj->imgMosaicObj.node, 1, APP_BUFFER_Q_DEPTH);  

     The following modifications may be required

           tivxSetNodeParameterNumBufByIndex(obj->imgMosaicObj.node, 1, 1); 

     

      I tried to find out the cause of the problem,and Found that com.ti.hwa.video_encoder bind the buffer  first occurrence when call the  tivxVideoEncoderProcess(), 

      

      Firstly Process,

      MM_ENC_BufPrepare() bind the  encoder_obj->in_buff  and encoder_obj->out_buff to g_MM_ENC_Inst.ch_obj[chId].mm_buf;  then bind the sgl[0].dma_address to buf->buffer->buf_addr[0
      finally buf->mapped = osa_true;
      Secondly Process
      
      Before  Calling MM_ENC_BufPrepare() , the following physical addresses will be updated
           encoder_obj->in_buff.buf_addr[0] = input_image_target_ptr_y;
           encoder_obj->in_buff.buf_addr[1] = input_image_target_ptr_uv;
      when call the MM_ENC_BufPrepare() , the function Directly return the corresponding buffers of  encoder_obj->in_buff  and encoder_obj->out_buff  in g_MM_ENC_Inst.ch_obj[chId].mm_buf because of 
      buf->mapped = osa_true; There will be a problem here that sgl[0].dma_address did not update to the new physical addresses;
           then  calling the function 
            
           mm_status = MM_ENC_Process(&encoder_obj->in_buff, &encoder_obj->out_buff, NULL, encoder_obj->channel_id);
           Function  MM_ENC_Process passed in the input data pointer at the following location,  The physical address of the src_frame->y_plane_buffer->mem_info.cpu_virt has not been updated , it still uses the physical address of the previous frame
            
            I guess that's the reason for the problem. 
            So, have you found this problem? Could you please release patchs on SDK 7.03 to fix this problem?

            Thanks a lot, Look for your reply!