mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-25 13:31:37 +00:00
Add support for the VP9 codec in the IVF container
This commit is contained in:
parent
f12bf069f0
commit
06566c010b
1 changed files with 13 additions and 3 deletions
|
@ -322,6 +322,7 @@ class VpxPlayer : public MoviePlayer
|
||||||
unsigned width, height;
|
unsigned width, height;
|
||||||
TArray<uint8_t> Pic;
|
TArray<uint8_t> Pic;
|
||||||
TArray<uint8_t> readBuf;
|
TArray<uint8_t> readBuf;
|
||||||
|
vpx_codec_iface_t *iface;
|
||||||
vpx_codec_ctx_t codec{};
|
vpx_codec_ctx_t codec{};
|
||||||
vpx_codec_iter_t iter = nullptr;
|
vpx_codec_iter_t iter = nullptr;
|
||||||
|
|
||||||
|
@ -364,7 +365,7 @@ public:
|
||||||
|
|
||||||
// Todo: Support VP9 as well?
|
// Todo: Support VP9 as well?
|
||||||
vpx_codec_dec_cfg_t cfg = { 1, width, height };
|
vpx_codec_dec_cfg_t cfg = { 1, width, height };
|
||||||
if (vpx_codec_dec_init(&codec, &vpx_codec_vp8_dx_algo, &cfg, 0))
|
if (vpx_codec_dec_init(&codec, iface, &cfg, 0))
|
||||||
{
|
{
|
||||||
error.Format("Error initializing VPX codec.\n");
|
error.Format("Error initializing VPX codec.\n");
|
||||||
failed = true;
|
failed = true;
|
||||||
|
@ -387,7 +388,16 @@ public:
|
||||||
uint16_t length = fr.ReadUInt16();
|
uint16_t length = fr.ReadUInt16();
|
||||||
if (length != 32) return false;
|
if (length != 32) return false;
|
||||||
fr.Read(&magic, 4);
|
fr.Read(&magic, 4);
|
||||||
if (magic != MAKE_ID('V', 'P', '8', '0')) return false;
|
|
||||||
|
switch (magic)
|
||||||
|
{
|
||||||
|
case MAKE_ID('V', 'P', '8', '0'):
|
||||||
|
iface = &vpx_codec_vp8_dx_algo; break;
|
||||||
|
case MAKE_ID('V', 'P', '9', '0'):
|
||||||
|
iface = &vpx_codec_vp9_dx_algo; break;
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
width = fr.ReadUInt16();
|
width = fr.ReadUInt16();
|
||||||
height = fr.ReadUInt16();
|
height = fr.ReadUInt16();
|
||||||
|
@ -899,7 +909,7 @@ MoviePlayer* OpenMovie(const char* filename, TArray<int>& ans, const int* framet
|
||||||
}
|
}
|
||||||
return anm;
|
return anm;
|
||||||
}
|
}
|
||||||
else if (!memcmp(id, "DKIF\0\0 \0VP80", 12))
|
else if (!memcmp(id, "DKIF\0\0 \0VP80", 12) || !memcmp(id, "DKIF\0\0 \0VP90", 12))
|
||||||
{
|
{
|
||||||
auto anm = new VpxPlayer(fr, ans, frameticks ? frameticks[1] : 0, flags, error);
|
auto anm = new VpxPlayer(fr, ans, frameticks ? frameticks[1] : 0, flags, error);
|
||||||
if (!anm->isvalid())
|
if (!anm->isvalid())
|
||||||
|
|
Loading…
Reference in a new issue