libextractor

GNU libextractor
Log | Files | Refs | Submodules | README | LICENSE

commit abb0574c96d0ffca9f560a6aa4c54761612e1db2
parent bfe8c1a019ecb22db4ae01e0fe609898b6f2f387
Author: Heikki Lindholm <holin@iki.fi>
Date:   Mon, 31 Dec 2007 13:24:42 +0000

add some metadata items


Diffstat:
Msrc/plugins/flvextractor.c | 29+++++++++++++++++++++++++++++
1 file changed, 29 insertions(+), 0 deletions(-)

diff --git a/src/plugins/flvextractor.c b/src/plugins/flvextractor.c @@ -597,8 +597,11 @@ typedef enum { FLV_WIDTH, FLV_HEIGHT, FLV_FRAMERATE, + FLV_STEREO, FLV_VDATARATE, FLV_ADATARATE, + FLV_VCODECID, + FLV_ACODECID, } FLVStreamAttribute; typedef struct { @@ -610,8 +613,11 @@ static MetaKeyToStreamAttribute key_to_attribute_map[] = { { "width", FLV_WIDTH }, { "height", FLV_HEIGHT }, { "framerate", FLV_FRAMERATE }, + { "stereo", FLV_STEREO }, { "videodatarate", FLV_VDATARATE }, { "audiodatarate", FLV_ADATARATE }, + { "videocodecid", FLV_VCODECID }, + { "audiocodecid", FLV_ACODECID }, { NULL, FLV_NONE } }; @@ -714,9 +720,30 @@ static void handleASEnd(unsigned char type, void * value, void * userdata) case FLV_ADATARATE: state->streamInfo->audioDataRate = n; break; + case FLV_VCODECID: + if (state->streamInfo->videoCodec == -1) { + state->streamInfo->videoCodec = n; + state->streamInfo->videoCodec &= 0x07; /* prevent index overflows */ + } + break; + case FLV_ACODECID: + if (state->streamInfo->audioCodec == -1) { + state->streamInfo->audioCodec = n; + state->streamInfo->audioCodec &= 0x07; /* prevent index overflows */ + } + break; } } + if (state->onMetaData && (state->parsingDepth == 1) && + (state->currentAttribute == FLV_STEREO) && + (type == ASTYPE_BOOLEAN)) + { + int n = *((int *)value); + if (state->streamInfo->audioChannels == -1) + state->streamInfo->audioChannels = (n == 0) ? 0 : 1; + } + /* metadata that maps straight to extractor keys */ if (state->onMetaData && (state->parsingDepth == 1) && (state->currentKeyType != EXTRACTOR_UNKNOWN)) @@ -832,6 +859,7 @@ handleAudioBody(const unsigned char *data, size_t len, soundSize = (*data & 0x02) >> 1; soundRate = (*data & 0x0C) >> 2; soundFormat = (*data & 0xF0) >> 4; + soundFormat &= 0x07; /* prevent index overflow */ stinfo->audioCodec = soundFormat; stinfo->audioRate = soundRate; @@ -872,6 +900,7 @@ handleVideoBody(const unsigned char *data, size_t len, codecId = *data & 0x0F; frameType = (*data & 0xF0) >> 4; + codecId &= 0x07; /* prevent index overflow */ data++; /* try to get video dimensions */