美文网首页chromium从入门到放弃
chromium media中video width &

chromium media中video width &

作者: imesong | 来源:发表于2018-03-08 16:22 被阅读38次

    1.media_player_bridge.cc

    void MediaPlayerBridge::OnExternalVideoSurfacePositionChanged(int id , const gfx::RectF& rect)
    {
     Java_MediaPlayerBridge_OnExternalVideoSurfacePositionChanged(
            env, j_media_player_bridge_.obj(),id,rect.x(),rect.y(),rect.x()+rect.width(),rect.y()+rect.height());
    }
    
    

    2.browser_media_player_manager.cc

    
    void BrowserMediaPlayerManager::ExternalVideoSurfacePositionChanged(int id, const gfx::RectF& rect)
    {
     MediaPlayerAndroid* lastPlayer =  GetPlayer(last_player_id_);
     if(lastPlayer){
          MediaPlayerBridge* lastBridge = static_cast<MediaPlayerBridge*>(lastPlayer);
          //invoke java to remove previous videoview
          if(lastBridge)
              lastBridge->OnExternalVideoSurfacePositionChanged(id,rect);
       }
    }
    

    ExternalVideoSurfacePositionChanged()方法被调用

    
    void BrowserMediaPlayerManager::OnNotifyExternalSurface(
        int player_id, bool is_request, const gfx::RectF& rect) {
         //zhangls add
      if (!is_request)
      {
        ExternalVideoSurfacePositionChanged(player_id,rect);
      }
      //end
        }
    
    

    通过IPC调用 OnExternalSurface

    #if defined(VIDEO_HOLE)
        IPC_MESSAGE_FORWARD(MediaPlayerHostMsg_NotifyExternalSurface,
        GetMediaPlayerManager(render_frame_host),                                BrowserMediaPlayerManager::OnNotifyExternalSurface)
    #endif  // defined(VIDEO_HOLE)
    

    MSG 在 media_player_messages_android.h 中定义

    renderer_media_player_manager.cc 发送消息

    #if defined(VIDEO_HOLE)
    //1 send
    void RendererMediaPlayerManager::RequestExternalSurface(
        int player_id,
        const gfx::RectF& geometry) {
      Send(new MediaPlayerHostMsg_NotifyExternalSurface(
          routing_id(), player_id, true, geometry));
    }
    //2 send
    void RendererMediaPlayerManager::DidCommitCompositorFrame() {
      std::map<int, gfx::RectF> geometry_change;
      RetrieveGeometryChanges(&geometry_change);
      for (std::map<int, gfx::RectF>::iterator it = geometry_change.begin();
           it != geometry_change.end();
           ++it) {
        Send(new MediaPlayerHostMsg_NotifyExternalSurface(
            routing_id(), it->first, false, it->second));
      }
    }
    

    调用这两个方法的地方比较多,不在跟踪

    相关文章

      网友评论

        本文标题:chromium media中video width &

        本文链接:https://www.haomeiwen.com/subject/ahibyxtx.html