Attachment #496258: Patch v2 3/3: Handle multiple frames per chunk per packet in WebM playback statistics. for bug #580531

View | Details | Raw Unified | Return to bug 580531
Collapse All | Expand All

(-)a/content/media/webm/nsWebMReader.cpp (-3 / +3 lines)
Line     Link Here 
 Lines 612-631   PRBool nsWebMReader::DecodeVideoFrame(PR Link Here 
612
    if (r == -1) {
612
    if (r == -1) {
613
      return PR_FALSE;
613
      return PR_FALSE;
614
    }
614
    }
615
615
616
    vpx_codec_stream_info_t si;
616
    vpx_codec_stream_info_t si;
617
    memset(&si, 0, sizeof(si));
617
    memset(&si, 0, sizeof(si));
618
    si.sz = sizeof(si);
618
    si.sz = sizeof(si);
619
    vpx_codec_peek_stream_info(&vpx_codec_vp8_dx_algo, data, length, &si);
619
    vpx_codec_peek_stream_info(&vpx_codec_vp8_dx_algo, data, length, &si);
620
    if ((aKeyframeSkip && !si.is_kf) || (aKeyframeSkip && si.is_kf && tstamp_ms < aTimeThreshold)) {
620
    if (aKeyframeSkip && (!si.is_kf || tstamp_ms < aTimeThreshold)) {
621
      aKeyframeSkip = PR_TRUE;
621
      // Skipping to next keyframe...
622
      aParsed++; // Assume 1 frame per chunk.
622
      aParsed++; // Assume 1 frame per chunk.
623
      break;
623
      continue;
624
    }
624
    }
625
625
626
    if (aKeyframeSkip && si.is_kf) {
626
    if (aKeyframeSkip && si.is_kf) {
627
      aKeyframeSkip = PR_FALSE;
627
      aKeyframeSkip = PR_FALSE;
628
    }
628
    }
629
629
630
    if (vpx_codec_decode(&mVP8, data, length, NULL, 0)) {
630
    if (vpx_codec_decode(&mVP8, data, length, NULL, 0)) {
631
      return PR_FALSE;
631
      return PR_FALSE;

Return to bug 580531