New issue
Advanced search Search tips
Note: Color blocks (like or ) mean that a user may not be available. Tooltip shows the reason.

Issue 875773 link

Starred by 1 user

Issue metadata

Status: Fixed
Owner:
Last visit > 30 days ago
Closed: Sep 17
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: Chrome
Pri: 3
Type: Bug

Blocking:
issue 887091



Sign in to add a comment

Software decoder fails re-initialization when trying to play VP9.2 on kevin

Project Member Reported by keiichiw@chromium.org, Aug 20

Issue description

Chrome Version: 70.0.3519.0
OS: ChromeOS
Device: kevin, veyron_jerry

What steps will reproduce the problem?
(1) Go to http://crosvideo.appspot.com/
(2) Choose "VP9 Profile 2 10 bit" and play.

What is the expected result?
Video is played.

What happens instead?
Nothing is displayed.

In /var/log/chrome/chrome, I found the message like:
[...ERROR:render_media_log.cc(30)] MediaEvent: MEDIA_ERROR_LOG_ENTRY {"error":"video decoder reinitialization failed"}

This error comes from here: 
https://cs.chromium.org/chromium/src/media/filters/decoder_stream.cc?l=334&rcl=5334ca5d01e6d5a6757e63ca017fb1097e948d17

Since kevin and veyron_jerry don't support HW decoding for VP9 profile 2 videos, SW decoder should be used.
It seems that re-initialization of SW decoder was failed.
 
Cc: posciak@chromium.org
Owner: dalecur...@chromium.org
dalecurtis@, could you please assign this issue to someone in codec team?
Owner: sande...@chromium.org
Status: Assigned (was: Untriaged)
Hmm we have software fallback for error cases. I'm not sure why this case didn't fall back properly. Dan you're looking at this code, can you see what's going wrong?
keiichiw@ can you provide the full chrome://media-internals log?
Here is the log on kevin:
https://paste.googleplex.com/5952367983853568
Cc: jzern@chromium.org fgalligan@chromium.org
Thanks relevant logs are:

      {
        "time": 551.038999999997,
        "key": "info",
        "value": "Selected VpxVideoDecoder for video decoding, config: codec: vp9 format: 1 profile: vp9 profile2 coded size: [1280,768] visible rect: [0,0,1280,768] natural size: [1456,768] has extra data? true encryption scheme: Unencrypted rotation: 0°"
      },
      {
        "time": 551.0800000000017,
        "key": "pipeline_state",
        "value": "kPlaying"
      },
      {
        "time": 518.2790000000023,
        "key": "duration",
        "value": 10
      },
      {
        "time": 2898.3470000000016,
        "key": "error",
        "value": "video decoder reinitialization failed"
      },
      {
        "time": 2900.091999999997,
        "key": "pipeline_error",
        "value": "PIPELINE_ERROR_DECODE"
      },

Oh wait, is this an ARM chromebook? I don't think we have VP9.2 on ARM?
Yes, kevin is an ARM Chrome book whose hardware decoder doesn't support VP9.2. But, I think VP9.2 videos should be played by using software decoder there.

AFAIK, when a codec is not supported by hardware decoders, a software decoder should be used. It seems that this error happened at the time of the software decoder's re-initialization.

I thought the software decoders on Chrome supports VP9.2, so VP9.2 should be played even on ARM devices.

Oh, software decoder also doesn't support VP9.2 on ARM devices. I misunderstood. Thanks.

I found a WebM's issue "Enable CONFIG_VP9_HIGHBITDEPTH on arm", which is recently closed with "WontFix".
https://bugs.chromium.org/p/webm/issues/detail?id=1544
They measured the performance on Samsung Galaxy S8+ and decided not to enable it for now.
But, how about ChromeBook? Is it reasonable to consider if we can enable it on ARM ChromeBook? 

Or, does libvpx use the same setting both on ARM android and ARM ChromeBook?
So https://bugs.chromium.org/p/webm/issues/detail?id=1544

is for the encoder, which I think is the current correct conclusion.

We have shipped VP9.2 for software on some high end devices arm devices. 

We could probably do the same for Arm chromebooks with the media capabilities api. Dale what do you think?
sgtm and all the folks who might object are on the thread :)

When you say it's enabled for high the arm, do you mean in chrome for Android?
I mean it was enabled in YT player for high end arm devices. Not Chrome for Android.
What disadvantages are there to enabling vp9.2 for arm? I.e. binary size, perf hit on 8bit content?
Yes, binary size will go up. Perf hit on 8bit was minor. But I don't have the numbers in front of me. 

I just wanted to get your thoughts on feasibility. Since it looks like it is plausible, we should probably setup a meeting to figure out who will come up with the documents needed for potentially turning this feature on in Chrome.
For arm chromebooks it's probably fine to just flip it. If we want to do so for Android I'll need to know the exact binary size hit.
Owner: johannko...@google.com
johannkoenig@ do we have a recent binary size for Android?
Cc: jianj@chromium.org
+jianj@ who ran the webrtc performance numbers
Re comment #9 and the encoder performance hit: we can not enable highbd only for decode. It's all or nothing.

We could add a chromebook-specific set of configs with highbd. Probably best to leave android and ios alone.

If you want that it'd take me less than a day to do.

For sizes, if you give me a chrome gn config and build target I can run the size numbers.
To build chorme for ChromeOS, you can follow the way in go/simplechrome.
If you have any question, please ask here, or me/keiichiw@ offline.

Thank you.
I meant for the android size comparisons. If I know which binaries to build/check, I can get size numbers. There was a lot of confusion when I last tried to do this for desktop chrome.
You can use "kevin" or "arm-generic" as a representative of ChromeOS ARM devices.
You can get gn config by executing gn gen out_$SDK_BOARD/Release --args="$GN_ARGS && gn args" in "cros chrome-sdk" chroot.
dalecurtis@ said in comment #14 that the size difference for chromeos was not important. I was looking for help getting size information for Android.
Project Member

Comment 21 by bugdroid1@chromium.org, Sep 14

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/c1dfa349b6b48cf172c07ee8c73b27c572377d38

commit c1dfa349b6b48cf172c07ee8c73b27c572377d38
Author: Johann <johann.koenig@duck.com>
Date: Fri Sep 14 21:34:29 2018

libvpx: support vp9.2 on chromeos arm

Fork the arm builds so we can enable vp9 profile 2 (high bit depth) on
chromeos devices without affecting other arm devices.

BUG= chromium:875773 

Change-Id: I23a9c2875a8585e2fd4e45ecc2a0e8b3ab317585
Reviewed-on: https://chromium-review.googlesource.com/1227217
Reviewed-by: Dale Curtis <dalecurtis@chromium.org>
Commit-Queue: Johann Koenig <johannkoenig@google.com>
Cr-Commit-Position: refs/heads/master@{#591481}
[modify] https://crrev.com/c1dfa349b6b48cf172c07ee8c73b27c572377d38/third_party/libvpx/BUILD.gn
[modify] https://crrev.com/c1dfa349b6b48cf172c07ee8c73b27c572377d38/third_party/libvpx/generate_gni.sh
[modify] https://crrev.com/c1dfa349b6b48cf172c07ee8c73b27c572377d38/third_party/libvpx/libvpx_srcs.gni
[add] https://crrev.com/c1dfa349b6b48cf172c07ee8c73b27c572377d38/third_party/libvpx/source/config/linux/chromeos-arm-neon/vp8_rtcd.h
[add] https://crrev.com/c1dfa349b6b48cf172c07ee8c73b27c572377d38/third_party/libvpx/source/config/linux/chromeos-arm-neon/vp9_rtcd.h
[add] https://crrev.com/c1dfa349b6b48cf172c07ee8c73b27c572377d38/third_party/libvpx/source/config/linux/chromeos-arm-neon/vpx_config.asm
[add] https://crrev.com/c1dfa349b6b48cf172c07ee8c73b27c572377d38/third_party/libvpx/source/config/linux/chromeos-arm-neon/vpx_config.c
[add] https://crrev.com/c1dfa349b6b48cf172c07ee8c73b27c572377d38/third_party/libvpx/source/config/linux/chromeos-arm-neon/vpx_config.h
[add] https://crrev.com/c1dfa349b6b48cf172c07ee8c73b27c572377d38/third_party/libvpx/source/config/linux/chromeos-arm-neon/vpx_dsp_rtcd.h
[add] https://crrev.com/c1dfa349b6b48cf172c07ee8c73b27c572377d38/third_party/libvpx/source/config/linux/chromeos-arm-neon/vpx_scale_rtcd.h
[add] https://crrev.com/c1dfa349b6b48cf172c07ee8c73b27c572377d38/third_party/libvpx/source/config/linux/chromeos-arm64/vp8_rtcd.h
[add] https://crrev.com/c1dfa349b6b48cf172c07ee8c73b27c572377d38/third_party/libvpx/source/config/linux/chromeos-arm64/vp9_rtcd.h
[add] https://crrev.com/c1dfa349b6b48cf172c07ee8c73b27c572377d38/third_party/libvpx/source/config/linux/chromeos-arm64/vpx_config.asm
[add] https://crrev.com/c1dfa349b6b48cf172c07ee8c73b27c572377d38/third_party/libvpx/source/config/linux/chromeos-arm64/vpx_config.c
[add] https://crrev.com/c1dfa349b6b48cf172c07ee8c73b27c572377d38/third_party/libvpx/source/config/linux/chromeos-arm64/vpx_config.h
[add] https://crrev.com/c1dfa349b6b48cf172c07ee8c73b27c572377d38/third_party/libvpx/source/config/linux/chromeos-arm64/vpx_dsp_rtcd.h
[add] https://crrev.com/c1dfa349b6b48cf172c07ee8c73b27c572377d38/third_party/libvpx/source/config/linux/chromeos-arm64/vpx_scale_rtcd.h

Cc: johannko...@google.com
Owner: dalecur...@chromium.org
I think my part of this is done. Let me know if there is anything else you need on the libvpx side.
Owner: johannkoenig@chromium.org
Status: Fixed (was: Assigned)
Should just work automatically now. So I think it's fixed.
Blocking: 887091

Sign in to add a comment