ioctl VIDIOC_ENCODER_CMD, VIDIOC_TRY_ENCODER_CMD
&manvol;

# VIDIOC_ENCODER_CMD

# VIDIOC_TRY_ENCODER_CMD

Execute an encoder command

    	int ioctl
    	int fd
    	int request
    	struct v4l2_encoder_cmd *argp

## Arguments

`fd`

  &fd;

`request`

  VIDIOC_ENCODER_CMD, VIDIOC_TRY_ENCODER_CMD

`argp`

## Description

### Experimental

This is an experimental interface and may change in the future.

These ioctls control an audio/video (usually MPEG-) encoder. `VIDIOC_ENCODER_CMD` sends a command to the encoder, `VIDIOC_TRY_ENCODER_CMD` can be used to try a command without actually executing it.

To send a command applications must initialize all fields of a &v4l2-encoder-cmd; and call `VIDIOC_ENCODER_CMD` or `VIDIOC_TRY_ENCODER_CMD` with a pointer to this structure.

The cmd field must contain the command code. The flags field is currently only used by the STOP command and contains one bit: If the `V4L2_ENC_CMD_STOP_AT_GOP_END` flag is set, encoding will continue until the end of the current Group Of Pictures, otherwise it will stop immediately.

A `read`() call sends a START command to the encoder if it has not been started yet. After a STOP command, `read`() calls will read the remaining data buffered by the driver. When the buffer is empty, `read`() will return zero and the next `read`() call will restart the encoder.

A `close`() call sends an immediate STOP to the encoder, and all buffered data is discarded.

These ioctls are optional, not all drivers may support them. They were introduced in Linux 2.6.21.

### struct v4l2_encoder_cmd

&cs-str;
__u32 | cmd | The encoder command, see .
__u32 | flags | Flags to go with the command, see . If no flags are defined for this command, drivers and applications must set this field to zero.
__u32 | data[8] | Reserved for future extensions. Drivers and applications must set the array to zero.

### Encoder Commands

&cs-def;
`V4L2_ENC_CMD_START` | 0 | Start the encoder. When the encoder is already running or paused, this command does nothing. No flags are defined for this command.
`V4L2_ENC_CMD_STOP` | 1 | Stop the encoder. When the `V4L2_ENC_CMD_STOP_AT_GOP_END` flag is set, encoding will continue until the end of the current Group Of Pictures, otherwise encoding will stop immediately. When the encoder is already stopped, this command does nothing.
`V4L2_ENC_CMD_PAUSE` | 2 | Pause the encoder. When the encoder has not been started yet, the driver will return an &EPERM;. When the encoder is already paused, this command does nothing. No flags are defined for this command.
`V4L2_ENC_CMD_RESUME` | 3 | Resume encoding after a PAUSE command. When the encoder has not been started yet, the driver will return an &EPERM;. When the encoder is already running, this command does nothing. No flags are defined for this command.

### Encoder Command Flags

&cs-def;
`V4L2_ENC_CMD_STOP_AT_GOP_END` | 0x0001 | Stop encoding at the end of the current Group Of Pictures, rather than immediately.

&return-value;

EINVAL

  The cmd field is invalid.

EPERM

  The application sent a PAUSE or RESUME command when the encoder was not running.