[FFmpeg-devel] [PATCHv3 4/4] libavcodec: v4l2: add support for v4l2 mem2mem codecs

Mark Thompson sw at jkqxz.net
Tue Aug 8 01:16:09 EEST 2017


On 07/08/17 20:24, Jorge Ramirez wrote:
> On 08/03/2017 01:53 AM, Mark Thompson wrote:
>>> +    default:
>>> +        return 0;
>>> +    }
>>> +
>>> +    SET_V4L_EXT_CTRL(value, qmin, avctx->qmin, "minimum video quantizer scale");
>>> +    SET_V4L_EXT_CTRL(value, qmax, avctx->qmax, "maximum video quantizer scale");
>>> +
>>> +    return 0;
>>> +}
>> This doesn't set extradata - you need to extract the codec global headers (such as H.264 SPS and PPS) at init time to be able to write correct files for some codecs (such as H.264) with muxers requiring global headers (such as MP4).  It kindof works without it, but the files created will not conform and will not be usable on some players.
>>
> ah that might explain some things (when I play back the encoded video the quality is pretty lousy)
> is there already some code I can use as a reference? I might be out of my depth here so any help will be more than welcome

Methods used by other codecs to extract the headers:

Something to call directly to get them:
* x264_encoder_headers in libx264: <http://git.videolan.org/?p=x264.git;a=blob;f=x264.h#l895>.
* nvEncGetSequenceParams in nvenc: <http://git.videolan.org/?p=ffmpeg.git;a=blob;f=libavcodec/nvenc.c;h=f79b9a502e33c66e62513c56e54e9cec041e9d45;hb=HEAD#l1282>.

They appear on the front of the stream and can be read from there at init time:
* OMX_BUFFERFLAG_CODECCONFIG in OpenMAX IL: <http://git.videolan.org/?p=ffmpeg.git;a=blob;f=libavcodec/omx.c;h=19b4f33836b68fabe7be921ca959c619dd28e535;hb=HEAD#l685>.

Know the answer magically in advance (probably not applicable here):
* VAAPI makes the user write their own headers, so we can just write those to the extradata directly as well: <http://git.videolan.org/?p=ffmpeg.git;a=blob;f=libavcodec/vaapi_encode.c;h=2de5f76cabf329c92272627ee13ab3c8689806d3;hb=HEAD#l1471>.


More information about the ffmpeg-devel mailing list