Opened 9 years ago
Closed 7 years ago
#6629 closed defect (fixed)
Assertion failed when specifying h264 format on v4l2 device that does NOT support h264
| Reported by: | Mr-Dave | Owned by: | |
|---|---|---|---|
| Priority: | important | Component: | avdevice |
| Version: | git-master | Keywords: | v4l2 crash abort |
| Cc: | Blocked By: | ||
| Blocking: | Reproduced by developer: | no | |
| Analyzed by developer: | no |
Description
Summary of the bug:
When opening the format context to a v4l2 device and have specified a format which the device does NOT support, the avformat_open_input assertion fails.
How to reproduce:
Sample code using a device that does NOT support h264
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <libavformat/avformat.h>
#include <libavdevice/avdevice.h>
#include <libavutil/avutil.h>
int main (int argc, const char **argv) {
AVFormatContext *format_context;
AVDictionary *opts = 0;
int retcd;
char errstr[128];
char optfmt[8];
av_register_all();
avcodec_register_all();
avformat_network_init();
avdevice_register_all();
format_context = avformat_alloc_context();
format_context->iformat = av_find_input_format("video4linux2");
sprintf(optfmt, "%s","h264");
av_dict_set(&opts, "input_format", optfmt, 0);
retcd = avformat_open_input(&format_context, "/dev/video0", NULL, &opts);
fprintf(stderr,"Format context is open: \n");
if (retcd < 0){
av_strerror(retcd, errstr, sizeof(errstr));
fprintf(stderr,"error opening file: %s \n",errstr);
av_dict_free(&opts);
return -1;
}
fprintf(stderr,"Device is open: \n");
avformat_close_input(&format_context);
return 0;
}
Output:
./sample [video4linux2,v4l2 @ 0x3d4a420] Cannot find a proper format for codec 'h264' (id 28), pixel format 'none' (id -1) Assertion *codec_id != AV_CODEC_ID_NONE failed at libavdevice/v4l2.c:808 Aborted (core dumped)
Expected result:
avformat_open_input would return a error code.
ffmpeg version:
/home/dave/ffmpeg_33/bin/ffmpeg
ffmpeg version 3.3 Copyright (c) 2000-2017 the FFmpeg developers
built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.4) 20160609
configuration: --prefix=/home/dave/ffmpeg_33 --pkg-config-flags=--static --extra-cflags=-I/home/dave/ffmpeg_33/include --extra-ldflags=-L/home/dave/ffmpeg_33/lib --bindir=/home/dave/ffmpeg_33/bin --enable-gpl --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-nonfree
libavutil 55. 58.100 / 55. 58.100
libavcodec 57. 89.100 / 57. 89.100
libavformat 57. 71.100 / 57. 71.100
libavdevice 57. 6.100 / 57. 6.100
libavfilter 6. 82.100 / 6. 82.100
libswscale 4. 6.100 / 4. 6.100
libswresample 2. 7.100 / 2. 7.100
libpostproc 54. 5.100 / 54. 5.100
Hyper fast Audio and Video encoder
usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...
Change History (2)
comment:1 by , 9 years ago
| Keywords: | crash abort added; avdevice input_format removed |
|---|---|
| Priority: | normal → important |
comment:2 by , 7 years ago
| Resolution: | → fixed |
|---|---|
| Status: | new → closed |
Note:
See TracTickets
for help on using tickets.



Should be fixed by Andriy Gelman in 7b2ce27e56cfb4c55490035283a687251061bb50, thank you for the report!