[FFmpeg-devel] [PATCHv8] libavcodec: v4l2: add support for v4l2 mem2mem codecs

Jorge Ramirez jorge.ramirez-ortiz at linaro.org
Sun Sep 3 17:36:59 EEST 2017


On 09/03/2017 02:27 AM, Mark Thompson wrote:
>> +    }
>> +
>> +    /* 2.1 update the AVCodecContext */
>> +    avctx->pix_fmt = ff_v4l2_v4l2fmt_to_avfmt(capture->format.fmt.pix_mp.pixelformat, AV_CODEC_ID_RAWVIDEO);
>> +    capture->av_pix_fmt = avctx->pix_fmt;
>> +
>> +    /* 3. set the crop parameters */
>> +    selection.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
>> +    selection.r.height = avctx->coded_height;
>> +    selection.r.width = avctx->coded_width;> +    ret = ioctl(s->fd, VIDIOC_S_SELECTION, &selection);
>> +    if (!ret) {
>> +        ret = ioctl(s->fd, VIDIOC_G_SELECTION, &selection);
>> +        if (ret) {
>> +            av_log(avctx, AV_LOG_ERROR, "VIDIOC_G_SELECTION ioctl\n");
>> +        } else {
>> +            av_log(avctx, AV_LOG_DEBUG, "crop output %dx%d\n", selection.r.width, selection.r.height);
>> +            /* update the size of the resulting frame */
>> +            capture->height = selection.r.height;
>> +            capture->width  = selection.r.width;
>> +        }
>> +    }
> What is this trying to do?  I'm not sure that the coded_width|height values are something you should be using here - in many cases they are larger than the actual output (what does 1920x1080 H.264, which is coded as 1920x1088, do?).  Also, while they are often sensible for the stream if it comes from lavf and a normal file container, they need not be set at all here (0x0).
>

I am just trying to crop the decoded frame size to what I understood are 
the expected dimensions; if you look at buffer_ops_v4l2buf_to_avframe 
(used to return the dequeued buffer to the frame) we use these variables 
to return the frame dimensions back to ffmpeg.

When ffplaying 1920x1080 this is what xwininfo (window information 
utility for X) returns:

[jramirez at igloo ~]$ xwininfo

xwininfo: Please select the window about which you
           would like information by clicking the
           mouse in that window.

xwininfo: Window id: 0x560000c "Big Buck Bunny, Sunflower version - 
/home/linaro/Videos/avc1.bbb_sunflower_1080p_30fps_normal.mp4"

   Absolute upper-left X:  2240
   Absolute upper-left Y:  204
   Relative upper-left X:  0
   Relative upper-left Y:  0
   Width: 1920
   Height: 1088
   Depth: 24
   Visual: 0xeb
   Visual Class: DirectColor
   Border width: 0
   Class: InputOutput
   Colormap: 0x560000b (not installed)
   Bit Gravity State: ForgetGravity
   Window Gravity State: NorthWestGravity
   Backing Store State: NotUseful
   Save Under State: no
   Map State: IsViewable
   Override Redirect State: no
   Corners:  +2240+204  -2240+204  -2240-148  +2240-148
   -geometry 1920x1088+2230+166


maybe it works out nicely because the frames returned by the decoder are 
also 32 byte aligned?
this is what is encoded in the video

[jramirez at igloo Videos]$ ffprobe -show_frames 
avc1.bbb_sunflower_1080p_30fps_normal.mp4 | more

        1 [FRAME]
        2 media_type=video
        3 stream_index=0
        4 key_frame=1
        5 pkt_pts=2000
        6 pkt_pts_time=0.066667
        7 pkt_dts=2000
        8 pkt_dts_time=0.066667
        9 best_effort_timestamp=2000
       10 best_effort_timestamp_time=0.066667
       11 pkt_duration=1000
       12 pkt_duration_time=0.033333
       13 pkt_pos=236997
       14 pkt_size=1116
       15 width=1920
       16 height=1080
       17 pix_fmt=yuv420p
       18 sample_aspect_ratio=1:1
       19 pict_type=I
       20 coded_picture_number=0
       21 display_picture_number=0
       22 interlaced_frame=0
       23 top_field_first=0
       24 repeat_pict=0
       25 [/FRAME]


so if this is not correct, could you suggest or hint for a proper way 
please?





More information about the ffmpeg-devel mailing list