projects
/
nihav.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
5f9bf76
)
introduce a way for encoder to manifest its capabilities
author
Kostya Shishkov
<kostya.shishkov@gmail.com>
Tue, 14 Mar 2023 10:11:31 +0000
(11:11 +0100)
committer
Kostya Shishkov
<kostya.shishkov@gmail.com>
Tue, 14 Mar 2023 10:11:31 +0000
(11:11 +0100)
14 files changed:
nihav-commonfmt/src/codecs/cinepakenc.rs
patch
|
blob
|
blame
|
history
nihav-commonfmt/src/codecs/pcm.rs
patch
|
blob
|
blame
|
history
nihav-commonfmt/src/codecs/zmbvenc.rs
patch
|
blob
|
blame
|
history
nihav-core/src/codecs/mod.rs
patch
|
blob
|
blame
|
history
nihav-duck/src/codecs/truemotionrtenc.rs
patch
|
blob
|
blame
|
history
nihav-duck/src/codecs/vp6enc/mod.rs
patch
|
blob
|
blame
|
history
nihav-duck/src/codecs/vp7enc/mod.rs
patch
|
blob
|
blame
|
history
nihav-flash/src/codecs/adpcmenc.rs
patch
|
blob
|
blame
|
history
nihav-indeo/src/codecs/indeo3enc/mod.rs
patch
|
blob
|
blame
|
history
nihav-llaudio/src/codecs/flacenc.rs
patch
|
blob
|
blame
|
history
nihav-ms/src/codecs/imaadpcmenc.rs
patch
|
blob
|
blame
|
history
nihav-ms/src/codecs/msadpcm.rs
patch
|
blob
|
blame
|
history
nihav-ms/src/codecs/msvideo1enc.rs
patch
|
blob
|
blame
|
history
nihav-realmedia/src/codecs/cookenc.rs
patch
|
blob
|
blame
|
history
diff --git
a/nihav-commonfmt/src/codecs/cinepakenc.rs
b/nihav-commonfmt/src/codecs/cinepakenc.rs
index ff86a524e4044781da66bf45543c161ac6792133..f4ac9b24fd375c52b4f5717fcb4aac1fbd3e2e42 100644
(file)
--- a/
nihav-commonfmt/src/codecs/cinepakenc.rs
+++ b/
nihav-commonfmt/src/codecs/cinepakenc.rs
@@
-958,6
+958,7
@@
impl NAEncoder for CinepakEncoder {
}
}
}
}
}
}
+ fn get_capabilities(&self) -> u64 { 0 }
fn init(&mut self, stream_id: u32, encinfo: EncodeParameters) -> EncoderResult<NAStreamRef> {
match encinfo.format {
NACodecTypeInfo::None => Err(EncoderError::FormatError),
fn init(&mut self, stream_id: u32, encinfo: EncodeParameters) -> EncoderResult<NAStreamRef> {
match encinfo.format {
NACodecTypeInfo::None => Err(EncoderError::FormatError),
diff --git
a/nihav-commonfmt/src/codecs/pcm.rs
b/nihav-commonfmt/src/codecs/pcm.rs
index 3bc67c007f04461ac2262c6504ba949d661d49fc..b2dd8174879e75bc9f518fb5cca2e1255d5f8291 100644
(file)
--- a/
nihav-commonfmt/src/codecs/pcm.rs
+++ b/
nihav-commonfmt/src/codecs/pcm.rs
@@
-200,6
+200,7
@@
impl NAEncoder for PCMEncoder {
}
}
}
}
}
}
+ fn get_capabilities(&self) -> u64 { ENC_CAPS_CBR }
fn init(&mut self, stream_id: u32, encinfo: EncodeParameters) -> EncoderResult<NAStreamRef> {
match encinfo.format {
NACodecTypeInfo::None => Err(EncoderError::FormatError),
fn init(&mut self, stream_id: u32, encinfo: EncodeParameters) -> EncoderResult<NAStreamRef> {
match encinfo.format {
NACodecTypeInfo::None => Err(EncoderError::FormatError),
diff --git
a/nihav-commonfmt/src/codecs/zmbvenc.rs
b/nihav-commonfmt/src/codecs/zmbvenc.rs
index 0c8b945f8fb4c716fb704bc18a527b7f8f44b673..332cc0e47b9230c44dd6cdd8f754c5f4b290dfc2 100644
(file)
--- a/
nihav-commonfmt/src/codecs/zmbvenc.rs
+++ b/
nihav-commonfmt/src/codecs/zmbvenc.rs
@@
-398,6
+398,7
@@
impl NAEncoder for ZMBVEncoder {
}
}
}
}
}
}
+ fn get_capabilities(&self) -> u64 { ENC_CAPS_SKIPFRAME }
fn init(&mut self, stream_id: u32, encinfo: EncodeParameters) -> EncoderResult<NAStreamRef> {
match encinfo.format {
NACodecTypeInfo::None => Err(EncoderError::FormatError),
fn init(&mut self, stream_id: u32, encinfo: EncodeParameters) -> EncoderResult<NAStreamRef> {
match encinfo.format {
NACodecTypeInfo::None => Err(EncoderError::FormatError),
diff --git
a/nihav-core/src/codecs/mod.rs
b/nihav-core/src/codecs/mod.rs
index b6a1820d6bcf6bb87b3c9cad6f0c41aea7af6dc4..5cf7d07b1eb1b230e5883e34f534d268e2f06ea7 100644
(file)
--- a/
nihav-core/src/codecs/mod.rs
+++ b/
nihav-core/src/codecs/mod.rs
@@
-210,6
+210,13
@@
pub const ENC_MODE_CBR: u64 = 1 << 0;
/// Encoding parameter flag to force constant framerate mode.
pub const ENC_MODE_CFR: u64 = 1 << 1;
/// Encoding parameter flag to force constant framerate mode.
pub const ENC_MODE_CFR: u64 = 1 << 1;
+/// Encoder supports constant bitrate mode.
+pub const ENC_CAPS_CBR: u64 = 1 << 0;
+/// Encoder supports skip frames.
+pub const ENC_CAPS_SKIPFRAME: u64 = 1 << 1;
+/// Encoder supports mid-stream parameters change.
+pub const ENC_CAPS_PARAMCHANGE: u64 = 1 << 2;
+
/// Encoding parameters.
#[derive(Clone,Copy,PartialEq)]
pub struct EncodeParameters {
/// Encoding parameters.
#[derive(Clone,Copy,PartialEq)]
pub struct EncodeParameters {
@@
-300,6
+307,10
@@
pub trait NAEncoder: NAOptionHandler {
/// // convert input into format defined in target_params, feed to the encoder, ...
/// ```
fn negotiate_format(&self, encinfo: &EncodeParameters) -> EncoderResult<EncodeParameters>;
/// // convert input into format defined in target_params, feed to the encoder, ...
/// ```
fn negotiate_format(&self, encinfo: &EncodeParameters) -> EncoderResult<EncodeParameters>;
+ /// Queries encoder capabilities.
+ ///
+ /// See `ENC_CAPS_*` for examples.
+ fn get_capabilities(&self) -> u64;
/// Initialises the encoder.
fn init(&mut self, stream_id: u32, encinfo: EncodeParameters) -> EncoderResult<NAStreamRef>;
/// Takes a single frame for encoding.
/// Initialises the encoder.
fn init(&mut self, stream_id: u32, encinfo: EncodeParameters) -> EncoderResult<NAStreamRef>;
/// Takes a single frame for encoding.
diff --git
a/nihav-duck/src/codecs/truemotionrtenc.rs
b/nihav-duck/src/codecs/truemotionrtenc.rs
index c80a4b84843b3f20e6a8ed8bf261f9b9bf958eaa..47236ddbb1e1c88ab67c2320dd475e34f0ec3bcf 100644
(file)
--- a/
nihav-duck/src/codecs/truemotionrtenc.rs
+++ b/
nihav-duck/src/codecs/truemotionrtenc.rs
@@
-181,6
+181,7
@@
impl NAEncoder for TMRTEncoder {
}
}
}
}
}
}
+ fn get_capabilities(&self) -> u64 { ENC_CAPS_PARAMCHANGE }
fn init(&mut self, stream_id: u32, encinfo: EncodeParameters) -> EncoderResult<NAStreamRef> {
match encinfo.format {
NACodecTypeInfo::None => Err(EncoderError::FormatError),
fn init(&mut self, stream_id: u32, encinfo: EncodeParameters) -> EncoderResult<NAStreamRef> {
match encinfo.format {
NACodecTypeInfo::None => Err(EncoderError::FormatError),
diff --git
a/nihav-duck/src/codecs/vp6enc/mod.rs
b/nihav-duck/src/codecs/vp6enc/mod.rs
index d706fe74a6e0bac356e1a07115358151e5f1755a..9eea91d7f041c460bc658720444e0e8f75870c06 100644
(file)
--- a/
nihav-duck/src/codecs/vp6enc/mod.rs
+++ b/
nihav-duck/src/codecs/vp6enc/mod.rs
@@
-680,6
+680,7
@@
impl NAEncoder for VP6Encoder {
}
}
}
}
}
}
+ fn get_capabilities(&self) -> u64 { 0 }
fn init(&mut self, stream_id: u32, encinfo: EncodeParameters) -> EncoderResult<NAStreamRef> {
match encinfo.format {
NACodecTypeInfo::None => Err(EncoderError::FormatError),
fn init(&mut self, stream_id: u32, encinfo: EncodeParameters) -> EncoderResult<NAStreamRef> {
match encinfo.format {
NACodecTypeInfo::None => Err(EncoderError::FormatError),
diff --git
a/nihav-duck/src/codecs/vp7enc/mod.rs
b/nihav-duck/src/codecs/vp7enc/mod.rs
index 8a31f10f47a0e564b6da89b204df01efd1178177..a73a5713976ee8d1f8480e1e80cf62d94b2b0261 100644
(file)
--- a/
nihav-duck/src/codecs/vp7enc/mod.rs
+++ b/
nihav-duck/src/codecs/vp7enc/mod.rs
@@
-280,6
+280,7
@@
impl NAEncoder for VP7Encoder {
}
}
}
}
}
}
+ fn get_capabilities(&self) -> u64 { 0 }
fn init(&mut self, stream_id: u32, encinfo: EncodeParameters) -> EncoderResult<NAStreamRef> {
match encinfo.format {
NACodecTypeInfo::None => Err(EncoderError::FormatError),
fn init(&mut self, stream_id: u32, encinfo: EncodeParameters) -> EncoderResult<NAStreamRef> {
match encinfo.format {
NACodecTypeInfo::None => Err(EncoderError::FormatError),
diff --git
a/nihav-flash/src/codecs/adpcmenc.rs
b/nihav-flash/src/codecs/adpcmenc.rs
index 9cd04f7b30b9e49fef784fdef705fc2bd4f7cf55..c7bf3aad6293e6999e85e35a9a2d713e161b4395 100644
(file)
--- a/
nihav-flash/src/codecs/adpcmenc.rs
+++ b/
nihav-flash/src/codecs/adpcmenc.rs
@@
-81,6
+81,7
@@
impl NAEncoder for ADPCMEncoder {
}
}
}
}
}
}
+ fn get_capabilities(&self) -> u64 { ENC_CAPS_CBR }
fn init(&mut self, stream_id: u32, encinfo: EncodeParameters) -> EncoderResult<NAStreamRef> {
match encinfo.format {
NACodecTypeInfo::None => Err(EncoderError::FormatError),
fn init(&mut self, stream_id: u32, encinfo: EncodeParameters) -> EncoderResult<NAStreamRef> {
match encinfo.format {
NACodecTypeInfo::None => Err(EncoderError::FormatError),
diff --git
a/nihav-indeo/src/codecs/indeo3enc/mod.rs
b/nihav-indeo/src/codecs/indeo3enc/mod.rs
index dc638bc791c14b872ad87e3c55d2f208b73defdc..eefa3d7b94bcb95fb6aae470bb3eb79e6886b651 100644
(file)
--- a/
nihav-indeo/src/codecs/indeo3enc/mod.rs
+++ b/
nihav-indeo/src/codecs/indeo3enc/mod.rs
@@
-199,6
+199,7
@@
impl NAEncoder for Indeo3Encoder {
}
}
}
}
}
}
+ fn get_capabilities(&self) -> u64 { ENC_CAPS_SKIPFRAME }
fn init(&mut self, stream_id: u32, encinfo: EncodeParameters) -> EncoderResult<NAStreamRef> {
match encinfo.format {
NACodecTypeInfo::None => Err(EncoderError::FormatError),
fn init(&mut self, stream_id: u32, encinfo: EncodeParameters) -> EncoderResult<NAStreamRef> {
match encinfo.format {
NACodecTypeInfo::None => Err(EncoderError::FormatError),
diff --git
a/nihav-llaudio/src/codecs/flacenc.rs
b/nihav-llaudio/src/codecs/flacenc.rs
index 8b5b44decdff16272799cf3b81641d026e6ae33a..3b992941c6841b681ba4d520bb7cdb0e83a2af7a 100644
(file)
--- a/
nihav-llaudio/src/codecs/flacenc.rs
+++ b/
nihav-llaudio/src/codecs/flacenc.rs
@@
-417,6
+417,7
@@
impl NAEncoder for FLACEncoder {
}
}
}
}
}
}
+ fn get_capabilities(&self) -> u64 { 0 }
fn init(&mut self, stream_id: u32, encinfo: EncodeParameters) -> EncoderResult<NAStreamRef> {
match encinfo.format {
NACodecTypeInfo::None => Err(EncoderError::FormatError),
fn init(&mut self, stream_id: u32, encinfo: EncodeParameters) -> EncoderResult<NAStreamRef> {
match encinfo.format {
NACodecTypeInfo::None => Err(EncoderError::FormatError),
diff --git
a/nihav-ms/src/codecs/imaadpcmenc.rs
b/nihav-ms/src/codecs/imaadpcmenc.rs
index 15e76fb251a7473bcff2b1ca80fb0a4c3a58e234..a113d5d3e0e47be3be0a6364c190d6613df68ede 100644
(file)
--- a/
nihav-ms/src/codecs/imaadpcmenc.rs
+++ b/
nihav-ms/src/codecs/imaadpcmenc.rs
@@
-215,6
+215,7
@@
impl NAEncoder for IMAADPCMEncoder {
}
}
}
}
}
}
+ fn get_capabilities(&self) -> u64 { ENC_CAPS_CBR }
fn init(&mut self, stream_id: u32, encinfo: EncodeParameters) -> EncoderResult<NAStreamRef> {
match encinfo.format {
NACodecTypeInfo::None => Err(EncoderError::FormatError),
fn init(&mut self, stream_id: u32, encinfo: EncodeParameters) -> EncoderResult<NAStreamRef> {
match encinfo.format {
NACodecTypeInfo::None => Err(EncoderError::FormatError),
diff --git
a/nihav-ms/src/codecs/msadpcm.rs
b/nihav-ms/src/codecs/msadpcm.rs
index 768eb749bf025f14211cff49802cd765b7da4335..179b097515f95ffa27a05edc78647928fb6f8725 100644
(file)
--- a/
nihav-ms/src/codecs/msadpcm.rs
+++ b/
nihav-ms/src/codecs/msadpcm.rs
@@
-336,6
+336,7
@@
impl NAEncoder for MSADPCMEncoder {
}
}
}
}
}
}
+ fn get_capabilities(&self) -> u64 { ENC_CAPS_CBR }
fn init(&mut self, stream_id: u32, encinfo: EncodeParameters) -> EncoderResult<NAStreamRef> {
match encinfo.format {
NACodecTypeInfo::None => Err(EncoderError::FormatError),
fn init(&mut self, stream_id: u32, encinfo: EncodeParameters) -> EncoderResult<NAStreamRef> {
match encinfo.format {
NACodecTypeInfo::None => Err(EncoderError::FormatError),
diff --git
a/nihav-ms/src/codecs/msvideo1enc.rs
b/nihav-ms/src/codecs/msvideo1enc.rs
index 5d50b9af856146eb93c409287231f5fdc9dbf651..4507e08ec7bfff1f7d3251d4d059b29c494a2bc1 100644
(file)
--- a/
nihav-ms/src/codecs/msvideo1enc.rs
+++ b/
nihav-ms/src/codecs/msvideo1enc.rs
@@
-835,6
+835,7
@@
impl NAEncoder for MSVideo1Encoder {
}
}
}
}
}
}
+ fn get_capabilities(&self) -> u64 { ENC_CAPS_SKIPFRAME }
fn init(&mut self, stream_id: u32, encinfo: EncodeParameters) -> EncoderResult<NAStreamRef> {
match encinfo.format {
NACodecTypeInfo::None => Err(EncoderError::FormatError),
fn init(&mut self, stream_id: u32, encinfo: EncodeParameters) -> EncoderResult<NAStreamRef> {
match encinfo.format {
NACodecTypeInfo::None => Err(EncoderError::FormatError),
diff --git
a/nihav-realmedia/src/codecs/cookenc.rs
b/nihav-realmedia/src/codecs/cookenc.rs
index 70f471b8c373c60b7d2db0ecd5430cd1ca2b7c1e..3b9e3c4c76a0276c8b501a41da1415a1b5896bae 100644
(file)
--- a/
nihav-realmedia/src/codecs/cookenc.rs
+++ b/
nihav-realmedia/src/codecs/cookenc.rs
@@
-768,6
+768,7
@@
impl NAEncoder for CookEncoder {
}
}
}
}
}
}
+ fn get_capabilities(&self) -> u64 { ENC_CAPS_CBR }
fn init(&mut self, stream_id: u32, encinfo: EncodeParameters) -> EncoderResult<NAStreamRef> {
match encinfo.format {
NACodecTypeInfo::None => Err(EncoderError::FormatError),
fn init(&mut self, stream_id: u32, encinfo: EncodeParameters) -> EncoderResult<NAStreamRef> {
match encinfo.format {
NACodecTypeInfo::None => Err(EncoderError::FormatError),