Name: libmm-camcorder
Summary: Camera and recorder library
-Version: 0.10.190
+Version: 0.10.191
Release: 0
Group: Multimedia/Libraries
License: Apache-2.0
bool _mmcamcorder_set_videosrc_stabilization(MMHandleType handle, int stabilization);
bool _mmcamcorder_set_camera_resolution(MMHandleType handle, int width, int height);
bool _mmcamcorder_set_encoded_preview_bitrate(MMHandleType handle, int bitrate);
-bool _mmcamcorder_set_encoded_preview_gop_interval(MMHandleType handle, int gop);
+bool _mmcamcorder_set_encoded_preview_gop_interval(MMHandleType handle, int gop_interval);
bool _mmcamcorder_set_sound_stream_info(GstElement *element, char *stream_type, int stream_index);
void _mmcamcorder_set_encoder_bitrate(MMCamcorderEncoderType type, int codec, int bitrate, GstElement *element);
GstPadProbeReturn __mmcamcorder_muxed_dataprobe(GstPad *pad, GstPadProbeInfo *info, gpointer u_data);
bool _mmcamcorder_set_encoded_preview_bitrate(MMHandleType handle, int bitrate)
{
_MMCamcorderSubContext *sc = NULL;
- GstCameraControl *CameraControl = NULL;
- GstCameraControlChannel *CameraControlChannel = NULL;
- const GList *controls = NULL;
- const GList *item = NULL;
if ((void *)handle == NULL) {
_mmcam_dbg_warn("handle is NULL");
_mmcam_dbg_log("set encoded preview bitrate : %d bps", bitrate);
- CameraControl = GST_CAMERA_CONTROL(sc->element[_MMCAMCORDER_VIDEOSRC_SRC].gst);
- controls = gst_camera_control_list_channels(CameraControl);
- _mmcam_dbg_log("controls : %p", controls);
- if (controls != NULL) {
- for (item = controls ; item && item->data ; item = item->next) {
- CameraControlChannel = item->data;
- _mmcam_dbg_log("label : %s", CameraControlChannel->label);
- if (!strcmp(CameraControlChannel->label, "bitrate")) {
- _mmcam_dbg_log("set encoded preview bitrate %d", bitrate);
- return gst_camera_control_set_value(CameraControl, CameraControlChannel, bitrate);
- }
- }
-
- _mmcam_dbg_warn("failed to find \"bitrate\" control channel");
- }
+ MMCAMCORDER_G_OBJECT_SET(sc->element[_MMCAMCORDER_VIDEOSRC_SRC].gst, "bitrate", bitrate);
- return FALSE;
+ return TRUE;
}
-bool _mmcamcorder_set_encoded_preview_gop_interval(MMHandleType handle, int interval)
+bool _mmcamcorder_set_encoded_preview_gop_interval(MMHandleType handle, int gop_interval)
{
_MMCamcorderSubContext *sc = NULL;
return FALSE;
}
- _mmcam_dbg_log("set encoded preview GOP interval : %d ms", interval);
+ _mmcam_dbg_log("set encoded preview GOP interval : %d ms", gop_interval);
- MMCAMCORDER_G_OBJECT_SET(sc->element[_MMCAMCORDER_VIDEOSRC_SRC].gst, "newgop-interval", interval);
+ MMCAMCORDER_G_OBJECT_SET(sc->element[_MMCAMCORDER_VIDEOSRC_SRC].gst, "gop-interval", gop_interval);
return TRUE;
}
#define THUMBNAIL_JPEG_QUALITY 90
#define TRY_LOCK_MAX_COUNT 100
#define TRY_LOCK_TIME 20000 /* ms */
-#define H264_PREVIEW_BITRATE 1024*10 /* kbps */
-#define H264_PREVIEW_NEWGOP_INTERVAL 1000 /* ms */
#define _MMCAMCORDER_MAKE_THUMBNAIL_INTERNAL_ENCODE
int height = 0;
int fps = 0;
int rotation = 0;
+ int bitrate = 0;
+ int gop_interval = 0;
unsigned int current_framecount = 0;
int current_state = MM_CAMCORDER_STATE_NONE;
gboolean fps_auto = FALSE;
_mmcamcorder_sound_finalize(handle);
} else {
if (info->preview_format == MM_PIXEL_FORMAT_ENCODED_H264) {
- MMCAMCORDER_G_OBJECT_SET(sc->element[_MMCAMCORDER_VIDEOSRC_SRC].gst, "bitrate", H264_PREVIEW_BITRATE);
- MMCAMCORDER_G_OBJECT_SET(sc->element[_MMCAMCORDER_VIDEOSRC_SRC].gst, "newgop-interval", H264_PREVIEW_NEWGOP_INTERVAL);
+ ret = mm_camcorder_get_attributes(handle, NULL,
+ MMCAM_ENCODED_PREVIEW_BITRATE, &bitrate,
+ MMCAM_ENCODED_PREVIEW_GOP_INTERVAL, &gop_interval,
+ NULL);
+ if (ret == MM_ERROR_NONE) {
+ _mmcamcorder_set_encoded_preview_bitrate(handle, bitrate);
+ _mmcamcorder_set_encoded_preview_gop_interval(handle, gop_interval);
+ } else {
+ _mmcam_dbg_err("failed to get encoded preview setting");
+ }
}
MMCAMCORDER_G_OBJECT_SET(sc->element[_MMCAMCORDER_VIDEOSRC_QUE].gst, "empty-buffers", FALSE);
int size = 0;
int fileformat = 0;
int count = 0;
+ int gop_interval = 0;
int ret = MM_ERROR_NONE;
double motion_rate = _MMCAMCORDER_DEFAULT_RECORDING_MOTION_RATE;
char *err_name = NULL;
char *target_filename = NULL;
GstCameraControl *CameraControl = NULL;
- GstCameraControlChannel *CameraControlChannel = NULL;
- const GList *controls = NULL;
- const GList *item = NULL;
gint fps = 0;
GstElement *pipeline = NULL;
goto _ERR_CAMCORDER_VIDEO_COMMAND;
}
- /*set the camera control to create the GOP so that video record will get a new key frame*/
- if (sc->info_image->preview_format == MM_PIXEL_FORMAT_ENCODED_H264 &&
- GST_IS_CAMERA_CONTROL(sc->element[_MMCAMCORDER_VIDEOSRC_SRC].gst)) {
- CameraControl = GST_CAMERA_CONTROL(sc->element[_MMCAMCORDER_VIDEOSRC_SRC].gst);
- controls = gst_camera_control_list_channels(CameraControl);
- if (controls != NULL) {
- for (item = controls ; item && item->data ; item = item->next) {
- CameraControlChannel = item->data;
- _mmcam_dbg_log("CameraControlChannel->label %s", CameraControlChannel->label);
- if (!strcmp(CameraControlChannel->label, "new-gop")) {
- /* gst_camera_control_set_value(CameraControl, CameraControlChannel, 1); */
- break;
- }
- }
-
- if (item == NULL)
- _mmcam_dbg_warn("failed to find new-gop control channel");
- }
- } else {
- _mmcam_dbg_warn("Can't cast Video source into camera control or not H264 prevew format[%d]",
- sc->info_image->preview_format);
+ /*set the GOP so that video record will get a new key frame*/
+ if (sc->info_image->preview_format == MM_PIXEL_FORMAT_ENCODED_H264) {
+ if (mm_camcorder_get_attributes(handle, NULL,
+ MMCAM_ENCODED_PREVIEW_GOP_INTERVAL, &gop_interval, NULL) == MM_ERROR_NONE)
+ _mmcamcorder_set_encoded_preview_gop_interval(handle, gop_interval);
+ else
+ _mmcam_dbg_err("get gop interval failed");
}
} else {
/* Resume case */
-
- if (sc->info_image->preview_format == MM_PIXEL_FORMAT_ENCODED_H264 &&
- GST_IS_CAMERA_CONTROL(sc->element[_MMCAMCORDER_VIDEOSRC_SRC].gst)) {
- /* generate and I-frame on resuming */
- CameraControl = GST_CAMERA_CONTROL(sc->element[_MMCAMCORDER_VIDEOSRC_SRC].gst);
- controls = gst_camera_control_list_channels(CameraControl);
- if (controls != NULL) {
- for (item = controls ; item && item->data ; item = item->next) {
- CameraControlChannel = item->data;
- _mmcam_dbg_log("CameraControlChannel->label %s", CameraControlChannel->label);
- if (!strcmp(CameraControlChannel->label, "new-gop")) {
- /* gst_camera_control_set_value(CameraControl, CameraControlChannel, 1); */
- break;
- }
- }
-
- if (item == NULL)
- _mmcam_dbg_warn("failed to find new-gop control channel");
- }
+ if (sc->info_image->preview_format == MM_PIXEL_FORMAT_ENCODED_H264) {
+ if (mm_camcorder_get_attributes(handle, NULL,
+ MMCAM_ENCODED_PREVIEW_GOP_INTERVAL, &gop_interval, NULL) == MM_ERROR_NONE)
+ _mmcamcorder_set_encoded_preview_gop_interval(handle, gop_interval);
+ else
+ _mmcam_dbg_err("get gop interval failed");
}
MMCAMCORDER_G_OBJECT_SET(sc->encode_element[_MMCAMCORDER_ENCSINK_ENCBIN].gst, "runtime-pause", FALSE);