aaaaa
git-svn-id: http://192.168.1.226/svn/proxy@1014 454eff88-639b-444f-9e54-f578c98de674
| | |
| | |
|
| | | AMediaFormat_setBuffer(format, "csd-0", sps.sPropBytes, sps.sPropLength); // sps
|
| | | AMediaFormat_setBuffer(format, "csd-1", pps.sPropBytes, pps.sPropLength); // pps
|
| | |
|
| | | //uint8_t sps[] = {0x0,0x0,0x0,0x1, 0x67, 0x42, 0x00, 0x2A, 0x95, 0xA8, 0x1E, 0x00, 0x89, 0xF9, 0x61, 0x00, 0x00, 0x07, 0x08, 0x00, 0x01, 0x5F, 0x90, 0x04};
|
| | | //uint8_t pps[] = {0x0,0x0,0x0,0x1, 0x68, 0xCE, 0x3C, 0x80};
|
| | | //AMediaFormat_setBuffer(format, "csd-0", sps, sizeof(sps)); // sps
|
| | | //AMediaFormat_setBuffer(format, "csd-1", pps, sizeof(pps)); // pps
|
| | | */
|
| | |
|
| | | // J0LgKI1oCgPaEAAAAwAQAAADAoDxB6gA,KM4ySA==
|
| | | uint8_t sps[] = {0x27,0x42,0xe0,0x28,0x8d,0x68,0x0a,0x03,0xda,0x10,0x00,0x00,0x03,0x00,0x10,0x00,0x00,0x03,0x02,0x80,0xf1,0x07,0xa8,0x00};
|
| | | uint8_t pps[] = {0x28,0xce,0x32,0x48};
|
| | | AMediaFormat_setBuffer(format, "csd-0", sps, sizeof(sps)); // sps
|
| | | AMediaFormat_setBuffer(format, "csd-1", pps, sizeof(pps)); // pps
|
| | |
|
| | |
|
| | | // should like:
|
| | | // mime: string(video/avc), durationUs: int64(10000000), width: int32(480), height: int32(360), max-input-size: int32(55067), csd-0: data, csd-1: data}
|
| | | const char* fmt = AMediaFormat_toString(format);
|
| | |
| | | PL_AndroidMediaCodecEncoder_Config* config = (PL_AndroidMediaCodecEncoder_Config*)args;
|
| | | in->config = *config;
|
| | |
|
| | | // see: developer.android.com/reference/android/media/MediaFormat.html#KEY_PROFILE
|
| | | AMediaFormat* format = AMediaFormat_new();
|
| | |
|
| | | AMediaFormat_setString(format, AMEDIAFORMAT_KEY_MIME, config->ak_mime.c_str());
|
| | |
| | | AMediaFormat_setInt32(format, AMEDIAFORMAT_KEY_COLOR_FORMAT, config->ak_color_format);
|
| | | //AMediaFormat_setInt32(format, AMEDIAFORMAT_KEY_STRIDE, config->ak_width * 2);
|
| | |
|
| | | if (config->codecProfileLevel.profile != 0)
|
| | | AMediaFormat_setInt32(format, "profile", config->codecProfileLevel.profile);
|
| | | if (config->codecProfileLevel.level != 0)
|
| | | AMediaFormat_setInt32(format, "level", config->codecProfileLevel.level);
|
| | |
|
| | |
|
| | | //uint8_t sps[] = {0x0,0x0,0x0,0x1, 0x67, 0x42, 0x00, 0x2A, 0x95, 0xA8, 0x1E, 0x00, 0x89, 0xF9, 0x61, 0x00, 0x00, 0x07, 0x08, 0x00, 0x01, 0x5F, 0x90, 0x04};
|
| | | //uint8_t pps[] = {0x0,0x0,0x0,0x1, 0x68, 0xCE, 0x3C, 0x80};
|
| | | //AMediaFormat_setBuffer(format, "csd-0", sps, sizeof(sps)); // sps
|
| | |
| | |
|
| | | #include "PipeLine.h"
|
| | |
|
| | |
|
| | | // copy from D:\Android\sdk\sources\android-25\android\media\MediaCodecInfo.java
|
| | | struct Android_CodecProfileLevel
|
| | | {
|
| | | // typeof int
|
| | | enum _OMX_VIDEO_AVCPROFILETYPE
|
| | | {
|
| | | // from OMX_VIDEO_AVCPROFILETYPE
|
| | | AVCProfileBaseline = 0x01,
|
| | | AVCProfileMain = 0x02,
|
| | | AVCProfileExtended = 0x04,
|
| | | AVCProfileHigh = 0x08,
|
| | | AVCProfileHigh10 = 0x10,
|
| | | AVCProfileHigh422 = 0x20,
|
| | | AVCProfileHigh444 = 0x40
|
| | | };
|
| | |
|
| | |
|
| | | enum _OMX_VIDEO_AVCLEVELTYPE
|
| | | {
|
| | | // from OMX_VIDEO_AVCLEVELTYPE
|
| | | AVCLevel1 = 0x01,
|
| | | AVCLevel1b = 0x02,
|
| | | AVCLevel11 = 0x04,
|
| | | AVCLevel12 = 0x08,
|
| | | AVCLevel13 = 0x10,
|
| | | AVCLevel2 = 0x20,
|
| | | AVCLevel21 = 0x40,
|
| | | AVCLevel22 = 0x80,
|
| | | AVCLevel3 = 0x100,
|
| | | AVCLevel31 = 0x200,
|
| | | AVCLevel32 = 0x400,
|
| | | AVCLevel4 = 0x800,
|
| | | AVCLevel41 = 0x1000,
|
| | | AVCLevel42 = 0x2000,
|
| | | AVCLevel5 = 0x4000,
|
| | | AVCLevel51 = 0x8000,
|
| | | AVCLevel52 = 0x10000,
|
| | | };
|
| | |
|
| | | enum _OMX_VIDEO_H263PROFILETYPE
|
| | | {
|
| | | // from OMX_VIDEO_H263PROFILETYPE
|
| | | H263ProfileBaseline = 0x01,
|
| | | H263ProfileH320Coding = 0x02,
|
| | | H263ProfileBackwardCompatible = 0x04,
|
| | | H263ProfileISWV2 = 0x08,
|
| | | H263ProfileISWV3 = 0x10,
|
| | | H263ProfileHighCompression = 0x20,
|
| | | H263ProfileInternet = 0x40,
|
| | | H263ProfileInterlace = 0x80,
|
| | | H263ProfileHighLatency = 0x100
|
| | | };
|
| | |
|
| | | enum _OMX_VIDEO_H263LEVELTYPE
|
| | | {
|
| | | // from OMX_VIDEO_H263LEVELTYPE
|
| | | H263Level10 = 0x01,
|
| | | H263Level20 = 0x02,
|
| | | H263Level30 = 0x04,
|
| | | H263Level40 = 0x08,
|
| | | H263Level45 = 0x10,
|
| | | H263Level50 = 0x20,
|
| | | H263Level60 = 0x40,
|
| | | H263Level70 = 0x80
|
| | | };
|
| | |
|
| | | enum _OMX_VIDEO_MPEG4PROFILETYPE
|
| | | {
|
| | | // from OMX_VIDEO_MPEG4PROFILETYPE
|
| | | MPEG4ProfileSimple = 0x01,
|
| | | MPEG4ProfileSimpleScalable = 0x02,
|
| | | MPEG4ProfileCore = 0x04,
|
| | | MPEG4ProfileMain = 0x08,
|
| | | MPEG4ProfileNbit = 0x10,
|
| | | MPEG4ProfileScalableTexture = 0x20,
|
| | | MPEG4ProfileSimpleFace = 0x40,
|
| | | MPEG4ProfileSimpleFBA = 0x80,
|
| | | MPEG4ProfileBasicAnimated = 0x100,
|
| | | MPEG4ProfileHybrid = 0x200,
|
| | | MPEG4ProfileAdvancedRealTime = 0x400,
|
| | | MPEG4ProfileCoreScalable = 0x800,
|
| | | MPEG4ProfileAdvancedCoding = 0x1000,
|
| | | MPEG4ProfileAdvancedCore = 0x2000,
|
| | | MPEG4ProfileAdvancedScalable = 0x4000,
|
| | | MPEG4ProfileAdvancedSimple = 0x8000
|
| | | };
|
| | |
|
| | | enum _OMX_VIDEO_MPEG4LEVELTYPE
|
| | | {
|
| | | // from OMX_VIDEO_MPEG4LEVELTYPE
|
| | | MPEG4Level0 = 0x01,
|
| | | MPEG4Level0b = 0x02,
|
| | | MPEG4Level1 = 0x04,
|
| | | MPEG4Level2 = 0x08,
|
| | | MPEG4Level3 = 0x10,
|
| | | MPEG4Level3b = 0x18,
|
| | | MPEG4Level4 = 0x20,
|
| | | MPEG4Level4a = 0x40,
|
| | | MPEG4Level5 = 0x80,
|
| | | MPEG4Level6 = 0x100
|
| | | };
|
| | |
|
| | | enum _OMX_VIDEO_MPEG2PROFILETYPE
|
| | | {
|
| | | // from OMX_VIDEO_MPEG2PROFILETYPE
|
| | | MPEG2ProfileSimple = 0x00,
|
| | | MPEG2ProfileMain = 0x01,
|
| | | MPEG2Profile422 = 0x02,
|
| | | MPEG2ProfileSNR = 0x03,
|
| | | MPEG2ProfileSpatial = 0x04,
|
| | | MPEG2ProfileHigh = 0x05
|
| | | };
|
| | |
|
| | | enum _OMX_VIDEO_MPEG2LEVELTYPE
|
| | | {
|
| | | // from OMX_VIDEO_MPEG2LEVELTYPE
|
| | | MPEG2LevelLL = 0x00,
|
| | | MPEG2LevelML = 0x01,
|
| | | MPEG2LevelH14 = 0x02,
|
| | | MPEG2LevelHL = 0x03,
|
| | | MPEG2LevelHP = 0x04
|
| | | };
|
| | |
|
| | | enum _OMX_AUDIO_AACPROFILETYPE
|
| | | {
|
| | | // from OMX_AUDIO_AACPROFILETYPE
|
| | | AACObjectMain = 1,
|
| | | AACObjectLC = 2,
|
| | | AACObjectSSR = 3,
|
| | | AACObjectLTP = 4,
|
| | | AACObjectHE = 5,
|
| | | AACObjectScalable = 6,
|
| | | AACObjectERLC = 17,
|
| | | AACObjectLD = 23,
|
| | | AACObjectHE_PS = 29,
|
| | | AACObjectELD = 39
|
| | | };
|
| | |
|
| | | enum _OMX_VIDEO_VP8LEVELTYPE
|
| | | {
|
| | | // from OMX_VIDEO_VP8LEVELTYPE
|
| | | VP8Level_Version0 = 0x01,
|
| | | VP8Level_Version1 = 0x02,
|
| | | VP8Level_Version2 = 0x04,
|
| | | VP8Level_Version3 = 0x08
|
| | | };
|
| | |
|
| | | // // from OMX_VIDEO_VP8PROFILETYPE
|
| | | //VP8ProfileMain = 0x01,
|
| | | //
|
| | | // // from OMX_VIDEO_VP9PROFILETYPE
|
| | | //VP9Profile0 = 0x01,
|
| | | //VP9Profile1 = 0x02,
|
| | | //VP9Profile2 = 0x04,
|
| | | //VP9Profile3 = 0x08,
|
| | | // // HDR profiles also support passing HDR metadata
|
| | | //VP9Profile2HDR = 0x1000,
|
| | | //VP9Profile3HDR = 0x2000,
|
| | | //
|
| | | // // from OMX_VIDEO_VP9LEVELTYPE
|
| | | //VP9Level1 = 0x1,
|
| | | //VP9Level11 = 0x2,
|
| | | //VP9Level2 = 0x4,
|
| | | //VP9Level21 = 0x8,
|
| | | //VP9Level3 = 0x10,
|
| | | //VP9Level31 = 0x20,
|
| | | //VP9Level4 = 0x40,
|
| | | //VP9Level41 = 0x80,
|
| | | //VP9Level5 = 0x100,
|
| | | //VP9Level51 = 0x200,
|
| | | //VP9Level52 = 0x400,
|
| | | //VP9Level6 = 0x800,
|
| | | //VP9Level61 = 0x1000,
|
| | | //VP9Level62 = 0x2000,
|
| | | //
|
| | | // // from OMX_VIDEO_HEVCPROFILETYPE
|
| | | //HEVCProfileMain = 0x01,
|
| | | //HEVCProfileMain10 = 0x02,
|
| | | //HEVCProfileMain10HDR10 = 0x1000,
|
| | | //
|
| | | // // from OMX_VIDEO_HEVCLEVELTYPE
|
| | | //HEVCMainTierLevel1 = 0x1,
|
| | | //HEVCHighTierLevel1 = 0x2,
|
| | | //HEVCMainTierLevel2 = 0x4,
|
| | | //HEVCHighTierLevel2 = 0x8,
|
| | | //HEVCMainTierLevel21 = 0x10,
|
| | | //HEVCHighTierLevel21 = 0x20,
|
| | | //HEVCMainTierLevel3 = 0x40,
|
| | | //HEVCHighTierLevel3 = 0x80,
|
| | | //HEVCMainTierLevel31 = 0x100,
|
| | | //HEVCHighTierLevel31 = 0x200,
|
| | | //HEVCMainTierLevel4 = 0x400,
|
| | | //HEVCHighTierLevel4 = 0x800,
|
| | | //HEVCMainTierLevel41 = 0x1000,
|
| | | //HEVCHighTierLevel41 = 0x2000,
|
| | | //HEVCMainTierLevel5 = 0x4000,
|
| | | //HEVCHighTierLevel5 = 0x8000,
|
| | | //HEVCMainTierLevel51 = 0x10000,
|
| | | //HEVCHighTierLevel51 = 0x20000,
|
| | | //HEVCMainTierLevel52 = 0x40000,
|
| | | //HEVCHighTierLevel52 = 0x80000,
|
| | | //HEVCMainTierLevel6 = 0x100000,
|
| | | //HEVCHighTierLevel6 = 0x200000,
|
| | | //HEVCMainTierLevel61 = 0x400000,
|
| | | //HEVCHighTierLevel61 = 0x800000,
|
| | | //HEVCMainTierLevel62 = 0x1000000,
|
| | | //HEVCHighTierLevel62 = 0x2000000,
|
| | | //
|
| | | //private static final int HEVCHighTierLevels =
|
| | | // HEVCHighTierLevel1 | HEVCHighTierLevel2 | HEVCHighTierLevel21 | HEVCHighTierLevel3 |
|
| | | // HEVCHighTierLevel31 | HEVCHighTierLevel4 | HEVCHighTierLevel41 | HEVCHighTierLevel5 |
|
| | | // HEVCHighTierLevel51 | HEVCHighTierLevel52 | HEVCHighTierLevel6 | HEVCHighTierLevel61 |
|
| | | // HEVCHighTierLevel62,
|
| | | //
|
| | | // // from OMX_VIDEO_DOLBYVISIONPROFILETYPE
|
| | | //DolbyVisionProfileDvavPer = 0x1,
|
| | | //DolbyVisionProfileDvavPen = 0x2,
|
| | | //DolbyVisionProfileDvheDer = 0x4,
|
| | | //DolbyVisionProfileDvheDen = 0x8,
|
| | | //DolbyVisionProfileDvheDtr = 0x10,
|
| | | //DolbyVisionProfileDvheStn = 0x20,
|
| | | //DolbyVisionProfileDvheDth = 0x40,
|
| | | //DolbyVisionProfileDvheDtb = 0x80,
|
| | | //
|
| | | // // from OMX_VIDEO_DOLBYVISIONLEVELTYPE
|
| | | //DolbyVisionLevelHd24 = 0x1,
|
| | | //DolbyVisionLevelHd30 = 0x2,
|
| | | //DolbyVisionLevelFhd24 = 0x4,
|
| | | //DolbyVisionLevelFhd30 = 0x8,
|
| | | //DolbyVisionLevelFhd60 = 0x10,
|
| | | //DolbyVisionLevelUhd24 = 0x20,
|
| | | //DolbyVisionLevelUhd30 = 0x40,
|
| | | //DolbyVisionLevelUhd48 = 0x80,
|
| | | //DolbyVisionLevelUhd60 = 0x100,
|
| | |
|
| | |
|
| | | // Defined in the OpenMAX IL specs, depending on the type of media
|
| | | // this can be OMX_VIDEO_AVCPROFILETYPE, OMX_VIDEO_H263PROFILETYPE,
|
| | | // OMX_VIDEO_MPEG4PROFILETYPE, OMX_VIDEO_VP8PROFILETYPE or OMX_VIDEO_VP9PROFILETYPE.
|
| | | int profile;
|
| | |
|
| | | // Defined in the OpenMAX IL specs, depending on the type of media
|
| | | // this can be OMX_VIDEO_AVCLEVELTYPE, OMX_VIDEO_H263LEVELTYPE // OMX_VIDEO_MPEG4LEVELTYPE, OMX_VIDEO_VP8LEVELTYPE or OMX_VIDEO_VP9LEVELTYPE.
|
| | | //
|
| | | // Note that VP9 decoder on platforms before {@link android.os.Build.VERSION_CODES#N} may
|
| | | // not advertise a profile level support. For those VP9 decoders, please use
|
| | | // {@link VideoCapabilities} to determine the codec capabilities.
|
| | | int level;
|
| | |
|
| | | Android_CodecProfileLevel() : profile(0), level(0) { }
|
| | | };
|
| | |
|
| | | struct PL_AndroidMediaCodecEncoder_Config
|
| | | {
|
| | | // D:\adk\ndk-bundle\platforms\android-21\arch-arm64\usr\include\media\NdkMediaFormat.h
|
| | |
| | | int32_t ak_width; // AMEDIAFORMAT_KEY_WIDTH;
|
| | | // AMEDIAFORMAT_KEY_STRIDE;
|
| | |
|
| | | Android_CodecProfileLevel codecProfileLevel;
|
| | |
|
| | | PL_AndroidMediaCodecEncoder_Config() :
|
| | | ak_bit_rate(0),
|
| | | ak_color_format(0),
|
| | |
| | | ak_height(0),
|
| | | ak_i_frame_interval(0),
|
| | | ak_mime(),
|
| | | ak_width(0)
|
| | | ak_width(0),
|
| | | codecProfileLevel()
|
| | | {}
|
| | | };
|
| | |
|
| | |
| | | if (_this->lastBuffer == nullptr)
|
| | | return false;
|
| | |
|
| | | buffer = _this->lastBuffer->buffer;
|
| | | buffer = _this->lastBuffer->buffer; // #todo send nalu
|
| | | buffSize = _this->lastBuffer->buffSize;
|
| | | LOG_WARN << "sizeS=" << buffSize << LOG_ENDL;
|
| | | //LOG_WARN << "sizeS=" << buffSize << LOG_ENDL;
|
| | |
|
| | | //LOG_INFO << "DeliverFrameCallback buffSize=" << buffSize << LOG_ENDL;
|
| | | //static size_t f = 0;
|
| | |
| | | if (frame->buffer == nullptr || frame->buffSize == 0)
|
| | | return false;
|
| | |
|
| | | LOG_WARN << "sizeR=" << frame->buffSize << LOG_ENDL;
|
| | | //LOG_WARN << "sizeR=" << frame->buffSize << LOG_ENDL;
|
| | |
|
| | | ScopeLocker<pthread_mutex_t>(in->queue_mutex);
|
| | | //if (in->frameQueue->Full())
|