Merge "Refactor h.264 profile/level support into avc_utils."

This commit is contained in:
Andreas Huber
2010-11-15 10:07:31 -08:00
committed by Android (Google) Code Review
3 changed files with 42 additions and 34 deletions

View File

@@ -54,6 +54,7 @@
#include <OMX_Component.h>
#include "include/ThreadedSource.h"
#include "include/avc_utils.h"
namespace android {
@@ -264,39 +265,6 @@ static const char *GetCodec(const CodecInfo *info, size_t numInfos,
return NULL;
}
enum {
kAVCProfileBaseline = 0x42,
kAVCProfileMain = 0x4d,
kAVCProfileExtended = 0x58,
kAVCProfileHigh = 0x64,
kAVCProfileHigh10 = 0x6e,
kAVCProfileHigh422 = 0x7a,
kAVCProfileHigh444 = 0xf4,
kAVCProfileCAVLC444Intra = 0x2c
};
static const char *AVCProfileToString(uint8_t profile) {
switch (profile) {
case kAVCProfileBaseline:
return "Baseline";
case kAVCProfileMain:
return "Main";
case kAVCProfileExtended:
return "Extended";
case kAVCProfileHigh:
return "High";
case kAVCProfileHigh10:
return "High 10";
case kAVCProfileHigh422:
return "High 422";
case kAVCProfileHigh444:
return "High 444";
case kAVCProfileCAVLC444Intra:
return "CAVLC 444 Intra";
default: return "Unknown";
}
}
template<class T>
static void InitOMXParams(T *params) {
params->nSize = sizeof(T);

View File

@@ -218,6 +218,28 @@ static sp<ABuffer> FindNAL(
return NULL;
}
const char *AVCProfileToString(uint8_t profile) {
switch (profile) {
case kAVCProfileBaseline:
return "Baseline";
case kAVCProfileMain:
return "Main";
case kAVCProfileExtended:
return "Extended";
case kAVCProfileHigh:
return "High";
case kAVCProfileHigh10:
return "High 10";
case kAVCProfileHigh422:
return "High 422";
case kAVCProfileHigh444:
return "High 444";
case kAVCProfileCAVLC444Intra:
return "CAVLC 444 Intra";
default: return "Unknown";
}
}
sp<MetaData> MakeAVCCodecSpecificData(const sp<ABuffer> &accessUnit) {
const uint8_t *data = accessUnit->data();
size_t size = accessUnit->size();
@@ -244,6 +266,10 @@ sp<MetaData> MakeAVCCodecSpecificData(const sp<ABuffer> &accessUnit) {
*out++ = 0x01; // configurationVersion
memcpy(out, seqParamSet->data() + 1, 3); // profile/level...
uint8_t profile = out[0];
uint8_t level = out[2];
out += 3;
*out++ = (0x3f << 2) | 1; // lengthSize == 2 bytes
*out++ = 0xe0 | 1;
@@ -271,7 +297,8 @@ sp<MetaData> MakeAVCCodecSpecificData(const sp<ABuffer> &accessUnit) {
meta->setInt32(kKeyWidth, width);
meta->setInt32(kKeyHeight, height);
LOGI("found AVC codec config (%d x %d)", width, height);
LOGI("found AVC codec config (%d x %d, %s-profile level %d.%d)",
width, height, AVCProfileToString(profile), level / 10, level % 10);
return meta;
}

View File

@@ -24,6 +24,17 @@ namespace android {
struct ABitReader;
enum {
kAVCProfileBaseline = 0x42,
kAVCProfileMain = 0x4d,
kAVCProfileExtended = 0x58,
kAVCProfileHigh = 0x64,
kAVCProfileHigh10 = 0x6e,
kAVCProfileHigh422 = 0x7a,
kAVCProfileHigh444 = 0xf4,
kAVCProfileCAVLC444Intra = 0x2c
};
void FindAVCDimensions(
const sp<ABuffer> &seqParamSet, int32_t *width, int32_t *height);
@@ -39,6 +50,8 @@ sp<MetaData> MakeAVCCodecSpecificData(const sp<ABuffer> &accessUnit);
bool IsIDR(const sp<ABuffer> &accessUnit);
const char *AVCProfileToString(uint8_t profile);
} // namespace android
#endif // AVC_UTILS_H_