From: hyc Date: Sat, 13 Mar 2010 04:00:58 +0000 (+0000) Subject: Consolidate RTMP_READ booleans X-Git-Tag: v2.4~198 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ed37047c0ba40bca9e9c91156e53630c8d43a727;p=rtmpdump Consolidate RTMP_READ booleans git-svn-id: svn://svn.mplayerhq.hu/rtmpdump/trunk@337 400ebc74-4327-4243-bc38-086b20814532 --- diff --git a/librtmp/rtmp.c b/librtmp/rtmp.c index ade7d13..2396925 100644 --- a/librtmp/rtmp.c +++ b/librtmp/rtmp.c @@ -2569,11 +2569,8 @@ RTMP_Close(RTMP *r) r->m_read.buf = NULL; r->m_read.dataType = 0; - r->m_read.bResume = 0; + r->m_read.flags = 0; r->m_read.status = 0; - r->m_read.bStopIgnoring = false; - r->m_read.bFoundKeyframe = false; - r->m_read.bFoundFlvKeyframe = false; r->m_read.nResumeTS = 0; r->m_read.nIgnoredFrameCounter = 0; r->m_read.nIgnoredFlvFrameCounter = 0; @@ -2891,7 +2888,7 @@ Read_1_Packet(RTMP *r, char *buf, int buflen) Log(LOGDEBUG, "frametype: %02X", (*packetBody & 0xf0)); #endif - if (r->m_read.bResume) + if (r->m_read.flags & RTMP_READ_RESUME) { /* check the header if we get one */ if (packet.m_nTimeStamp == 0) @@ -2944,7 +2941,7 @@ Read_1_Packet(RTMP *r, char *buf, int buflen) r->m_read.nInitialFrameSize) == 0) { Log(LOGDEBUG, "Checked keyframe successfully!"); - r->m_read.bFoundKeyframe = true; + r->m_read.flags |= RTMP_READ_GOTKF; /* ignore it! (what about audio data after it? it is * handled by ignoring all 0ms frames, see below) */ @@ -3001,7 +2998,7 @@ Read_1_Packet(RTMP *r, char *buf, int buflen) ret = RTMP_READ_ERROR; break; } - r->m_read.bFoundFlvKeyframe = true; + r->m_read.flags |= RTMP_READ_GOTFLVK; /* skip this packet? * check whether skippable: @@ -3038,7 +3035,7 @@ Read_1_Packet(RTMP *r, char *buf, int buflen) } stopKeyframeSearch: ; - if (!r->m_read.bFoundFlvKeyframe) + if (!(r->m_read.flags & RTMP_READ_GOTFLVK)) { Log(LOGERROR, "Couldn't find the seeked keyframe in this chunk!"); @@ -3050,7 +3047,7 @@ Read_1_Packet(RTMP *r, char *buf, int buflen) } if (packet.m_nTimeStamp > 0 - && (r->m_read.bFoundFlvKeyframe || r->m_read.bFoundKeyframe)) + && (r->m_read.flags & (RTMP_READ_GOTKF|RTMP_READ_GOTFLVK))) { /* another problem is that the server can actually change from * 09/08 video/audio packets to an FLV stream or vice versa and @@ -3063,14 +3060,14 @@ Read_1_Packet(RTMP *r, char *buf, int buflen) * which means we can accept all forthcoming data including the * change between 08/09 <-> FLV packets */ - r->m_read.bFoundFlvKeyframe = true; - r->m_read.bFoundKeyframe = true; + r->m_read.flags |= (RTMP_READ_GOTKF|RTMP_READ_GOTFLVK); } /* skip till we find our keyframe * (seeking might put us somewhere before it) */ - if (!r->m_read.bFoundKeyframe && packet.m_packetType != 0x16) + if (!(r->m_read.flags & RTMP_READ_GOTKF) && + packet.m_packetType != 0x16) { Log(LOGWARNING, "Stream does not start with requested frame, ignoring data... "); @@ -3082,7 +3079,8 @@ Read_1_Packet(RTMP *r, char *buf, int buflen) break; } /* ok, do the same for FLV streams */ - if (!r->m_read.bFoundFlvKeyframe && packet.m_packetType == 0x16) + if (!(r->m_read.flags & RTMP_READ_GOTFLVK) && + packet.m_packetType == 0x16) { Log(LOGWARNING, "Stream does not start with requested FLV frame, ignoring data... "); @@ -3100,7 +3098,8 @@ Read_1_Packet(RTMP *r, char *buf, int buflen) * later position there is only one copy and it will be ignored by * the preceding if clause) */ - if (!r->m_read.bStopIgnoring && packet.m_packetType != 0x16) + if (!(r->m_read.flags & RTMP_READ_NO_IGNORE) && + packet.m_packetType != 0x16) { /* exclude type 0x16 (FLV) since it can * contain several FLV packets */ if (packet.m_nTimeStamp == 0) @@ -3110,7 +3109,8 @@ Read_1_Packet(RTMP *r, char *buf, int buflen) } else { - r->m_read.bStopIgnoring = true; /* stop ignoring packets */ + /* stop ignoring packets */ + r->m_read.flags |= RTMP_READ_NO_IGNORE; } } } @@ -3301,9 +3301,9 @@ RTMP_Read(RTMP *r, char *buf, int size) return -1; /* first time thru */ - if (!r->m_read.bDidHeader) + if (!(r->m_read.flags & RTMP_READ_HEADER)) { - if (!r->m_read.bResume) + if (!(r->m_read.flags & RTMP_READ_RESUME)) { char *mybuf = malloc(HEADERBUF); r->m_read.buf = mybuf; @@ -3332,7 +3332,7 @@ RTMP_Read(RTMP *r, char *buf, int size) r->m_read.buf = mybuf; r->m_read.bufpos = mybuf; } - r->m_read.bDidHeader = true; + r->m_read.flags |= RTMP_READ_HEADER; } /* If there's leftover data buffered, use it up */ diff --git a/librtmp/rtmp.h b/librtmp/rtmp.h index a248259..a619fed 100644 --- a/librtmp/rtmp.h +++ b/librtmp/rtmp.h @@ -161,8 +161,13 @@ extern "C" unsigned int buflen; uint32_t timestamp; uint8_t dataType; - uint8_t bResume; - uint8_t bDidHeader; + uint8_t flags; +#define RTMP_READ_HEADER 0x01 +#define RTMP_READ_RESUME 0x02 +#define RTMP_READ_NO_IGNORE 0x04 +#define RTMP_READ_GOTKF 0x08 +#define RTMP_READ_GOTFLVK 0x10 +#define RTMP_READ_SEEKING 0x20 int8_t status; #define RTMP_READ_COMPLETE -3 #define RTMP_READ_ERROR -2 @@ -171,9 +176,6 @@ extern "C" /* if bResume == TRUE */ uint8_t initialFrameType; - uint8_t bStopIgnoring; - uint8_t bFoundKeyframe; - uint8_t bFoundFlvKeyframe; uint32_t nResumeTS; char *metaHeader; char *initialFrame; diff --git a/rtmpdump.c b/rtmpdump.c index b2d8fac..9ee98e8 100644 --- a/rtmpdump.c +++ b/rtmpdump.c @@ -487,7 +487,8 @@ Download(RTMP * rtmp, // connected RTMP object if (dLength > 0) LogPrintf("For duration: %.3f sec\n", (double) dLength / 1000.0); - rtmp->m_read.bResume = bResume && nInitialFrameSize > 0; + if (bResume && nInitialFrameSize > 0) + rtmp->m_read.flags |= RTMP_READ_RESUME; rtmp->m_read.initialFrameType = initialFrameType; rtmp->m_read.nResumeTS = dSeek; rtmp->m_read.metaHeader = metaHeader;