This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm whether you accept or reject these cookies being set.

A cookie will be stored in your browser regardless of choice to prevent you being asked this question again. You will be able to change your cookie settings at any time using the link in the footer.

[HELP] APV Codec Support addition?
#1
Is there any way to add a new codec for Hybrid to use without recompiling it?  Basically, can I add support for the Samsung APV codec to an existing Hybrid install?

FFMPEG has recently added native encoder and decoder support for the OpenAPV codec in FFMPEG 8.  It would be great to be able to use it in Hybrid.

https://github.com/AcademySoftwareFoundation/openapv
https://academysoftwarefoundation.github...enAPV.html
Reply
#2
Quote: Is there any way to add a new codec for Hybrid to use without recompiling it?
No. And recompiling it is the smallest problem. Implementing support for a new format is a lot of work and requires a lot of reading.

Quote:It would be great to be able to use it in Hybrid.
'Perceptually lossless video' is usually useless to me, so my personal interest is low.
Haven't seen any real comparison for it.
Haven't looked into compiling it for Linux and MacOS. (the Windows ffmpeg version that comes with Hybrid should already support it)


ffmpeg -h encoder=apv
shows:
Encoder liboapv [liboapv APV]:
    General capabilities: dr1 threads
    Threading capabilities: other
    Supported pixel formats: gray10le yuv422p10le yuv422p12le yuv444p10le yuv444p12le yuva444p10le yuva444p12le
liboapv AVOptions:
  -preset            <int>        E..V....... Encoding preset for setting encoding speed (optimization level control) (from 0 to 4) (default medium)
     fastest         0            E..V.......
     fast            1            E..V.......
     medium          2            E..V.......
     slow            3            E..V.......
     placebo         4            E..V.......
     default         2            E..V.......
  -qp                <int>        E..V....... Quantization parameter value for CQP rate control mode (from 0 to 63) (default 32)
  -oapv-params       <dictionary> E..V....... Override the apv configuration using a :-separated list of key=value parameters

https://ffmpeg.org/ffmpeg-codecs.html#liboapv mentions:
Quote:oapv-params (parse_apv_params)

Set liboapvenc options using a list of key=value pairs separated by ":". See the liboapv encoder user guide for a list of accepted parameters.
Any idea where to find the 'liboapv encoder user guide for a list of accepted parameter' ?
Any idea what the presets do? If I added support for this format, I would need to know which settings are covered by the presets, so that the UI can reflect this when using a preset.
Any idea how to properly specify HDR signaling?

From the looks of it openapv uses its own container and is video only atm.

oapv_app_enc.exe --help
shows:
____                ___   ___ _   __
/ __ \___  ___ ___  / _ | / _ \ | / / Encoder (v0.2.0.4)
/ /_/ / _ \/ -_) _ \/ __ |/ ___/ |/ /
\____/ .__/\__/_//_/_/ |_/_/   |___/
    /_/

Syntax:
  oapv_app_enc.exe -i 'input-file' [ options ]

Options:
  --help
    : list options
  -v, --verbose [INTEGER] (optional) [2]
    : verbose (log) level
      - 0: no message
      - 1: only error message
      - 2: simple messages
      - 3: frame-level messages
  -i, --input [STRING]
    : file name of input video
  -o, --output [STRING] (optional) [None]
    : file name of output bitstream
  -r, --recon [STRING] (optional) [None]
    : file name of reconstructed video
  -w, --width [STRING] (optional) [None]
    : pixel width of input video
  -h, --height [STRING] (optional) [None]
    : pixel height of input video
  -q, --qp [STRING] (optional) [auto]
    : QP value: 0 ~ (63 + (bitdepth - 10)*6)
      - 10bit input: 0 ~ 63
      - 12bit input: 0 ~ 75
      - 'auto' means that the value is internally determined
  -z, --fps [STRING] (optional) [None]
    : frame rate (frames per second)
  -m, --threads [STRING] (optional) [auto]
    : force use of a specific number of threads
      - 'auto' means that the value is internally determined
  --preset [STRING] (optional) [None]
    : encoder preset [fastest, fast, medium, slow, placebo]
  -d, --input-depth [INTEGER] (optional) [10]
    : input bit depth (8, 10-12)
      - Note: 8bit input will be converted to 10bit
  --input-csp [INTEGER] (optional) [-1]
    : input color space (chroma format)
      - 0: 400
      - 2: 422
      - 3: 444
      - 4: 4444
      - 5: P2(Planar Y, Combined CbCr, 422)
  --family [STRING] (optional) [None]
    : family name for bitrate setting
      - 422-LQ: YCbCr422 low quality
      - 422-SQ: YCbCr422 standard quality
      - 422-HQ: YCbCr422 high quality
      - 444-UQ: YCbCr444 ultra quality
      Note: 'family' and 'bitrate' value cannot be set together.
            The family and profile arguments should be set with the same
            color space, if they coexists.
  --profile [STRING] (optional) [422-10]
    : profile string
      - 422-10: YCbCr422 10bit (default)
      - 422-12; YCbCr422 12bit
      - 444-10: YCbCr444 10bit
      - 444-12; YCbCr444 12bit
      - 4444-10: YCbCr4444 10bit
      - 4444-12; YCbCr4444 12bit
      - 400-10: YCbCr400 (monochrome) 10bit
      Note: Color space and bit depth of input video will be converted
            automatically to support the given profile, if needs
            The family and profile arguments should be set with the same
            color space, if they coexists.
  --level [STRING] (optional) [auto]
    : level setting (1, 1.1, 2, 2.1, 3, 3.1, 4, 4.1, 5, 5.1, 6, 6.1, 7, 7.1)
      - 'auto' means that the value is internally determined
  --band [STRING] (optional) [auto]
    : band setting (0, 1, 2, 3)
      - 'auto' means that the value is internally determined
  --max-au [INTEGER] (optional) [0]
    : maximum number of access units to be encoded
  --seek [INTEGER] (optional) [0]
    : number of skipped access units before encoding
  --qp-offset-c1 [STRING] (optional) [None]
    : QP offset value for Component 1 (Cb)
  --qp-offset-c2 [STRING] (optional) [None]
    : QP offset value for Component 2 (Cr)
  --qp-offset-c3 [STRING] (optional) [None]
    : QP offset value for Component 3
  --tile-w [STRING] (optional) [None]
    : width of tile in units of pixels
  --tile-h [STRING] (optional) [None]
    : height of tile in units of pixels
  --bitrate [STRING] (optional) [None]
    : enable ABR rate control
      bitrate in terms of kbits per second: Kbps(none,K,k), Mbps(M,m)
      ex) 100 = 100K = 0.1M
  --q-matrix-c0 [STRING] (optional) [None]
    : custom quantization matrix for component 0 (Y) "q1 q2 ... q63 q64"
  --q-matrix-c1 [STRING] (optional) [None]
    : custom quantization matrix for component 1 (Cb) "q1 q2 ... q63 q64"
  --q-matrix-c2 [STRING] (optional) [None]
    : custom quantization matrix for component 2 (Cr) "q1 q2 ... q63 q64"
  --q-matrix-c3 [STRING] (optional) [None]
    : custom quantization matrix for component 3 "q1 q2 ... q63 q64"
  --color-primaries [INTEGER] (optional) [-1]
    : ColourPrimaries value defined in ITU-T H.273
      - 1: bt709
      - 2: unspecified
      - 3: reserved
      - 4: bt470m
      - 5: bt470bg
      - 6: smpte170m
      - 7: smpte240m
      - 8: film
      - 9: bt2020
      - 10: smpte4280
      - 11: smpte4311
      - 12: smpte4322
      Note: This value should be set along with all other color aspects.
            i.e. 'color-primaries', 'color-transfer', 'color-matrix',
            and 'color-range' should all be set.
  --color-transfer [INTEGER] (optional) [-1]
    : TransferCharacteristics value defined in ITU-T H.273
      - 1: bt709
      - 2: unspecified
      - 4: bt470m
      - 5: bt470bg
      - 6: smpte170m
      - 7: smpte240m
      - 8: linear
      - 9: log100
      - 10: log316
      - 11: iec61966-2-4
      - 12: bt1361e
      - 13: iec61966-2-1
      - 14: bt2020-10
      - 15: bt2020-12
      - 16: smpte2084
      - 17: smpte428
      - 18: hybrid log-gamma (HLG), arib-std-b67
      Note: This value should be set along with all other color aspects.
            i.e. 'color-primaries', 'color-transfer', 'color-matrix',
            and 'color-range' should all be set.
  --color-matrix [INTEGER] (optional) [-1]
    : MatrixCoefficients value defined in ITU-T H.273
      - 0: gbr
      - 1: bt709
      - 2: unspecified
      - 4: fcc
      - 5: bt470bg
      - 6: smpte170m
      - 7: smpte240m
      - 8: ycgco
      - 9: bt2020nc
      - 10: bt2020c
      - 11: smpte2085
      - 12: chroma-derived-nc
      - 13: chroma-derived-c
      - 14: ictcp
      Note: This value should be set along with all other color aspects.
            i.e. 'color-primaries', 'color-transfer', 'color-matrix',
            and 'color-range' should all be set.
  --color-range [INTEGER] (optional) [-1]
    : Color range
      - 0: limited color range ('tv' color range)
      - 1: full color range ('pc' color range)
      Note: This value should be set along with all other color aspects.
            i.e. 'color-primaries', 'color-transfer', 'color-matrix',
            and 'color-range' should all be set.
  --hash [FLAG] (optional) [Off]
    : embed frame hash value for conformance checking in decoding
  --master-display [STRING] (optional) [None]
    : mastering display color volume metadata
  --max-cll [STRING] (optional) [None]
    : content light level information metadata
[/code]
Haven't tested it, do you know whether it supports pipe input?
In case it did, it might be better to use this instead of ffmpeg.

What can decode this?

Cu Selur
----
Dev versions are in the 'experimental'-folder of my GoogleDrive, which is linked on the download page.
Reply
#3
I can do some legwork to find out more information and find answers to your questions.  I know that FFMPEG 8 supports encode and decode.  Android OS 16 has native support, as well as newer samsung devices.  It is primarily meant to be used as an intermediate codec.  I am hoping to replace Cineform HD with it.  OpenAPV is better with multicore systems to improve encoding speed.
Reply
#4
Thanks.
Please, also do some testing, but the main issue often finding useful documention. Smile
Uploaded the command line encoder to: https://www.mediafire.com/file/czkfb6hxw...pv.7z/file

Cu Selur
----
Dev versions are in the 'experimental'-folder of my GoogleDrive, which is linked on the download page.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)