MediaProfiles类主要用于录像和Video Editor,包括设置视频的分辨率,Audio和Video的编解码参数等。
MediaProfiles.h文件中对camcorder质量的定义如下,包括了常见的视频视频分辨率。需要注意的是,下面的定义与CamcorderProfile.java中定义的视频分辨率是对应的,两者需要保持一致。
enum camcorder_quality { CAMCORDER_QUALITY_LIST_START = 0, CAMCORDER_QUALITY_LOW = 0, CAMCORDER_QUALITY_HIGH = 1, CAMCORDER_QUALITY_QCIF = 2, CAMCORDER_QUALITY_CIF = 3, CAMCORDER_QUALITY_480P = 4, CAMCORDER_QUALITY_720P = 5, CAMCORDER_QUALITY_1080P = 6, CAMCORDER_QUALITY_QVGA = 7, CAMCORDER_QUALITY_MIDDLE = 8, #ifdef CONFIG_CAMERA_SUPPORT_720P CAMCORDER_QUALITY_MIDDLE_HIGH = 9, CAMCORDER_QUALITY_LIST_END = 9, #else CAMCORDER_QUALITY_LIST_END = 8, #endif CAMCORDER_QUALITY_TIME_LAPSE_LIST_START = 1000, CAMCORDER_QUALITY_TIME_LAPSE_LOW = 1000, CAMCORDER_QUALITY_TIME_LAPSE_HIGH = 1001, CAMCORDER_QUALITY_TIME_LAPSE_QCIF = 1002, CAMCORDER_QUALITY_TIME_LAPSE_CIF = 1003, CAMCORDER_QUALITY_TIME_LAPSE_480P = 1004, CAMCORDER_QUALITY_TIME_LAPSE_720P = 1005, CAMCORDER_QUALITY_TIME_LAPSE_1080P = 1006, CAMCORDER_QUALITY_TIME_LAPSE_QVGA = 1007, CAMCORDER_QUALITY_TIME_LAPSE_MIDDLE = 1008, #ifdef CONFIG_CAMERA_SUPPORT_720P CAMCORDER_QUALITY_TIME_LAPSE_MIDDLE_HIGH = 1009, CAMCORDER_QUALITY_TIME_LAPSE_LIST_END = 1009, #else CAMCORDER_QUALITY_TIME_LAPSE_LIST_END = 1008, #endif };
顺便总结一下屏幕分辨率:
Sub-QCIF 128x96
QCIF 176x144
CIF 352x288
4CIF 704x576
QVGA 240×320
HVGA 480*320
VGA 640X480
SVGA 800X600
XGA 1024X768
SXGA 1280X1024
SXGA+ 1400X1050
UXGA 1600X1200
WXGA 1280X800
WXGA+ 1400X900
WSXGA 1600X1024
WSXGA+ 1680X1050
WUXGA 1920X1200
WQXGA 2560X1600
目前只有在StagefrightRecorder中用到了MediaProfiles,用于初始化录像参数;其他代码中还没有用到MediaProfiles。
调用流程如下:
StagefrightRecorder::start() -> startMPEG4Recording() -> setupMPEG4Recording -> setupMediaSource -> setupCameraSource -> checkVideoEncoderCapabilities ->
在checkVideoEncoderCapabilities()函数中调用了以下五个函数设置录像参数,每个函数分别调用MediaProfiles的相关函数取得参数后设置给录像参数。
clipVideoBitRate();
clipVideoFrameRate();
clipVideoFrameWidth();
clipVideoFrameHeight();
setDefaultProfileIfNecessary();