OMX只是一个框架,所以解码器是硬解还是软解都没关系,而且大多说厂家的硬解码都是使用OMX框架

来源:互联网 发布:常见的hash算法 编辑:程序博客网 时间:2024/05/17 05:54
转自 http://blog.sina.com.cn/foreverlovelost

OMX只是一个框架,所以与解码器是硬解还是软解都没关系,而且大多说厂家的硬解码都是使用OMX框架

数据格式及OMX输入缓冲细节

    enum State{
       DEAD,
       LOADED,
      LOADED_TO_IDLE,
      IDLE_TO_EXECUTING,
       EXECUTING,
      EXECUTING_TO_IDLE,
      IDLE_TO_LOADED,
      RECONFIGURING,
       ERROR
   };

    enum{
       kPortIndexInput = 0,
       kPortIndexOutput =1
   };

    enum PortStatus{
       ENABLED,
       DISABLING,
       DISABLED,
       ENABLING,
      SHUTTING_DOWN,
   };

    enum Quirks{
       kNeedsFlushBeforeDisable           = 1,
       kWantsNALFragments                = 2,
      kRequiresLoadedToIdleAfterAllocation  =4,
      kRequiresAllocateBufferOnInputPorts   =8,
      kRequiresFlushCompleteEmulation      = 16,
      kRequiresAllocateBufferOnOutputPorts  =32,
       kRequiresFlushBeforeShutdown        = 64,
       kDefersOutputBufferAllocation       = 128,
      kDecoderLiesAboutNumberOfChannels    = 256,
       kInputBufferSizesAreBogu          =512,
      kSupportsMultipleFramesPerInputBuffer = 1024,
      kAvoidMemcopyInputRecordingFrames    = 2048,
      kRequiresLargerEncoderOutputBuffer   = 4096,
       kOutputBuffersAreUnreadable         = 8192,
   };

    enumBufferStatus {
       OWNED_BY_US,
      OWNED_BY_COMPONENT,
      OWNED_BY_NATIVE_WINDOW,
      OWNED_BY_CLIENT,
   };

    structBufferInfo {
       IOMX::buffer_idmBuffer;
       BufferStatusmStatus;
      sp<IMemory> mMem;
       size_tmSize;
       void *mData;
       MediaBuffer*mMediaBuffer;
   };

    structCodecSpecificData {
       size_tmSize;
       uint8_tmData[1];
   };

err =mOMX->sendCommand(mNode, OMX_CommandStateSet,OMX_StateIdle);

status_t err= mOMX->emptyBuffer(
              mNode,info->mBuffer, 0, size,
              OMX_BUFFERFLAG_ENDOFFRAME |OMX_BUFFERFLAG_CODECCONFIG,
              0);

err = mOMX->emptyBuffer(
           mNode,info->mBuffer, 0, offset,
           flags,timestampUs);
0 0
原创粉丝点击