.. -*- coding: utf-8; mode: rst -*-

.. _VIDIOC_G_JPEGCOMP:

******************************************
ioctl VIDIOC_G_JPEGCOMP, VIDIOC_S_JPEGCOMP
******************************************

Name
====

VIDIOC_G_JPEGCOMP - VIDIOC_S_JPEGCOMP


Synopsis
========

.. cpp:function:: int ioctl( int fd, int request, v4l2_jpegcompression *argp )

.. cpp:function:: int ioctl( int fd, int request, const v4l2_jpegcompression *argp )


Arguments
=========

``fd``
    File descriptor returned by :ref:`open() <func-open>`.

``request``
    VIDIOC_G_JPEGCOMP, VIDIOC_S_JPEGCOMP

``argp``


Description
===========

These ioctls are **deprecated**. New drivers and applications should use
:ref:`JPEG class controls <jpeg-controls>` for image quality and JPEG
markers control.

[to do]

Ronald Bultje elaborates:

APP is some application-specific information. The application can set it
itself, and it'll be stored in the JPEG-encoded fields (eg; interlacing
information for in an AVI or so). COM is the same, but it's comments,
like 'encoded by me' or so.

jpeg_markers describes whether the huffman tables, quantization tables
and the restart interval information (all JPEG-specific stuff) should be
stored in the JPEG-encoded fields. These define how the JPEG field is
encoded. If you omit them, applications assume you've used standard
encoding. You usually do want to add them.


.. tabularcolumns:: |p{1.2cm}|p{3.0cm}|p{13.3cm}|

.. _v4l2-jpegcompression:

.. flat-table:: struct v4l2_jpegcompression
    :header-rows:  0
    :stub-columns: 0
    :widths:       1 1 2


    -  .. row 1

       -  int

       -  ``quality``

       -  Deprecated. If
	  :ref:`V4L2_CID_JPEG_COMPRESSION_QUALITY <jpeg-quality-control>`
	  control is exposed by a driver applications should use it instead
	  and ignore this field.

    -  .. row 2

       -  int

       -  ``APPn``

       -

    -  .. row 3

       -  int

       -  ``APP_len``

       -

    -  .. row 4

       -  char

       -  ``APP_data``\ [60]

       -

    -  .. row 5

       -  int

       -  ``COM_len``

       -

    -  .. row 6

       -  char

       -  ``COM_data``\ [60]

       -

    -  .. row 7

       -  __u32

       -  ``jpeg_markers``

       -  See :ref:`jpeg-markers`. Deprecated. If
	  :ref:`V4L2_CID_JPEG_ACTIVE_MARKER <jpeg-active-marker-control>`
	  control is exposed by a driver applications should use it instead
	  and ignore this field.


.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}|

.. _jpeg-markers:

.. flat-table:: JPEG Markers Flags
    :header-rows:  0
    :stub-columns: 0
    :widths:       3 1 4


    -  .. row 1

       -  ``V4L2_JPEG_MARKER_DHT``

       -  (1<<3)

       -  Define Huffman Tables

    -  .. row 2

       -  ``V4L2_JPEG_MARKER_DQT``

       -  (1<<4)

       -  Define Quantization Tables

    -  .. row 3

       -  ``V4L2_JPEG_MARKER_DRI``

       -  (1<<5)

       -  Define Restart Interval

    -  .. row 4

       -  ``V4L2_JPEG_MARKER_COM``

       -  (1<<6)

       -  Comment segment

    -  .. row 5

       -  ``V4L2_JPEG_MARKER_APP``

       -  (1<<7)

       -  App segment, driver will always use APP0


Return Value
============

On success 0 is returned, on error -1 and the ``errno`` variable is set
appropriately. The generic error codes are described at the
:ref:`Generic Error Codes <gen-errors>` chapter.
