Git Product home page Git Product logo

aomanalyzer's Introduction

Install & Build

npm install && npm run build-release

Development Setup

To build AOM Analyzer automatically whenever a file changes run:

npm run build-watch

Electron

You can run the analyzer using electron from the command line using:

electron . decoder1 video1 decoder2 video2 video3 ...

The decoder and video parameters can point either to a local file or a remote url. If you don't specify any arguments, the analyzer will prompt you to select jobs directly from AWCY.

If you've downloaded a standalone package of the analyzer, you can omit the electron . part and just run the binary directly from the command line.

Command Line Options

  • --zoomFactor sets the default zoom level, if you feel that the UI elements are too large, use 0.75 or 0.5.
  • --dev opens up electron dev tools by default.
  • --frames number of frames to decode, by default this is set to 4.
  • --split side by side comparison. This requires that you specify at least two videos to compare. The split view does not show any analyzer layers which makes decoding a bit faster.
    • 1: Left (first video)
    • 2: Right (second video)
    • 3: Vertical Split (first video on the left, second video on the right)
    • 4: Horizontal Split (first video on the top, second video on the bottom)

To build electron packages use:

  • npm run package-darwin
  • npm run package-linux
  • npm run package-win32

Toolbar

GitHub Logo

Video Tabs

The very top tabs let you toggle between videos. You can also use the number keys to toggle between videos.

Current Video Quick Info

The red bar provides quick info about the current frame.

Commands

  • Toggle Layers: Toggles a variety of layers on/off. To understand what the color values mean in each of the layers, you have to click on individual blocks and inspect their value in the Block Info tab.
  • Save Image: Save current image to a .png file.
  • Reset Analyzer: Resets the analyzer state to the first frame and clears all layers.
  • Previous Frame
  • Play / Pause
  • Next Frame
  • Zoom Out
  • Zoom In: Zooming in the entire video can slow things down quite a bit. Use the Zoom tab instead.
  • Decode 30 More Frames: Decode 30 more frames in a background thread. This may take a while but you should still be able to use the analyzer while that is happening.
  • Share: Creates a shortened URL to your analyzer state.

Tabs

  • Zoom: Click anywhere on the decoded image to zoom in on it.

  • Histograms:

    • Bits: Number of bits spent.
    • Symbols: % of bits spent on each symbol type.
    • Block Size: % of pixels within a block size.
    • Transform Size: % of pixels within a transform size.
    • Transform Type: % of pixels within a transform type.
    • Prediction Mode: % of pixels within a prediction mode.
    • Skip: % of pixels skipped.
  • Block Info: Per selected block information and accounting. (When you click on the decoded image, you'll see a orange rectangle that highlights the selected block.)

  • Frame Info: Per frame information and accounting.

Accounting

Both the Block Info and Frame Info tabs have an accounting section. Accounting information keeps track of the number of bits spent on each symbol in the bit stream. The accounting tables show the symbol name, the number of bits spent on that symbol within a block (or frame), the percentage relative to the total number of bits spent in the block (or frame) and the number or samples (or the number of symbols read.)

Building JavaScript Decoders

The analyzer uses a JavaScript decoder to decode video frames and extract information out of .ivf files. The decoder is compiled to JavaScript using the Emscripten compiler. To build your own decoder you'll first need to install Emscripten and then follow the directions in the AV1 Codec Library. This will produce a inspect.js file that you can use as a decoder in the analyzer.

URL Parameters

Decoders / Videos

Video decoder/file pairs are constructed from a sequence of decoder and file URL parameters. For example, the URL string decoder=A&file=X&file=Y&decoder=B&file=X will construct 3 pairs: A:X, A:Y and B:X.

Voting

  • blind: Whether to randomize the videos shown to the user.
  • vote: A comma separated string of video decoder/file pairs to vote on. For example, the string 0:1,1:2 indicates that there should be two votes, the first between A:X and A:Y, and the second between A:Y and B:X. The voting tool can also be used to vote on more than 2 videos at a time (the string 0:1:2:1,1:2 is also valid.)
  • voteDescription: A optional message to show on the first voting screen.
  • showVoteResult: Show the voting results on the last voting screen.

aomanalyzer's People

Contributors

barrbrain avatar jimbankoski avatar kdashg avatar mbebenita avatar nasirhemed avatar shssoichiro avatar tdaede avatar vibhoothi avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

aomanalyzer's Issues

build-release fails

Hi,

I'm trying to build the analyzer on a Mac. I've followed the instructions but get the following

ERROR in aomanalyzer/node_modules/@types/react/index.d.ts
(165,11): error TS2559: Type 'Component<P, S>' has no properties in common with type 'ComponentLifecycle<P, S>'.

ERROR in ./src/components/LocalAnalyzer.tsx
(176,17): error TS2345: Argument of type 'string' is not assignable to parameter of type 'T | PromiseLike<T>'.

Any idea how to fix this?

Problem with latest react-select package

Hello,

I just encountered a problem which I was able to determine was caused by a revision to the react-select component.

The uses the select component and what I found was that when I recently tried using the LocalAnalyzer I was shown a blank browser window after the 'Downloading AWCY Runs' dialog. I looked into the console log and saw that the problem was related to a Render call in the component.

I then looked at a repository I checked out in august of this year. There things worked. I compared the versions of the npm components and started rolling back each one.

It seems that [email protected] is the culprit in this case. When I rolled it back to rc.5 then the LocalAnalyzer started to work again.

Maybe the version # could be pegged to rc.5 until the bug with rc.10 is resolved.

Thank you,
Michael Uman

Insufficient Memory for HD Decode (1920x1080)

Hello,

I have encoded a new HD stream using AOMenc from raw YUV data. I can use AOMdec to decode the stream so I verified that the stream is decode-able. But when I try to use the stream in the Analyzer I get errors related to memory allocation.

I have added many debug messages to the code so I can trace where the problems are originating from. Here is the debug output from the section where the memory runs out:

decoder.readFrame()
Using AOMedia Project AV1 Decoder v0.1.0-6172-g3a29fdc
Worker: setLayers
Worker: readFrame
worker readFrame()
Cannot enlarge memory arrays. Either (1) compile with  -s TOTAL_MEMORY=X  with X higher than the current value 134217728, (2) compile with  -s ALLOW_MEMORY_GROWTH=1  which allows increasing the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or (4) if you want malloc to return NULL (0) instead of this abort, compile with  -s ABORTING_MALLOC=0 
Cannot enlarge memory arrays. Either (1) compile with  -s TOTAL_MEMORY=X  with X higher than the current value 134217728, (2) compile with  -s ALLOW_MEMORY_GROWTH=1  which allows increasing the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or (4) if you want malloc to return NULL (0) instead of this abort, compile with  -s ABORTING_MALLOC=0 
Worker: readFrame
worker readFrame()
Failed to decode frame.: Corrupt frame detected
    Invalid frame size

I found a solution which requires rebuilding the 'inspect.js' component. I modified the 'build_inspection.sh" script which actually makes the JS component with Emscripten. What I did was double the -s TOTAL_MEMORY=268435456 and added the -s ALLOW_MEMORY_GROWTH=1.

When I do this then I am able to decode the HD 1920x1080 stream.

What we are really trying to do here is support the AVS2 decoder which supports the 4kx2k UHD resolution. But I am bumping up against memory limitations at that size.

I would be interested in knowing if anyone has succeeded in loading a UHD 4k image into the AOMAnalyzer.

Thank you,
Michael Uman
Sr. Software Engineer
Sigma Designs, Inc.

Broken URLs generated by the arewecompressedyet.com/analyzer landing page

Hi folks. There seems to be a "prefix" URL parameter that the web app is misusing. This causes users to visit a non-working or mis-formed URL of the webapp, which in turn causes the demo to error out and not to function.

Steps to reproduce:

  1. Visit https://arewecompressedyet.com/analyzer/
  2. Select any Run, Video and QP combination from the dropdown selection interfaces.
    2.1 (If you don't select a value for all three fields, the OPEN button will be insensitive/grayed out and non-functional, but a URL shown below can be copy-pasted instead.)
  3. Press the OPEN button below.
  4. Observe that the demo that the webapp has opened does not work.
    4.1 Generated URL example: https://arewecompressedyet.com/analyzer/?maxFrames=4&p=https://arewecompressedyet.com/runs/av1-10-11-2019-sp5@2019-10-11T18:33:02.178Z/&d=js/decoder.js&f=objective-1-fast/Netflix_Boat_1920x1080_60fps_8bit_420_60f.y4m-20.ivf
    4.2 Error message example: "Loading Decoders Failed: Cannot load decoder, check url: https://arewecompressedyet.com/runs/av1-10-11-2019-sp5@2019-10-11T18:33:02.178Z/js/decoder.js"

Background:

I observe that the generated URL contains a p=[SOME_PATH_HERE] parameter, which I interpret to be taken as a "prefix" for other paths. Thus the webapp takes the value f=[SOME_VIDEO_FILE_HERE] and prepends the value from p=[SOME_PATH_HERE], yielding a final "video file with path: `https://arewecompressedyet.com/runs/av1-10-11-2019-sp5@2019-10-11T18:33:02.178Z/objective-1-fast/Netflix_Boat_1920x1080_60fps_8bit_420_60f.y4m-20.ivf"

Problem:

The webapp also prepends the prefix from p= to the d=[DECODER_FILE_HERE] parameter. Example final "decoder file with path: "https://arewecompressedyet.com/runs/av1-10-11-2019-sp5@2019-10-11T18:33:02.178Z/js/decoder.js" (This is an erroneous path/file that leads to a 404.)

I assume there are generally no AV1 decoders bundled where the AWCY runs are stored, in the runs' respective directories. So the "decoder" parameter should not use the directories used to store AWCY runs as a prefix for the decoder location.

Suggested solution 1

Change the way URLs are generated by the web app. Particularly, not using the p= URL parameter seems easiest. (This implies full paths be given for the f=[SOME_VIDEO_FILE_HERE] and d=[SOME_VIDEO_FILE_HERE] parameters).

OR

Suggested solution 2

Change the way URLs are consumed by the web app. Particularly, not taking the value of p= as a prefix for the decoder parameter d=. (Implies adjusting URL generation to include a full path for the d= parameter, or else this issue would effectively not be fixed.) (Maybe some UI in the URL generation phase for a custom decoder URL/location would be nice?)

OR

Suggested solution 3

Ensure valid decoders are bundled (included in the same folder) with AWCY runs. This would solve the "decoder not found" error, by providing a working decoder at the location the web app currently looks for one.

Build inspect.js failed on MAC OSX

I tried to build inspect.js on MAC, it failed as follows,

Traceback (most recent call last):
  File "/Users/xiaolins/Work/AOM/emsdk-portable/emscripten/1.37.22/em++", line 16, in <module>
    emcc.run()
  File "/Users/xiaolins/Work/AOM/emsdk-portable/emscripten/1.37.22/emcc.py", line 1443, in run
    final = shared.Building.link(linker_inputs, DEFAULT_FINAL, force_archive_contents=force_archive_contents, temp_files=misc_temp_files, just_calculate=just_calculate)
  File "/Users/xiaolins/Work/AOM/emsdk-portable/emscripten/1.37.22/tools/shared.py", line 1772, in link
    Building.read_link_inputs(filter(lambda x: not x.startswith('-'), files))
  File "/Users/xiaolins/Work/AOM/emsdk-portable/emscripten/1.37.22/tools/shared.py", line 1698, in read_link_inputs
    raise Exception('llvm-ar failed on archive ' + archive_names[n] + '!')
Exception: llvm-ar failed on archive /Users/xiaolins/Work/AOM/aom/buildanalyzer/libinspect_1_inspect-post_js.a!
make[3]: *** [examples/inspect.js] Error 1
make[2]: *** [CMakeFiles/inspect.dir/all] Error 2
make[1]: *** [CMakeFiles/inspect.dir/rule] Error 2
make: *** [inspect] Error 2

Move to xiph org

Could you move this repo to the xiph org? I'd like to take over maintainership.

Display modern CfL parameters for AV1

Quite some time ago the parameter design for CfL changed. We should update the parsing accrodingly. Also, on the overlay it should be shown for uv_mode=CFL not uv_mode=DC.

electron install failed via command "npm run package-darwin"

[email protected] package-darwin /Users/edward.shi/project/AOM/aomanalyzer
electron-packager . --platform=darwin --arch=x64 --electron-version=1.4.16 --overwrite --icon=vomit.icns --out=release_builds --tmpdir=./

Packaging app for platform darwin x64 using electron v1.4.16
ENAMETOOLONG: name too long, unlink '/Users/edward.shi/project/AOM/aomanalyzer/electron-packager/darwin-x64/AOMAnalyzer-darwin-x64/Electron.app/Contents/Resources/app/electron-packager/darwin-x64/AOMAnalyzer-darwin-x64/Electron.app/Contents/Resources/app/electron-packager/darwin-x64/AOMAnalyzer-darwin-x64/Electron.app/Contents/Resources/app/electron-packager/darwin-x64/AOMAnalyzer-darwin-x64/Electron.app/Contents/Resources/app/electron-packager/darwin-x64/AOMAnalyzer-darwin-x64/Electron.app/Contents/Resources/app/electron-packager/darwin-x64/AOMAnalyzer-darwin-x64/Electron.app/Contents/Resources/app/electron-packager/darwin-x64/AOMAnalyzer-darwin-x64/Electron.app/Contents/Resources/app/electron-packager/darwin-x64/AOMAnalyzer-darwin-x64/Electron.app/Contents/Resources/app/electron-packager/darwin-x64/AOMAnalyzer-darwin-x64/Electron.app/Contents/Resources/app/electron-packager/darwin-x64/AOMAnalyzer-darwin-x64/Electron.app/Contents/Resources/app/node_modules/ts-loader/examples/react-babel-karma-gulp-thread-loader/test/components/Greeting.tests.tsx'
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] package-darwin: electron-packager . --platform=darwin --arch=x64 --electron-version=1.4.16 --overwrite --icon=vomit.icns --out=release_builds --tmpdir=./
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] package-darwin script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR! /Users/edward.shi/.npm/_logs/2018-02-08T10_40_24_563Z-debug.log

Failed in building : ERROR in ./src/worker.ts

Hi,
Started with Av1 recently and wanted to build the aomanalyzer for the same.

I am getting below error while building aomanalyzer
[478] ./src/worker.ts 7.86 kB {1} [built] [1 error]
+ 466 hidden modules

ERROR in ./src/worker.ts
(2,13): error TS2403: Subsequent variable declarations must have the same type. Variable 'TextDecoder' must be of type '{ new (label?: string, options?: TextDecoderOptions): TextDecoder; prototype: TextDecoder; }', but here has type 'any'.
npm ERR! code ELIFECYCLE

My build set-up details :-
[email protected]_64bit
[email protected]
[email protected]
[email protected]

2018-03-30T15_43_24_506Z-debug.log

Please share some pointers
Regards
Pallab Sarkar

VP9 Support

Does this support VP9? Here - https://people.xiph.org/~mbebenita/analyzer/- it suggests that VP9 is supported. I have not been able to find a JS decoder for VP9. The awcy runs have JS decoder only for AV1 runs. Even the codecs build script on awcy, builds only av1 inspect.js. And libvpx does not have any of accounting and inspect code.

Emscripton build fails with both Ubuntu and Mac OS to generate inspect.js

Maybe I should file an issue at aomedia side but posting here to get helps!
On Ubuntu 18.04, I am running:
cmake ../aom -DCACHE_ENABLE=1 -DAOM_TARGET_CPU=generic -DENABLE_DOCS=0 -DENABLE_TESTS=0 -DCONFIG_ACCOUNTING=1 -DCONFIG_INSPECTION=1 -DCONFIG_MULTITHREAD=0 -DCONFIG_RUNTIME_CPU_DETECT=0 -DCONFIG_WEBM_IO=0 -DCMAKE_TOOLCHAIN_FILE=~/workspace/emsdk/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake

(from the direction here: https://aomedia.googlesource.com/aom/+/master/README.md#emscripten-builds)

And getting this error from Ubuntu 18.04 (similar error for MS OS as well, https://www.irccloud.com/pastebin/fHUt0Yls/ )

  • I am using, cmake 3.15, fresh instralled emsdk.

yushin@jurassic:~/workspace/aom_build$ cat /home/yushin/workspace/aom_build/CMakeFiles/CMakeError.log
Performing C SOURCE FILE Test C_TEST_COMPILED failed with the following output:
Change Dir: /home/yushin/workspace/aom_build/CMakeFiles/CMakeTmp

Run Build Command(s):/usr/bin/make cmTC_0ba6b/fast && /usr/bin/make -f CMakeFiles/cmTC_0ba6b.dir/build.make CMakeFiles/cmTC_0ba6b.dir/build
make[1]: Entering directory '/home/yushin/workspace/aom_build/CMakeFiles/CMakeTmp'
Building C object CMakeFiles/cmTC_0ba6b.dir/src.c.o
/home/yushin/workspace/emsdk/upstream/emscripten/emcc -DC_TEST_COMPILED -o CMakeFiles/cmTC_0ba6b.dir/src.c.o -c /home/yushin/workspace/aom_build/CMakeFiles/CMakeTmp/src.c
/home/yushin/workspace/aom_build/CMakeFiles/CMakeTmp/src.c:5:33: error: implicit declaration of function 'feenableexcept' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
(void)feenableexcept(FE_DIVBYZERO | FE_INVALID);

^
/home/yushin/workspace/aom_build/CMakeFiles/CMakeTmp/src.c:5:33: note: did you mean 'feraiseexcept'?
/home/yushin/workspace/emsdk/upstream/emscripten/system/include/libc/fenv.h:12:5: note: 'feraiseexcept' declared here
int feraiseexcept(int);
^
/home/yushin/workspace/aom_build/CMakeFiles/CMakeTmp/src.c:5:48: error: use of undeclared identifier 'FE_DIVBYZERO'
(void)feenableexcept(FE_DIVBYZERO | FE_INVALID);
^
/home/yushin/workspace/aom_build/CMakeFiles/CMakeTmp/src.c:5:63: error: use of undeclared identifier 'FE_INVALID'
(void)feenableexcept(FE_DIVBYZERO | FE_INVALID);
^
3 errors generated.
emcc: error: '/home/yushin/workspace/emsdk/upstream/bin/clang -target wasm32-unknown-emscripten -D__EMSCRIPTEN_major__=1 -D__EMSCRIPTEN_minor__=39 -D__EMSCRIPTEN_tiny__=16 -D_LIBCPP_ABI_VERSION=2 -Dunix -D__unix -D__unix__ -Werror=implicit-function-declaration -Xclang -nostdsysteminc -Xclang -isystem/home/yushin/workspace/emsdk/upstream/emscripten/system/include/compat -Xclang -isystem/home/yushin/workspace/emsdk/upstream/emscripten/system/include -Xclang -isystem/home/yushin/workspace/emsdk/upstream/emscripten/system/include/libc -Xclang -isystem/home/yushin/workspace/emsdk/upstream/emscripten/system/lib/libc/musl/arch/emscripten -Xclang -isystem/home/yushin/workspace/emsdk/upstream/emscripten/system/local/include -Xclang -isystem/home/yushin/workspace/emsdk/upstream/emscripten/cache/wasm/include -DEMSCRIPTEN -fignore-exceptions -DC_TEST_COMPILED -c /home/yushin/workspace/aom_build/CMakeFiles/CMakeTmp/src.c -Xclang -isystem/home/yushin/workspace/emsdk/upstream/emscripten/system/include/SDL -c -o CMakeFiles/cmTC_0ba6b.dir/src.c.o -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr' failed (1)
CMakeFiles/cmTC_0ba6b.dir/build.make:65: recipe for target 'CMakeFiles/cmTC_0ba6b.dir/src.c.o' failed
make[1]: *** [CMakeFiles/cmTC_0ba6b.dir/src.c.o] Error 1
make[1]: Leaving directory '/home/yushin/workspace/aom_build/CMakeFiles/CMakeTmp'
Makefile:121: recipe for target 'cmTC_0ba6b/fast' failed
make: *** [cmTC_0ba6b/fast] Error 2

Source file was:
#define _GNU_SOURCE
#include <fenv.h>
void unused(void) {
(void)unused;
(void)feenableexcept(FE_DIVBYZERO | FE_INVALID);
}
int main(void) { return 0; }
Performing C SOURCE FILE Test C_FLAG_SUPPORTED failed with the following output:
Change Dir: /home/yushin/workspace/aom_build/CMakeFiles/CMakeTmp

Suggested patch to clean-up unused & duplicates

Hello,

I appreciate the speedy and efficient responses to the communities suggestions. Let me say I am very impressed with this project. Only last year I would not have imagined a video analyzer written in JavaScript. But my opinion of NodeJS and Electron has speedily changed.

I have been working with this analyzer for a couple of months now and am pretty familiar with it and have made a branch where we are developing AVS2 analysis using this projects framework (Emscripten to compile the reference decoder providing the JSON in the callback).

In the process I have discovered only a couple of issues which should be patched in the original project.

I will post the patch and attach it to this message if anyone would like to review the changes. Two unused variables and duplication of 'noImplicitAny' and 'sourceMap' in the tsconfig.json...

diff --git a/index.js b/index.js
index a834529..540199c 100644
--- a/index.js
+++ b/index.js
@@ -48,7 +48,6 @@ function createWindow() {
     return "file://" + path.resolve(x);
   }
   var mainScreen = require('electron').screen.getPrimaryDisplay();
-  var dimensions = mainScreen.size;
   var width = 1366;
   var height = 768;
 
@@ -61,6 +60,7 @@ function createWindow() {
   //   3% = 1024x768
   // 4.4% < 1024x768
 
+  // var dimensions = mainScreen.size;
   // if (dimensions.width >= 1680 && dimensions.height >= 1050) {
   //   width = 1366;
   //   height = 768;
diff --git a/src/components/analyzerTools.ts b/src/components/analyzerTools.ts
index 5e8b8a0..ffed141 100644
--- a/src/components/analyzerTools.ts
+++ b/src/components/analyzerTools.ts
@@ -662,7 +662,7 @@ export class Decoder {
   worker: Worker;
   workerCallbacks = [];
   workerInfo: any = {};
-  decoder: string;
+//decoder: string;
   buffer: Uint8Array;
   frames: AnalyzerFrame[] = [];
   frameRate: number = 30;
diff --git a/tsconfig.json b/tsconfig.json
index 657c761..13bbb13 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -2,14 +2,12 @@
     "compilerOptions": {
         "outDir": "./dist/",
         "sourceMap": true,
-        "noImplicitAny": true,
+        "noImplicitAny": false,
         "module": "commonjs",
         "target": "es5",
         "jsx": "react",
         "baseUrl": "src",
         "moduleResolution": "node",
-        "noImplicitAny": false,
-        "sourceMap": true,
         "allowSyntheticDefaultImports": true,
 	    "lib": ["dom", "es6"]
     },

Once again a big thank you to all involved in this project. I would love to contribute more if I could. I'm still coming up to speed on some of the JS technology (I've mostly been a C/C++ and assembly guy)...

Thank you,
Michael Uman

aomanalyzer-patch-171020.txt

Emscripton build error on Mac OS

Ran the command: (as directed by https://aomedia.googlesource.com/aom/#emscripten-builds)
cmake ../aom -DENABLE_CCACHE=1 -DENABLE_DOCS=0 -DENABLE_TESTS=0 -DAOM_TARGET_CPU=generic -DCONFIG_ACCOUNTING=1 -DCONFIG_INSPECTION=1 -DCONFIG_MULTITHREAD=0 -DCONFIG_RUNTIME_CPU_DETECT=0 -DCONFIG_WEBM_IO=0 -DCMAKE_TOOLCHAIN_FILE=/Users/yushin/workspace/emsdk/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake

Then,
....
-- Configuring incomplete, errors occurred!
See also "/Users/yushin/workspace/aom_build/CMakeFiles/CMakeOutput.log".
See also "/Users/yushin/workspace/aom_build/CMakeFiles/CMakeError.log".

lassen:aom_build yushin$ cat /Users/yushin/workspace/aom_build/CMakeFiles/CMakeError.log
Performing C SOURCE FILE Test C_TEST_COMPILED failed with the following output:
Change Dir: /Users/yushin/workspace/aom_build/CMakeFiles/CMakeTmp

Run Build Command:"/opt/local/bin/gmake" "cmTC_626b8/fast"
/opt/local/bin/gmake -f CMakeFiles/cmTC_626b8.dir/build.make CMakeFiles/cmTC_626b8.dir/build
gmake[1]: Entering directory '/Users/yushin/workspace/aom_build/CMakeFiles/CMakeTmp'
Building C object CMakeFiles/cmTC_626b8.dir/src.c.o
/Users/yushin/workspace/emsdk/upstream/emscripten/emcc -DC_TEST_COMPILED -o CMakeFiles/cmTC_626b8.dir/src.c.o -c /Users/yushin/workspace/aom_build/CMakeFiles/CMakeTmp/src.c
/Users/yushin/workspace/aom_build/CMakeFiles/CMakeTmp/src.c:5:33: error: implicit declaration of function 'feenableexcept' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
(void)feenableexcept(FE_DIVBYZERO | FE_INVALID);

^
/Users/yushin/workspace/aom_build/CMakeFiles/CMakeTmp/src.c:5:33: note: did you mean 'feraiseexcept'?
/Users/yushin/workspace/emsdk/upstream/emscripten/system/include/libc/fenv.h:12:5: note: 'feraiseexcept' declared here
int feraiseexcept(int);
^
/Users/yushin/workspace/aom_build/CMakeFiles/CMakeTmp/src.c:5:48: error: use of undeclared identifier 'FE_DIVBYZERO'
(void)feenableexcept(FE_DIVBYZERO | FE_INVALID);
^
/Users/yushin/workspace/aom_build/CMakeFiles/CMakeTmp/src.c:5:63: error: use of undeclared identifier 'FE_INVALID'
(void)feenableexcept(FE_DIVBYZERO | FE_INVALID);
^
3 errors generated.
emcc: error: '/Users/yushin/workspace/emsdk/upstream/bin/clang -target wasm32-unknown-emscripten -D__EMSCRIPTEN_major__=1 -D__EMSCRIPTEN_minor__=39 -D__EMSCRIPTEN_tiny__=16 -D_LIBCPP_ABI_VERSION=2 -Dunix -D__unix -D__unix__ -Werror=implicit-function-declaration -Xclang -nostdsysteminc -Xclang -isystem/Users/yushin/workspace/emsdk/upstream/emscripten/system/include/compat -Xclang -isystem/Users/yushin/workspace/emsdk/upstream/emscripten/system/include -Xclang -isystem/Users/yushin/workspace/emsdk/upstream/emscripten/system/include/libc -Xclang -isystem/Users/yushin/workspace/emsdk/upstream/emscripten/system/lib/libc/musl/arch/emscripten -Xclang -isystem/Users/yushin/workspace/emsdk/upstream/emscripten/system/local/include -Xclang -isystem/Users/yushin/workspace/emsdk/upstream/emscripten/cache/wasm/include -DEMSCRIPTEN -fignore-exceptions -DC_TEST_COMPILED -c /Users/yushin/workspace/aom_build/CMakeFiles/CMakeTmp/src.c -Xclang -isystem/Users/yushin/workspace/emsdk/upstream/emscripten/system/include/SDL -c -o CMakeFiles/cmTC_626b8.dir/src.c.o -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr' failed (1)
gmake[1]: *** [CMakeFiles/cmTC_626b8.dir/build.make:66: CMakeFiles/cmTC_626b8.dir/src.c.o] Error 1
gmake[1]: Leaving directory '/Users/yushin/workspace/aom_build/CMakeFiles/CMakeTmp'
gmake: *** [Makefile:121: cmTC_626b8/fast] Error 2

Source file was:
#define _GNU_SOURCE
#include <fenv.h>
void unused(void) {
(void)unused;
(void)feenableexcept(FE_DIVBYZERO | FE_INVALID);
}
int main(void) { return 0; }
Performing C SOURCE FILE Test C_FLAG_SUPPORTED failed with the following output:
Change Dir: /Users/yushin/workspace/aom_build/CMakeFiles/CMakeTmp

Color anomaly on CFL image

Make uv_mode overlay aware of sub-8x8

For sub-8x8 blocks, uv parameters are not coded on every block but shared between neighbors.
The non-coded blocks are not DC_PRED but rather N/A.

should be able to analyze non showable frames

Pyramid coding involves a lot of non showable frames in AV1. The decoder doesn't produce an output frame for non showable frames and thus there's no way to analyze them as it stands right now.

We should be able to fix this for the analyzer using get_reference.

AOMAnalyzer doesn't work with the latest version of AOM

I build a correct JS decoder with the latest version of AOM. It build it, but it doesn't work either on windows and Linux.
I build the decoder with emscripten version 1.36.13 (recent version of emscripten compiles a decoder version that doesn't work with AOMAnlyser).
Here it what the Analyzer gives me:
aomanalyzerbug

Tip for building inspect.js and inspect.wasm

From my triage on Mac OS (10.14.4, Mojave) and Uuntu 18.04, there two tips were required to successfully build inspect.js and inspect.wasm with Emscripton, based on the guides at https://aomedia.googlesource.com/aom/#emscripten-builds.

  1. Configure the build with cmake,
    only av1-normativ branch worked, and the mater branch failed with cmake.
    (To see which parts failed, please checkout #78 and #79)

(FYI, I've run: "cmake ../aom -DENABLE_CCACHE=1 -DENABLE_DOCS=0 -DENABLE_TESTS=0 -DAOM_TARGET_CPU=generic -DCONFIG_ACCOUNTING=1 -DCONFIG_INSPECTION=1 -DCONFIG_MULTITHREAD=0 -DCONFIG_RUNTIME_CPU_DETECT=0 -DCONFIG_WEBM_IO=0 -DCMAKE_TOOLCHAIN_FILE=/Users/yushin/workspace/emsdk/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake && make -j12 inspect")

  1. Before doing "make inspect", I needed below change to remove the build error.
    i.e. "-std=c99" --> "-std=gnu99" in [aom directorory]/build/cmake/aom_configure.cmake

$ git diff
diff --git a/build/cmake/aom_configure.cmake b/build/cmake/aom_configure.cmake
index 2b59c61a9..ec34cf9b0 100644
--- a/build/cmake/aom_configure.cmake
+++ b/build/cmake/aom_configure.cmake
@@ -259,7 +259,7 @@ if(MSVC)
add_compiler_flag_if_supported("/WX")
endif()
else()

  • require_c_flag("-std=c99" YES)
  • require_c_flag("-std=gnu99" YES)
    add_compiler_flag_if_supported("-Wall")
    add_compiler_flag_if_supported("-Wdisabled-optimization")
    add_compiler_flag_if_supported("-Wextra")

I hope this helps saving your time building aom analyzer!

Export to .y4m

Within the electron environment at least, we should be able decode to .y4m and save the file locally. We can probably just compile some C code that does that.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.