Opened 3 years ago

Closed 3 years ago

Last modified 3 years ago

#9186 closed defect (fixed)

[regression] JPEG Encode Broken since 059fc2d9da53

Reported by: U. Artie Eoff Owned by:
Priority: important Component: avcodec
Version: git-master Keywords: mjpeg vaapi qsv regression
Cc: andreas.rheinhardt@outlook.com Blocked By:
Blocking: Reproduced by developer: no
Analyzed by developer: no

Description

Summary of the bug:

JPEG encode with mjpeg_vaapi or mjpeg_qsv broken since:

commit 059fc2d9da5364627613fb3e6424079e14dbdfd3
Author: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
Date:   Tue Apr 6 03:01:14 2021 +0200

    avcodec/mjpegenc: Include all supported pix_fmts in mpegenc pix_fmts
    
    Currently said list contains only the pixel formats that are always
    supported irrespective of the range and the value of
    strict_std_compliance. This makes the MJPEG encoder an outlier as all
    other codecs put all potentially supported pixel formats into said list
    and error out if the chosen pixel format is unsupported. This commit
    brings it therefore in line with the other encoders.
    
    The behaviour of fftools/ffmpeg_filter.c has been preserved. A more
    informed decision would be possible if colour range were available
    at this point, but it isn't.
    
    Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>

I have not tested other jpeg encoder plugins.

How to reproduce:

mjpeg_vaapi:

% ffmpeg -hwaccel vaapi -vaapi_device /dev/dri/renderD128 \
  -f lavfi -i yuvtestsrc=duration=5:size=qcif:rate=30 \
  -vf "format=nv12,hwupload" -c:v mjpeg_vaapi \
  -y output.mjpeg

ffmpeg version N-101944-g33db0cbfd083 Copyright (c) 2000-2021 the FFmpeg developers
  built with gcc 9 (GCC)
  configuration: --prefix=/home/uaeoff/Work/workspace/media/install --disable-static --enable-shared --enable-libdrm --enable-vaapi --enable-libmfx --disable-amf --disable-audiotoolbox --disable-cuda --disable-cuda-sdk --disable-cuvid --disable-d3d11va --disable-dxva2 --disable-libnpp --disable-mmal --disable-nvdec --disable-nvenc --disable-omx --disable-omx-rpi --disable-rkmpp --disable-v4l2-m2m --disable-vdpau --disable-videotoolbox --enable-gpl --enable-libx264 --enable-libx265
  libavutil      56. 72.100 / 56. 72.100
  libavcodec     58.136.101 / 58.136.101
  libavformat    58. 78.100 / 58. 78.100
  libavdevice    58. 14.100 / 58. 14.100
  libavfilter     7.111.100 /  7.111.100
  libswscale      5. 10.100 /  5. 10.100
  libswresample   3. 10.100 /  3. 10.100
  libpostproc    55. 10.100 / 55. 10.100
Input #0, lavfi, from 'yuvtestsrc=duration=5:size=qcif:rate=30':
  Duration: N/A, start: 0.000000, bitrate: N/A
  Stream #0:0: Video: rawvideo (444P / 0x50343434), yuv444p, 176x144 [SAR 1:1 DAR 11:9], 30 tbr, 30 tbn, 30 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (rawvideo (native) -> mjpeg (mjpeg_vaapi))
Press [q] to stop, [?] for help
Impossible to convert between the formats supported by the filter 'Parsed_hwupload_1' and the filter 'auto_scaler_1'
Error reinitializing filters!
Failed to inject frame into filter network: Function not implemented
Error while processing the decoded data for stream #0:0
Conversion failed!

mjpeg_qsv:

fmpeg -init_hw_device qsv=qsv:hw -qsv_device /dev/dri/renderD128 \
  -hwaccel qsv -filter_hw_device qsv -hwaccel_output_format qsv \
  -f lavfi -i smptebars=duration=5:size=qcif:rate=1 \
  -vf 'format=nv12,hwupload=extra_hw_frames=120' -c:v mjpeg_qsv \
  -y output.mjpeg

ffmpeg version N-101944-g33db0cbfd083 Copyright (c) 2000-2021 the FFmpeg developers
  built with gcc 9 (GCC)
  configuration: --prefix=/home/uaeoff/Work/workspace/media/install --disable-static --enable-shared --enable-libdrm --enable-vaapi --enable-libmfx --disable-amf --disable-audiotoolbox --disable-cuda --disable-cuda-sdk --disable-cuvid --disable-d3d11va --disable-dxva2 --disable-libnpp --disable-mmal --disable-nvdec --disable-nvenc --disable-omx --disable-omx-rpi --disable-rkmpp --disable-v4l2-m2m --disable-vdpau --disable-videotoolbox --enable-gpl --enable-libx264 --enable-libx265
  libavutil      56. 72.100 / 56. 72.100
  libavcodec     58.136.101 / 58.136.101
  libavformat    58. 78.100 / 58. 78.100
  libavdevice    58. 14.100 / 58. 14.100
  libavfilter     7.111.100 /  7.111.100
  libswscale      5. 10.100 /  5. 10.100
  libswresample   3. 10.100 /  3. 10.100
  libpostproc    55. 10.100 / 55. 10.100
Input #0, lavfi, from 'smptebars=duration=5:size=qcif:rate=1':
  Duration: N/A, start: 0.000000, bitrate: N/A
  Stream #0:0: Video: rawvideo (I420 / 0x30323449), yuv420p, 176x144 [SAR 1:1 DAR 11:9], 1 fps, 1 tbr, 1 tbn, 1 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (rawvideo (native) -> mjpeg (mjpeg_qsv))
Press [q] to stop, [?] for help
Impossible to convert between the formats supported by the filter 'Parsed_hwupload_1' and the filter 'auto_scaler_1'
Error reinitializing filters!
Failed to inject frame into filter network: Function not implemented
Error while processing the decoded data for stream #0:0
Conversion failed!

Software stack:

libva (master) heads/master-0-gfb31fe67f303 
gmmlib (master) heads/master-0-ge4234d0639cf 
intel-vaapi-driver (master) heads/master-0-gd87db2111a33 
intel-media-driver (master) heads/master-0-g4cd769caa440 
msdk (master) heads/master-0-g6ca8b3be0770 
ffmpeg (master) heads/master-0-g33db0cbfd083 

Change History (5)

comment:2 by U. Artie Eoff, 3 years ago

The patch works for me!

comment:3 by Carl Eugen Hoyos, 3 years ago

Keywords: regression added; jpeg encode removed
Priority: criticalimportant

comment:4 by Carl Eugen Hoyos, 3 years ago

Resolution: fixed
Status: newclosed

comment:5 by Carl Eugen Hoyos, 3 years ago

Keywords: vaapi qsv added
Note: See TracTickets for help on using tickets.