* [FFmpeg-devel] [PATCH v2 0/4] Add hevc alpha layer decoding basic support
@ 2023-01-06 15:52 Zhao Zhili
2023-02-28 9:00 ` "zhilizhao(赵志立)"
0 siblings, 1 reply; 5+ messages in thread
From: Zhao Zhili @ 2023-01-06 15:52 UTC (permalink / raw)
To: ffmpeg-devel; +Cc: Zhao Zhili
From: Zhao Zhili <zhilizhao@tencent.com>
v2:
1. Check vps_max_layers and vps_max_layer_id inside hevc decoder
2. Add hevc_extract_layer bsf to do the job rather than modifing hevc_metadata,
3. Check vps_max_layers_minus1 and vps_max_layer_id inside bsf
4. Update vps_max_layers_minus1 and vps_max_layer_id when rewrite as base layer
5. vps_extension should be updated rather than drop entirely, add a TODO
---------------------------------------------
1. Don't drop nal->nuh_layer_id > 0 until decoder.
2. Make hevcdec able to decode a selected layer.
3. Add hevc_extract_layer bsf to extract a selected layer.
Partially fix #7965. There is a sample in ticket #7965 which can be used to test
the patchset. Or use videotoolbox encoder to create a sample (FFmpeg needs to be
patched first, "avutil/hwcontext_videotoolbox: BGRA should be full range"
http://ffmpeg.org/pipermail/ffmpeg-devel/2023-January/305252.html), e.g.,
./ffmpeg -i cctv.mp4 \
-i pig.mp4 \
-c:v hevc_videotoolbox \
-alpha_quality 0.75 \
-filter_complex '[1:v]scale=640x480[v1];[0:v][v1]alphamerge[v2]' \
-map [v2] -an -t 60 \
-pix_fmt bgra \
-b:v 4M \
-tag:v hvc1 \
alpha.mp4 -y
Now it's able to use two decoders to decode the base layer and alpha
layer, and then combine the results, e.g.,
./ffmpeg -i alpha.mp4 \
-strict -2 -nuh_layer_id 1 -i alpha.mp4 \
-frames 60 \
-filter_complex '[0:v][1:v]alphamerge[vout]' \
-map '[vout]' -an test-%d.png
It only works with software decoder.
hevc_extract_layer can be used together with hardware decoder. The following
example is how to extract the alpha layer and rewrite as base layer:
./ffmpeg -i alpha.mp4 \
-an -c:v copy \
-bsf:v hevc_extract_layer=nuh_layer_id=1 \
test.mp4
Zhao Zhili (4):
avcodec/hevc_parse: keep nal->nuh_layer_id > 0
avcodec/cbs_h2645: keep nal->nuh_layer_id > 0
avcodec/hevcdec: add nuh_layer_id option
avcodec: add hevc_extract_layer bsf
configure | 1 +
doc/bitstream_filters.texi | 12 +++
libavcodec/Makefile | 1 +
libavcodec/bitstream_filters.c | 1 +
libavcodec/cbs_h2645.c | 3 -
libavcodec/hevc_extract_layer_bsf.c | 126 ++++++++++++++++++++++++++++
libavcodec/hevc_parse.c | 2 -
libavcodec/hevcdec.c | 56 ++++++++++++-
libavcodec/version.h | 2 +-
9 files changed, 197 insertions(+), 7 deletions(-)
create mode 100644 libavcodec/hevc_extract_layer_bsf.c
--
2.25.1
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [FFmpeg-devel] [PATCH v2 0/4] Add hevc alpha layer decoding basic support
2023-01-06 15:52 [FFmpeg-devel] [PATCH v2 0/4] Add hevc alpha layer decoding basic support Zhao Zhili
@ 2023-02-28 9:00 ` "zhilizhao(赵志立)"
2023-03-02 10:11 ` Anton Khirnov
0 siblings, 1 reply; 5+ messages in thread
From: "zhilizhao(赵志立)" @ 2023-02-28 9:00 UTC (permalink / raw)
To: FFmpeg development discussions and patches
> On Jan 6, 2023, at 23:52, Zhao Zhili <quinkblack@foxmail.com> wrote:
>
> From: Zhao Zhili <zhilizhao@tencent.com>
>
> v2:
> 1. Check vps_max_layers and vps_max_layer_id inside hevc decoder
> 2. Add hevc_extract_layer bsf to do the job rather than modifing hevc_metadata,
> 3. Check vps_max_layers_minus1 and vps_max_layer_id inside bsf
> 4. Update vps_max_layers_minus1 and vps_max_layer_id when rewrite as base layer
> 5. vps_extension should be updated rather than drop entirely, add a TODO
Will push soon if there's no objections.
>
> ---------------------------------------------
> 1. Don't drop nal->nuh_layer_id > 0 until decoder.
> 2. Make hevcdec able to decode a selected layer.
> 3. Add hevc_extract_layer bsf to extract a selected layer.
>
> Partially fix #7965. There is a sample in ticket #7965 which can be used to test
> the patchset. Or use videotoolbox encoder to create a sample (FFmpeg needs to be
> patched first, "avutil/hwcontext_videotoolbox: BGRA should be full range"
> http://ffmpeg.org/pipermail/ffmpeg-devel/2023-January/305252.html), e.g.,
>
> ./ffmpeg -i cctv.mp4 \
> -i pig.mp4 \
> -c:v hevc_videotoolbox \
> -alpha_quality 0.75 \
> -filter_complex '[1:v]scale=640x480[v1];[0:v][v1]alphamerge[v2]' \
> -map [v2] -an -t 60 \
> -pix_fmt bgra \
> -b:v 4M \
> -tag:v hvc1 \
> alpha.mp4 -y
>
>
> Now it's able to use two decoders to decode the base layer and alpha
> layer, and then combine the results, e.g.,
>
> ./ffmpeg -i alpha.mp4 \
> -strict -2 -nuh_layer_id 1 -i alpha.mp4 \
> -frames 60 \
> -filter_complex '[0:v][1:v]alphamerge[vout]' \
> -map '[vout]' -an test-%d.png
>
> It only works with software decoder.
>
> hevc_extract_layer can be used together with hardware decoder. The following
> example is how to extract the alpha layer and rewrite as base layer:
>
> ./ffmpeg -i alpha.mp4 \
> -an -c:v copy \
> -bsf:v hevc_extract_layer=nuh_layer_id=1 \
> test.mp4
>
> Zhao Zhili (4):
> avcodec/hevc_parse: keep nal->nuh_layer_id > 0
> avcodec/cbs_h2645: keep nal->nuh_layer_id > 0
> avcodec/hevcdec: add nuh_layer_id option
> avcodec: add hevc_extract_layer bsf
>
> configure | 1 +
> doc/bitstream_filters.texi | 12 +++
> libavcodec/Makefile | 1 +
> libavcodec/bitstream_filters.c | 1 +
> libavcodec/cbs_h2645.c | 3 -
> libavcodec/hevc_extract_layer_bsf.c | 126 ++++++++++++++++++++++++++++
> libavcodec/hevc_parse.c | 2 -
> libavcodec/hevcdec.c | 56 ++++++++++++-
> libavcodec/version.h | 2 +-
> 9 files changed, 197 insertions(+), 7 deletions(-)
> create mode 100644 libavcodec/hevc_extract_layer_bsf.c
>
> --
> 2.25.1
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [FFmpeg-devel] [PATCH v2 0/4] Add hevc alpha layer decoding basic support
2023-02-28 9:00 ` "zhilizhao(赵志立)"
@ 2023-03-02 10:11 ` Anton Khirnov
2023-03-02 10:41 ` "zhilizhao(赵志立)"
0 siblings, 1 reply; 5+ messages in thread
From: Anton Khirnov @ 2023-03-02 10:11 UTC (permalink / raw)
To: FFmpeg development discussions and patches
Quoting zhilizhao(赵志立) (2023-02-28 10:00:15)
>
> > On Jan 6, 2023, at 23:52, Zhao Zhili <quinkblack@foxmail.com> wrote:
> >
> > From: Zhao Zhili <zhilizhao@tencent.com>
> >
> > v2:
> > 1. Check vps_max_layers and vps_max_layer_id inside hevc decoder
> > 2. Add hevc_extract_layer bsf to do the job rather than modifing hevc_metadata,
> > 3. Check vps_max_layers_minus1 and vps_max_layer_id inside bsf
> > 4. Update vps_max_layers_minus1 and vps_max_layer_id when rewrite as base layer
> > 5. vps_extension should be updated rather than drop entirely, add a TODO
>
> Will push soon if there's no objections.
Can't we do this without weird bitstream filtes and obscure options
leaking to the user? It's all signalled in the bitstream in a rather
straightforward way. Just extend hevcdec to decode it.
--
Anton Khirnov
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [FFmpeg-devel] [PATCH v2 0/4] Add hevc alpha layer decoding basic support
2023-03-02 10:11 ` Anton Khirnov
@ 2023-03-02 10:41 ` "zhilizhao(赵志立)"
2023-03-14 13:30 ` Anton Khirnov
0 siblings, 1 reply; 5+ messages in thread
From: "zhilizhao(赵志立)" @ 2023-03-02 10:41 UTC (permalink / raw)
To: FFmpeg development discussions and patches
> On Mar 2, 2023, at 18:11, Anton Khirnov <anton@khirnov.net> wrote:
>
> Quoting zhilizhao(赵志立) (2023-02-28 10:00:15)
>>
>>> On Jan 6, 2023, at 23:52, Zhao Zhili <quinkblack@foxmail.com> wrote:
>>>
>>> From: Zhao Zhili <zhilizhao@tencent.com>
>>>
>>> v2:
>>> 1. Check vps_max_layers and vps_max_layer_id inside hevc decoder
>>> 2. Add hevc_extract_layer bsf to do the job rather than modifing hevc_metadata,
>>> 3. Check vps_max_layers_minus1 and vps_max_layer_id inside bsf
>>> 4. Update vps_max_layers_minus1 and vps_max_layer_id when rewrite as base layer
>>> 5. vps_extension should be updated rather than drop entirely, add a TODO
>>
>> Will push soon if there's no objections.
>
> Can't we do this without weird bitstream filtes and obscure options
> leaking to the user? It's all signalled in the bitstream in a rather
> straightforward way. Just extend hevcdec to decode it.
Yes we could.
1. Add support to our software decoder is possible, with a big refactor.
2. Add support to hwaccel decoders like videotoolbox requires a refactor of
hevcdec too.
I have asked in the RFC:
"Is there any plan/interesting to add fullly support inside our hevc
decoder? If the answer is yes, then the patchset is less useful."
http://ffmpeg.org/pipermail/ffmpeg-devel/2023-January/305342.html
I indeed tried to refactor hevcdec first. But the mixing of long term
states and temporary states inside HEVCContext makes it not easy to do.
I’m glad to work on it (together) if someone has a clear idea.
By the way, other decoders which doesn’t support layered decoding could
still benefit from the 'weird bitstream filter'.
>
> --
> Anton Khirnov
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [FFmpeg-devel] [PATCH v2 0/4] Add hevc alpha layer decoding basic support
2023-03-02 10:41 ` "zhilizhao(赵志立)"
@ 2023-03-14 13:30 ` Anton Khirnov
0 siblings, 0 replies; 5+ messages in thread
From: Anton Khirnov @ 2023-03-14 13:30 UTC (permalink / raw)
To: FFmpeg development discussions and patches
Quoting zhilizhao(赵志立) (2023-03-02 11:41:30)
>
>
> > On Mar 2, 2023, at 18:11, Anton Khirnov <anton@khirnov.net> wrote:
> >
> > Quoting zhilizhao(赵志立) (2023-02-28 10:00:15)
> >>
> >>> On Jan 6, 2023, at 23:52, Zhao Zhili <quinkblack@foxmail.com> wrote:
> >>>
> >>> From: Zhao Zhili <zhilizhao@tencent.com>
> >>>
> >>> v2:
> >>> 1. Check vps_max_layers and vps_max_layer_id inside hevc decoder
> >>> 2. Add hevc_extract_layer bsf to do the job rather than modifing hevc_metadata,
> >>> 3. Check vps_max_layers_minus1 and vps_max_layer_id inside bsf
> >>> 4. Update vps_max_layers_minus1 and vps_max_layer_id when rewrite as base layer
> >>> 5. vps_extension should be updated rather than drop entirely, add a TODO
> >>
> >> Will push soon if there's no objections.
> >
> > Can't we do this without weird bitstream filtes and obscure options
> > leaking to the user? It's all signalled in the bitstream in a rather
> > straightforward way. Just extend hevcdec to decode it.
>
> Yes we could.
>
> 1. Add support to our software decoder is possible, with a big refactor.
> 2. Add support to hwaccel decoders like videotoolbox requires a refactor of
> hevcdec too.
>
> I have asked in the RFC:
>
> "Is there any plan/interesting to add fullly support inside our hevc
> decoder? If the answer is yes, then the patchset is less useful."
>
> http://ffmpeg.org/pipermail/ffmpeg-devel/2023-January/305342.html
>
> I indeed tried to refactor hevcdec first. But the mixing of long term
> states and temporary states inside HEVCContext makes it not easy to do.
> I’m glad to work on it (together) if someone has a clear idea.
>
> By the way, other decoders which doesn’t support layered decoding could
> still benefit from the 'weird bitstream filter'.
My concern is that this "temporary hack" will get entrenched as the
solution everyone uses and will actively prevent proper solutions from
being implemented.
It should not be too complicated to split out per-layer state into its
own context.
--
Anton Khirnov
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2023-03-14 13:30 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-01-06 15:52 [FFmpeg-devel] [PATCH v2 0/4] Add hevc alpha layer decoding basic support Zhao Zhili
2023-02-28 9:00 ` "zhilizhao(赵志立)"
2023-03-02 10:11 ` Anton Khirnov
2023-03-02 10:41 ` "zhilizhao(赵志立)"
2023-03-14 13:30 ` Anton Khirnov
Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
This inbox may be cloned and mirrored by anyone:
git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git
# If you have public-inbox 1.1+ installed, you may
# initialize and index your mirror using the following commands:
public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
ffmpegdev@gitmailbox.com
public-inbox-index ffmpegdev
Example config snippet for mirrors.
AGPL code for this site: git clone https://public-inbox.org/public-inbox.git