Skip to content

Commit eeb5b1b

Browse files
authored
Merge pull request #100 from BrenekH/develop
Hardware encoding (#99)
2 parents 1f054ed + 09dc070 commit eeb5b1b

20 files changed

+183
-30
lines changed

Diff for: controller/controller/libraries.go

+9-2
Original file line numberDiff line numberDiff line change
@@ -136,19 +136,26 @@ func updateLibraryQueue(l libraries.Library, wg *sync.WaitGroup, completeMap *ma
136136
continue
137137
}
138138

139+
var ffmpegCodec string
140+
if l.Pipeline.UseHardware {
141+
ffmpegCodec = l.Pipeline.HardwareCodec
142+
} else {
143+
ffmpegCodec = mapTargetCodecToFFmpegParameter(l.Pipeline.TargetVideoCodec)
144+
}
145+
139146
u := uuid.New()
140147
job := dispatched.Job{
141148
UUID: u.String(),
142149
Path: videoFilepath,
143150
Parameters: dispatched.JobParameters{
144151
Encode: !encodeVideo,
145152
Stereo: !stereoAudioTrackExists,
146-
Codec: mapTargetCodecToFFmpegParameter(l.Pipeline.TargetVideoCodec),
153+
Codec: ffmpegCodec,
147154
},
148155
RawMediaInfo: mediaInfo,
149156
}
150157

151-
logger.Trace(fmt.Sprintf("%v Encode=%v Stereo=%v Codec=%v", videoFilepath, !encodeVideo, !stereoAudioTrackExists, mapTargetCodecToFFmpegParameter(l.Pipeline.TargetVideoCodec)))
158+
logger.Trace(fmt.Sprintf("%v Encode=%v Stereo=%v Codec=%v", videoFilepath, !encodeVideo, !stereoAudioTrackExists, ffmpegCodec))
152159

153160
l.Queue.Push(job)
154161
logger.Info(fmt.Sprintf("Added %v to the queue", job.Path))

Diff for: controller/db/libraries/libraries.go

+2
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ type PluginPipeline struct { // TODO: Implement
2424
TargetVideoCodec string `json:"target_video_codec"`
2525
CreateStereoAudio bool `json:"create_stereo_audio"`
2626
SkipHDR bool `json:"skip_hdr"`
27+
UseHardware bool `json:"use_hardware"`
28+
HardwareCodec string `json:"hardware_codec"`
2729
}
2830

2931
type fileCache struct{} // TODO: Complete

Diff for: controller/db/libraries/libraries_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ func TestToDBLibrary(t *testing.T) {
7171
PathMasks: []string{},
7272
}, want: dBLibrary{
7373
FsCheckInterval: "1h1m1s",
74-
Pipeline: []byte("{\"target_video_codec\":\"\",\"create_stereo_audio\":false,\"skip_hdr\":false}"),
74+
Pipeline: []byte("{\"target_video_codec\":\"\",\"create_stereo_audio\":false,\"skip_hdr\":false,\"use_hardware\":false,\"hardware_codec\":\"\"}"),
7575
Queue: []byte("{\"Items\":null}"),
7676
FileCache: []byte("{}"),
7777
PathMasks: []byte("[]"),

Diff for: controller/server/webfiles/asset-manifest.json

+23-23
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,30 @@
11
{
22
"files": {
3-
"main.css": "/static/css/main.930f940a.chunk.css",
4-
"main.js": "/static/js/main.198598b6.chunk.js",
5-
"main.js.map": "/static/js/main.198598b6.chunk.js.map",
6-
"runtime-main.js": "/static/js/runtime-main.2dd4e8a6.js",
7-
"runtime-main.js.map": "/static/js/runtime-main.2dd4e8a6.js.map",
8-
"static/css/2.2c2d1656.chunk.css": "/static/css/2.2c2d1656.chunk.css",
9-
"static/js/2.af4dfa24.chunk.js": "/static/js/2.af4dfa24.chunk.js",
10-
"static/js/2.af4dfa24.chunk.js.map": "/static/js/2.af4dfa24.chunk.js.map",
11-
"static/js/3.010aea4f.chunk.js": "/static/js/3.010aea4f.chunk.js",
12-
"static/js/3.010aea4f.chunk.js.map": "/static/js/3.010aea4f.chunk.js.map",
3+
"main.css": "/static/css/main.78f2d9f1.chunk.css",
4+
"main.js": "/static/js/main.d61fc18f.chunk.js",
5+
"main.js.map": "/static/js/main.d61fc18f.chunk.js.map",
6+
"runtime-main.js": "/static/js/runtime-main.055bee68.js",
7+
"runtime-main.js.map": "/static/js/runtime-main.055bee68.js.map",
8+
"static/css/2.a49f93ba.chunk.css": "/static/css/2.a49f93ba.chunk.css",
9+
"static/js/2.c2b3c604.chunk.js": "/static/js/2.c2b3c604.chunk.js",
10+
"static/js/2.c2b3c604.chunk.js.map": "/static/js/2.c2b3c604.chunk.js.map",
11+
"static/js/3.a09c83ab.chunk.js": "/static/js/3.a09c83ab.chunk.js",
12+
"static/js/3.a09c83ab.chunk.js.map": "/static/js/3.a09c83ab.chunk.js.map",
1313
"index.html": "/index.html",
14-
"static/css/2.2c2d1656.chunk.css.map": "/static/css/2.2c2d1656.chunk.css.map",
15-
"static/css/main.930f940a.chunk.css.map": "/static/css/main.930f940a.chunk.css.map",
16-
"static/js/2.af4dfa24.chunk.js.LICENSE.txt": "/static/js/2.af4dfa24.chunk.js.LICENSE.txt",
17-
"static/media/Encodarr-Logo.b8d2df4b.svg": "/static/media/Encodarr-Logo.b8d2df4b.svg",
18-
"static/media/Info-I.4eaee4f4.svg": "/static/media/Info-I.4eaee4f4.svg",
19-
"static/media/addLibraryIcon.22f57e9e.svg": "/static/media/addLibraryIcon.22f57e9e.svg",
20-
"static/media/headphones.d0211b61.svg": "/static/media/headphones.d0211b61.svg",
21-
"static/media/play_button.a97890f5.svg": "/static/media/play_button.a97890f5.svg"
14+
"static/css/2.a49f93ba.chunk.css.map": "/static/css/2.a49f93ba.chunk.css.map",
15+
"static/css/main.78f2d9f1.chunk.css.map": "/static/css/main.78f2d9f1.chunk.css.map",
16+
"static/js/2.c2b3c604.chunk.js.LICENSE.txt": "/static/js/2.c2b3c604.chunk.js.LICENSE.txt",
17+
"static/media/Encodarr-Logo.4b0cc1bf.svg": "/static/media/Encodarr-Logo.4b0cc1bf.svg",
18+
"static/media/Info-I.ffc9d3a2.svg": "/static/media/Info-I.ffc9d3a2.svg",
19+
"static/media/addLibraryIcon.dd5f1d29.svg": "/static/media/addLibraryIcon.dd5f1d29.svg",
20+
"static/media/headphones.f1e7bde3.svg": "/static/media/headphones.f1e7bde3.svg",
21+
"static/media/play_button.415684ac.svg": "/static/media/play_button.415684ac.svg"
2222
},
2323
"entrypoints": [
24-
"static/js/runtime-main.2dd4e8a6.js",
25-
"static/css/2.2c2d1656.chunk.css",
26-
"static/js/2.af4dfa24.chunk.js",
27-
"static/css/main.930f940a.chunk.css",
28-
"static/js/main.198598b6.chunk.js"
24+
"static/js/runtime-main.055bee68.js",
25+
"static/css/2.a49f93ba.chunk.css",
26+
"static/js/2.c2b3c604.chunk.js",
27+
"static/css/main.78f2d9f1.chunk.css",
28+
"static/js/main.d61fc18f.chunk.js"
2929
]
3030
}

Diff for: controller/server/webfiles/index.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/favicon.ico"/><link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png"><link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png"><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000e30"/><meta name="description" content="Encode media libraries"/><link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png"/><link rel="manifest" href="/manifest.json"/><link rel="mask-icon" href="/safari-pinned-tab.svg" color="#5bbad5"/><meta name="msapplication-TileColor" content="#2b5797"/><title>Encodarr</title><link href="/static/css/2.2c2d1656.chunk.css" rel="stylesheet"><link href="/static/css/main.930f940a.chunk.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div><script>!function(e){function r(r){for(var n,a,i=r[0],c=r[1],f=r[2],s=0,p=[];s<i.length;s++)a=i[s],Object.prototype.hasOwnProperty.call(o,a)&&o[a]&&p.push(o[a][0]),o[a]=0;for(n in c)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(l&&l(r);p.length;)p.shift()();return u.push.apply(u,f||[]),t()}function t(){for(var e,r=0;r<u.length;r++){for(var t=u[r],n=!0,i=1;i<t.length;i++){var c=t[i];0!==o[c]&&(n=!1)}n&&(u.splice(r--,1),e=a(a.s=t[0]))}return e}var n={},o={1:0},u=[];function a(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,a),t.l=!0,t.exports}a.e=function(e){var r=[],t=o[e];if(0!==t)if(t)r.push(t[2]);else{var n=new Promise((function(r,n){t=o[e]=[r,n]}));r.push(t[2]=n);var u,i=document.createElement("script");i.charset="utf-8",i.timeout=120,a.nc&&i.setAttribute("nonce",a.nc),i.src=function(e){return a.p+"static/js/"+({}[e]||e)+"."+{3:"010aea4f"}[e]+".chunk.js"}(e);var c=new Error;u=function(r){i.onerror=i.onload=null,clearTimeout(f);var t=o[e];if(0!==t){if(t){var n=r&&("load"===r.type?"missing":r.type),u=r&&r.target&&r.target.src;c.message="Loading chunk "+e+" failed.\n("+n+": "+u+")",c.name="ChunkLoadError",c.type=n,c.request=u,t[1](c)}o[e]=void 0}};var f=setTimeout((function(){u({type:"timeout",target:i})}),12e4);i.onerror=i.onload=u,document.head.appendChild(i)}return Promise.all(r)},a.m=e,a.c=n,a.d=function(e,r,t){a.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},a.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.t=function(e,r){if(1&r&&(e=a(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(a.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)a.d(t,n,function(r){return e[r]}.bind(null,n));return t},a.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(r,"a",r),r},a.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},a.p="/",a.oe=function(e){throw console.error(e),e};var i=this["webpackJsonpencodarr-react-frontend"]=this["webpackJsonpencodarr-react-frontend"]||[],c=i.push.bind(i);i.push=r,i=i.slice();for(var f=0;f<i.length;f++)r(i[f]);var l=c;t()}([])</script><script src="/static/js/2.af4dfa24.chunk.js"></script><script src="/static/js/main.198598b6.chunk.js"></script></body></html>
1+
<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/favicon.ico"/><link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png"><link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png"><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000e30"/><meta name="description" content="Encode media libraries"/><link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png"/><link rel="manifest" href="/manifest.json"/><link rel="mask-icon" href="/safari-pinned-tab.svg" color="#5bbad5"/><meta name="msapplication-TileColor" content="#2b5797"/><title>Encodarr</title><link href="/static/css/2.a49f93ba.chunk.css" rel="stylesheet"><link href="/static/css/main.78f2d9f1.chunk.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div><script>!function(e){function r(r){for(var n,a,i=r[0],c=r[1],l=r[2],s=0,p=[];s<i.length;s++)a=i[s],Object.prototype.hasOwnProperty.call(o,a)&&o[a]&&p.push(o[a][0]),o[a]=0;for(n in c)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(f&&f(r);p.length;)p.shift()();return u.push.apply(u,l||[]),t()}function t(){for(var e,r=0;r<u.length;r++){for(var t=u[r],n=!0,i=1;i<t.length;i++){var c=t[i];0!==o[c]&&(n=!1)}n&&(u.splice(r--,1),e=a(a.s=t[0]))}return e}var n={},o={1:0},u=[];function a(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,a),t.l=!0,t.exports}a.e=function(e){var r=[],t=o[e];if(0!==t)if(t)r.push(t[2]);else{var n=new Promise((function(r,n){t=o[e]=[r,n]}));r.push(t[2]=n);var u,i=document.createElement("script");i.charset="utf-8",i.timeout=120,a.nc&&i.setAttribute("nonce",a.nc),i.src=function(e){return a.p+"static/js/"+({}[e]||e)+"."+{3:"a09c83ab"}[e]+".chunk.js"}(e);var c=new Error;u=function(r){i.onerror=i.onload=null,clearTimeout(l);var t=o[e];if(0!==t){if(t){var n=r&&("load"===r.type?"missing":r.type),u=r&&r.target&&r.target.src;c.message="Loading chunk "+e+" failed.\n("+n+": "+u+")",c.name="ChunkLoadError",c.type=n,c.request=u,t[1](c)}o[e]=void 0}};var l=setTimeout((function(){u({type:"timeout",target:i})}),12e4);i.onerror=i.onload=u,document.head.appendChild(i)}return Promise.all(r)},a.m=e,a.c=n,a.d=function(e,r,t){a.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},a.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.t=function(e,r){if(1&r&&(e=a(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(a.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)a.d(t,n,function(r){return e[r]}.bind(null,n));return t},a.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(r,"a",r),r},a.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},a.p="/",a.oe=function(e){throw console.error(e),e};var i=this["webpackJsonpencodarr-react-frontend"]=this["webpackJsonpencodarr-react-frontend"]||[],c=i.push.bind(i);i.push=r,i=i.slice();for(var l=0;l<i.length;l++)r(i[l]);var f=c;t()}([])</script><script src="/static/js/2.c2b3c604.chunk.js"></script><script src="/static/js/main.d61fc18f.chunk.js"></script></body></html>

Diff for: controller/server/webfiles/static/css/2.a49f93ba.chunk.css

+14
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: controller/server/webfiles/static/css/2.a49f93ba.chunk.css.map

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: controller/server/webfiles/static/css/main.78f2d9f1.chunk.css

+2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: controller/server/webfiles/static/css/main.78f2d9f1.chunk.css.map

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: controller/server/webfiles/static/js/2.c2b3c604.chunk.js

+3
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
/*
2+
object-assign
3+
(c) Sindre Sorhus
4+
@license MIT
5+
*/
6+
7+
/*!
8+
Copyright (c) 2018 Jed Watson.
9+
Licensed under the MIT License (MIT), see
10+
http://jedwatson.github.io/classnames
11+
*/
12+
13+
/** @license React v0.20.2
14+
* scheduler.production.min.js
15+
*
16+
* Copyright (c) Facebook, Inc. and its affiliates.
17+
*
18+
* This source code is licensed under the MIT license found in the
19+
* LICENSE file in the root directory of this source tree.
20+
*/
21+
22+
/** @license React v17.0.2
23+
* react-dom.production.min.js
24+
*
25+
* Copyright (c) Facebook, Inc. and its affiliates.
26+
*
27+
* This source code is licensed under the MIT license found in the
28+
* LICENSE file in the root directory of this source tree.
29+
*/
30+
31+
/** @license React v17.0.2
32+
* react-jsx-runtime.production.min.js
33+
*
34+
* Copyright (c) Facebook, Inc. and its affiliates.
35+
*
36+
* This source code is licensed under the MIT license found in the
37+
* LICENSE file in the root directory of this source tree.
38+
*/
39+
40+
/** @license React v17.0.2
41+
* react.production.min.js
42+
*
43+
* Copyright (c) Facebook, Inc. and its affiliates.
44+
*
45+
* This source code is licensed under the MIT license found in the
46+
* LICENSE file in the root directory of this source tree.
47+
*/

Diff for: controller/server/webfiles/static/js/2.c2b3c604.chunk.js.map

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)