mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-02 22:08:40 +09:00
Call VPXDecoder libvpx wrappers for WebM
Use the new helper functions instead of calling libvpx directly. This simplifies adding other codecs in the future.
This commit is contained in:
parent
3b0820badb
commit
dfcff1dfbc
1 changed files with 14 additions and 13 deletions
|
|
@ -9,6 +9,7 @@
|
|||
#include "AbstractMediaDecoder.h"
|
||||
#include "MediaResource.h"
|
||||
#include "OpusDecoder.h"
|
||||
#include "VPXDecoder.h"
|
||||
#include "WebMDemuxer.h"
|
||||
#include "WebMBufferedParser.h"
|
||||
#include "gfx2DGlue.h"
|
||||
|
|
@ -24,12 +25,9 @@
|
|||
#include "mozilla/Sprintf.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <numeric>
|
||||
#include <stdint.h>
|
||||
|
||||
#define VPX_DONT_DEFINE_STDINT_TYPES
|
||||
#include "vpx/vp8dx.h"
|
||||
#include "vpx/vpx_decoder.h"
|
||||
|
||||
#define WEBM_DEBUG(arg, ...) MOZ_LOG(gMediaDemuxerLog, mozilla::LogLevel::Debug, ("WebMDemuxer(%p)::%s: " arg, this, __func__, ##__VA_ARGS__))
|
||||
extern mozilla::LazyLogModule gMediaDemuxerLog;
|
||||
|
||||
|
|
@ -636,22 +634,25 @@ WebMDemuxer::GetNextPacket(TrackInfo::TrackType aType, MediaRawDataQueue *aSampl
|
|||
// Packet is encrypted, can't peek, use packet info
|
||||
isKeyframe = nestegg_packet_has_keyframe(holder->Packet()) == NESTEGG_PACKET_HAS_KEYFRAME_TRUE;
|
||||
} else {
|
||||
vpx_codec_stream_info_t si;
|
||||
PodZero(&si);
|
||||
si.sz = sizeof(si);
|
||||
auto sample = MakeSpan(data, length);
|
||||
switch (mVideoCodec) {
|
||||
case NESTEGG_CODEC_VP8:
|
||||
vpx_codec_peek_stream_info(vpx_codec_vp8_dx(), data, length, &si);
|
||||
isKeyframe = VPXDecoder::IsKeyframe(sample, VPXDecoder::Codec::VP8);
|
||||
break;
|
||||
case NESTEGG_CODEC_VP9:
|
||||
vpx_codec_peek_stream_info(vpx_codec_vp9_dx(), data, length, &si);
|
||||
isKeyframe = VPXDecoder::IsKeyframe(sample, VPXDecoder::Codec::VP9);
|
||||
break;
|
||||
default:
|
||||
NS_WARNING("Cannot detect keyframes in unknown WebM video codec");
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
isKeyframe = si.is_kf;
|
||||
if (isKeyframe) {
|
||||
// We only look for resolution changes on keyframes for both VP8 and
|
||||
// VP9. Other resolution changes are invalid.
|
||||
auto dimensions = nsIntSize(si.w, si.h);
|
||||
// For both VP8 and VP9, we only look for resolution changes
|
||||
// on keyframes. Other resolution changes are invalid.
|
||||
auto codec = mVideoCodec == NESTEGG_CODEC_VP8
|
||||
? VPXDecoder::Codec::VP8
|
||||
: VPXDecoder::Codec::VP9;
|
||||
auto dimensions = VPXDecoder::GetFrameSize(sample, codec);
|
||||
if (mLastSeenFrameSize.isSome()
|
||||
&& (dimensions != mLastSeenFrameSize.value())) {
|
||||
mInfo.mVideo.mDisplay = dimensions;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue