diff options
author | Florian Fainelli <florian@openwrt.org> | 2014-02-28 20:30:08 +0000 |
---|---|---|
committer | Florian Fainelli <florian@openwrt.org> | 2014-02-28 20:30:08 +0000 |
commit | bb39b8d99aae1f7eb13a97bd874838da91080de6 (patch) | |
tree | 3046f53937c0bc5dc13e2b2ab7b688a1932199bf /target/linux/brcm2708/patches-3.10/0139-V4L2-Add-support-for-inline-H264-headers.patch | |
parent | c6c0d09f85c211560a1405441925681cfa25e8b1 (diff) | |
download | mtk-20170518-bb39b8d99aae1f7eb13a97bd874838da91080de6.zip mtk-20170518-bb39b8d99aae1f7eb13a97bd874838da91080de6.tar.gz mtk-20170518-bb39b8d99aae1f7eb13a97bd874838da91080de6.tar.bz2 |
brcm2708: update against latest rpi-3.10.y branch
Update our copies of the brcm2708 patches to the latest rpi-3.10-y
rebased against linux-3.10.y stable (3.10.32). This should hopefully
make it easier for us in the future to leverage the raspberry/rpi-*
branches.
Signed-off-by: Florian Fainelli <florian@openwrt.org>
SVN-Revision: 39770
Diffstat (limited to 'target/linux/brcm2708/patches-3.10/0139-V4L2-Add-support-for-inline-H264-headers.patch')
-rw-r--r-- | target/linux/brcm2708/patches-3.10/0139-V4L2-Add-support-for-inline-H264-headers.patch | 298 |
1 files changed, 298 insertions, 0 deletions
diff --git a/target/linux/brcm2708/patches-3.10/0139-V4L2-Add-support-for-inline-H264-headers.patch b/target/linux/brcm2708/patches-3.10/0139-V4L2-Add-support-for-inline-H264-headers.patch new file mode 100644 index 0000000..8583166 --- /dev/null +++ b/target/linux/brcm2708/patches-3.10/0139-V4L2-Add-support-for-inline-H264-headers.patch @@ -0,0 +1,298 @@ +From aceebc39876d7cec8f2b4289a09ddeb94a5697d9 Mon Sep 17 00:00:00 2001 +From: Dave Stevenson <dsteve@broadcom.com> +Date: Mon, 9 Dec 2013 11:03:54 +0000 +Subject: [PATCH 139/174] V4L2: Add support for inline H264 headers + +Add support for V4L2_CID_MPEG_VIDEO_REPEAT_SEQ_HEADER +to control H264 inline headers. +Requires firmware fix to work correctly, otherwise format +has to be set to H264 before this parameter is set. + +Signed-off-by: Dave Stevenson <dsteve@broadcom.com> +--- + drivers/media/platform/bcm2835/bcm2835-camera.h | 2 +- + drivers/media/platform/bcm2835/controls.c | 115 ++++++++++++++++++----- + drivers/media/platform/bcm2835/mmal-parameters.h | 11 ++- + 3 files changed, 103 insertions(+), 25 deletions(-) + +--- a/drivers/media/platform/bcm2835/bcm2835-camera.h ++++ b/drivers/media/platform/bcm2835/bcm2835-camera.h +@@ -15,7 +15,7 @@ + * core driver device + */ + +-#define V4L2_CTRL_COUNT 20 /* number of v4l controls */ ++#define V4L2_CTRL_COUNT 21 /* number of v4l controls */ + + enum { + MMAL_COMPONENT_CAMERA = 0, +--- a/drivers/media/platform/bcm2835/controls.c ++++ b/drivers/media/platform/bcm2835/controls.c +@@ -96,6 +96,7 @@ struct bm2835_mmal_v4l2_ctrl { + const s64 *imenu; /* integer menu array */ + u32 mmal_id; /* mmal parameter id */ + bm2835_mmal_v4l2_ctrl_cb *setter; ++ bool ignore_errors; + }; + + struct v4l2_to_mmal_effects_setting { +@@ -606,12 +607,29 @@ static int ctrl_set_image_encode_output( + &u32_value, sizeof(u32_value)); + } + ++static int ctrl_set_video_encode_param_output(struct bm2835_mmal_dev *dev, ++ struct v4l2_ctrl *ctrl, ++ const struct bm2835_mmal_v4l2_ctrl *mmal_ctrl) ++{ ++ u32 u32_value; ++ struct vchiq_mmal_port *vid_enc_ctl; ++ ++ vid_enc_ctl = &dev->component[MMAL_COMPONENT_VIDEO_ENCODE]->output[0]; ++ ++ u32_value = ctrl->val; ++ ++ return vchiq_mmal_port_parameter_set(dev->instance, vid_enc_ctl, ++ mmal_ctrl->mmal_id, ++ &u32_value, sizeof(u32_value)); ++} ++ + static int bm2835_mmal_s_ctrl(struct v4l2_ctrl *ctrl) + { + struct bm2835_mmal_dev *dev = + container_of(ctrl->handler, struct bm2835_mmal_dev, + ctrl_handler); + const struct bm2835_mmal_v4l2_ctrl *mmal_ctrl = ctrl->priv; ++ int ret; + + if ((mmal_ctrl == NULL) || + (mmal_ctrl->id != ctrl->id) || +@@ -620,7 +638,10 @@ static int bm2835_mmal_s_ctrl(struct v4l + return -EINVAL; + } + +- return mmal_ctrl->setter(dev, ctrl, mmal_ctrl); ++ ret = mmal_ctrl->setter(dev, ctrl, mmal_ctrl); ++ if (mmal_ctrl->ignore_errors) ++ ret = 0; ++ return ret; + } + + static const struct v4l2_ctrl_ops bm2835_mmal_ctrl_ops = { +@@ -633,32 +654,44 @@ static const struct bm2835_mmal_v4l2_ctr + { + V4L2_CID_SATURATION, MMAL_CONTROL_TYPE_STD, + -100, 100, 0, 1, NULL, +- MMAL_PARAMETER_SATURATION, &ctrl_set_rational ++ MMAL_PARAMETER_SATURATION, ++ &ctrl_set_rational, ++ false + }, + { + V4L2_CID_SHARPNESS, MMAL_CONTROL_TYPE_STD, + -100, 100, 0, 1, NULL, +- MMAL_PARAMETER_SHARPNESS, &ctrl_set_rational ++ MMAL_PARAMETER_SHARPNESS, ++ &ctrl_set_rational, ++ false + }, + { + V4L2_CID_CONTRAST, MMAL_CONTROL_TYPE_STD, + -100, 100, 0, 1, NULL, +- MMAL_PARAMETER_CONTRAST, &ctrl_set_rational ++ MMAL_PARAMETER_CONTRAST, ++ &ctrl_set_rational, ++ false + }, + { + V4L2_CID_BRIGHTNESS, MMAL_CONTROL_TYPE_STD, + 0, 100, 50, 1, NULL, +- MMAL_PARAMETER_BRIGHTNESS, &ctrl_set_rational ++ MMAL_PARAMETER_BRIGHTNESS, ++ &ctrl_set_rational, ++ false + }, + { + V4L2_CID_ISO_SENSITIVITY, MMAL_CONTROL_TYPE_INT_MENU, + 0, ARRAY_SIZE(iso_qmenu) - 1, 0, 1, iso_qmenu, +- MMAL_PARAMETER_ISO, &ctrl_set_value_menu ++ MMAL_PARAMETER_ISO, ++ &ctrl_set_value_menu, ++ false + }, + { + V4L2_CID_IMAGE_STABILIZATION, MMAL_CONTROL_TYPE_STD, + 0, 1, 0, 1, NULL, +- MMAL_PARAMETER_VIDEO_STABILISATION, &ctrl_set_value ++ MMAL_PARAMETER_VIDEO_STABILISATION, ++ &ctrl_set_value, ++ false + }, + /* { + 0, MMAL_CONTROL_TYPE_CLUSTER, 3, 1, 0, NULL, 0, NULL +@@ -666,7 +699,9 @@ static const struct bm2835_mmal_v4l2_ctr + */ { + V4L2_CID_EXPOSURE_AUTO, MMAL_CONTROL_TYPE_STD_MENU, + ~0x03, 3, V4L2_EXPOSURE_AUTO, 0, NULL, +- MMAL_PARAMETER_EXPOSURE_MODE, &ctrl_set_exposure ++ MMAL_PARAMETER_EXPOSURE_MODE, ++ &ctrl_set_exposure, ++ false + }, + /* todo this needs mixing in with set exposure + { +@@ -677,86 +712,120 @@ static const struct bm2835_mmal_v4l2_ctr + V4L2_CID_EXPOSURE_ABSOLUTE, MMAL_CONTROL_TYPE_STD, + /* Units of 100usecs */ + 1, 1*1000*10, 100*10, 1, NULL, +- MMAL_PARAMETER_SHUTTER_SPEED, &ctrl_set_exposure ++ MMAL_PARAMETER_SHUTTER_SPEED, ++ &ctrl_set_exposure, ++ false + }, + { + V4L2_CID_AUTO_EXPOSURE_BIAS, MMAL_CONTROL_TYPE_INT_MENU, + 0, ARRAY_SIZE(ev_bias_qmenu) - 1, + (ARRAY_SIZE(ev_bias_qmenu)+1)/2 - 1, 0, ev_bias_qmenu, +- MMAL_PARAMETER_EXPOSURE_COMP, &ctrl_set_value_ev ++ MMAL_PARAMETER_EXPOSURE_COMP, ++ &ctrl_set_value_ev, ++ false + }, + { + V4L2_CID_EXPOSURE_METERING, + MMAL_CONTROL_TYPE_STD_MENU, + ~0x7, 2, V4L2_EXPOSURE_METERING_AVERAGE, 0, NULL, +- MMAL_PARAMETER_EXP_METERING_MODE, &ctrl_set_metering_mode ++ MMAL_PARAMETER_EXP_METERING_MODE, ++ &ctrl_set_metering_mode, ++ false + }, + { + V4L2_CID_AUTO_N_PRESET_WHITE_BALANCE, + MMAL_CONTROL_TYPE_STD_MENU, + ~0x3fe, 9, V4L2_WHITE_BALANCE_AUTO, 0, NULL, +- MMAL_PARAMETER_AWB_MODE, &ctrl_set_awb_mode ++ MMAL_PARAMETER_AWB_MODE, ++ &ctrl_set_awb_mode, ++ false + }, + { + V4L2_CID_COLORFX, MMAL_CONTROL_TYPE_STD_MENU, + 0, 15, V4L2_COLORFX_NONE, 0, NULL, +- MMAL_PARAMETER_IMAGE_EFFECT, &ctrl_set_image_effect ++ MMAL_PARAMETER_IMAGE_EFFECT, ++ &ctrl_set_image_effect, ++ false + }, + { + V4L2_CID_COLORFX_CBCR, MMAL_CONTROL_TYPE_STD, + 0, 0xffff, 0x8080, 1, NULL, +- MMAL_PARAMETER_COLOUR_EFFECT, &ctrl_set_colfx ++ MMAL_PARAMETER_COLOUR_EFFECT, ++ &ctrl_set_colfx, ++ false + }, + { + V4L2_CID_ROTATE, MMAL_CONTROL_TYPE_STD, + 0, 360, 0, 90, NULL, +- MMAL_PARAMETER_ROTATION, &ctrl_set_rotate ++ MMAL_PARAMETER_ROTATION, ++ &ctrl_set_rotate, ++ false + }, + { + V4L2_CID_HFLIP, MMAL_CONTROL_TYPE_STD, + 0, 1, 0, 1, NULL, +- MMAL_PARAMETER_MIRROR, &ctrl_set_flip ++ MMAL_PARAMETER_MIRROR, ++ &ctrl_set_flip, ++ false + }, + { + V4L2_CID_VFLIP, MMAL_CONTROL_TYPE_STD, + 0, 1, 0, 1, NULL, +- MMAL_PARAMETER_MIRROR, &ctrl_set_flip ++ MMAL_PARAMETER_MIRROR, ++ &ctrl_set_flip, ++ false + }, + { + V4L2_CID_MPEG_VIDEO_BITRATE_MODE, MMAL_CONTROL_TYPE_STD_MENU, + 0, ARRAY_SIZE(bitrate_mode_qmenu) - 1, + 0, 0, bitrate_mode_qmenu, +- MMAL_PARAMETER_RATECONTROL, &ctrl_set_bitrate_mode ++ MMAL_PARAMETER_RATECONTROL, ++ &ctrl_set_bitrate_mode, ++ false + }, + { + V4L2_CID_MPEG_VIDEO_BITRATE, MMAL_CONTROL_TYPE_STD, + 25*1000, 25*1000*1000, 10*1000*1000, 25*1000, NULL, +- MMAL_PARAMETER_VIDEO_BIT_RATE, &ctrl_set_bitrate ++ MMAL_PARAMETER_VIDEO_BIT_RATE, ++ &ctrl_set_bitrate, ++ false + }, + { + V4L2_CID_JPEG_COMPRESSION_QUALITY, MMAL_CONTROL_TYPE_STD, + 1, 100, + 30, 1, NULL, +- MMAL_PARAMETER_JPEG_Q_FACTOR, &ctrl_set_image_encode_output ++ MMAL_PARAMETER_JPEG_Q_FACTOR, ++ &ctrl_set_image_encode_output, ++ false + }, + { + V4L2_CID_POWER_LINE_FREQUENCY, MMAL_CONTROL_TYPE_STD_MENU, + 0, ARRAY_SIZE(mains_freq_qmenu) - 1, + 1, 1, NULL, +- MMAL_PARAMETER_FLICKER_AVOID, &ctrl_set_flicker_avoidance ++ MMAL_PARAMETER_FLICKER_AVOID, ++ &ctrl_set_flicker_avoidance, ++ false ++ }, ++ { ++ V4L2_CID_MPEG_VIDEO_REPEAT_SEQ_HEADER, MMAL_CONTROL_TYPE_STD, ++ 0, 1, ++ 0, 1, NULL, ++ MMAL_PARAMETER_VIDEO_ENCODE_INLINE_HEADER, ++ &ctrl_set_video_encode_param_output, ++ true /* Errors ignored as requires latest firmware to work */ + }, + }; + + int bm2835_mmal_set_all_camera_controls(struct bm2835_mmal_dev *dev) + { + int c; +- int ret; ++ int ret = 0; + + for (c = 0; c < V4L2_CTRL_COUNT; c++) { + if ((dev->ctrls[c]) && (v4l2_ctrls[c].setter)) { + ret = v4l2_ctrls[c].setter(dev, dev->ctrls[c], + &v4l2_ctrls[c]); +- if (ret) ++ if (!v4l2_ctrls[c]. ignore_errors && ret) + break; + } + } +--- a/drivers/media/platform/bcm2835/mmal-parameters.h ++++ b/drivers/media/platform/bcm2835/mmal-parameters.h +@@ -421,7 +421,16 @@ enum mmal_parameter_video_type { + MMAL_PARAMETER_VIDEO_DRM_PROTECT_BUFFER, + + /** @ref MMAL_PARAMETER_BYTES_T */ +- MMAL_PARAMETER_VIDEO_DECODE_CONFIG_VD3 ++ MMAL_PARAMETER_VIDEO_DECODE_CONFIG_VD3, ++ ++ /**< @ref MMAL_PARAMETER_BOOLEAN_T */ ++ MMAL_PARAMETER_VIDEO_ENCODE_H264_VCL_HRD_PARAMETERS, ++ ++ /**< @ref MMAL_PARAMETER_BOOLEAN_T */ ++ MMAL_PARAMETER_VIDEO_ENCODE_H264_LOW_DELAY_HRD_FLAG, ++ ++ /**< @ref MMAL_PARAMETER_BOOLEAN_T */ ++ MMAL_PARAMETER_VIDEO_ENCODE_INLINE_HEADER + }; + + /** Valid mirror modes */ |