mirror of https://git.ffmpeg.org/ffmpeg.git
various fixes
Originally committed as revision 3031 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
e31d863ede
commit
11a8e42573
|
@ -26,6 +26,7 @@
|
||||||
typedef struct FLVFrame {
|
typedef struct FLVFrame {
|
||||||
int type;
|
int type;
|
||||||
int timestamp;
|
int timestamp;
|
||||||
|
int reserved;
|
||||||
int flags;
|
int flags;
|
||||||
uint8_t *data;
|
uint8_t *data;
|
||||||
int size;
|
int size;
|
||||||
|
@ -38,6 +39,7 @@ typedef struct FLVContext {
|
||||||
int initDelay;
|
int initDelay;
|
||||||
int64_t sampleCount;
|
int64_t sampleCount;
|
||||||
int64_t frameCount;
|
int64_t frameCount;
|
||||||
|
int reserved;
|
||||||
FLVFrame *frames;
|
FLVFrame *frames;
|
||||||
} FLVContext;
|
} FLVContext;
|
||||||
|
|
||||||
|
@ -119,10 +121,18 @@ static int mp3info(void *data, int *byteSize, int *samplesPerFrame, int *sampleR
|
||||||
}
|
}
|
||||||
#endif // CONFIG_MP3LAME
|
#endif // CONFIG_MP3LAME
|
||||||
|
|
||||||
|
static void put_be24(ByteIOContext *pb, int value)
|
||||||
|
{
|
||||||
|
put_byte(pb, (value>>16) & 0xFF );
|
||||||
|
put_byte(pb, (value>> 8) & 0xFF );
|
||||||
|
put_byte(pb, (value>> 0) & 0xFF );
|
||||||
|
}
|
||||||
|
|
||||||
static int flv_write_header(AVFormatContext *s)
|
static int flv_write_header(AVFormatContext *s)
|
||||||
{
|
{
|
||||||
ByteIOContext *pb = &s->pb;
|
ByteIOContext *pb = &s->pb;
|
||||||
FLVContext *flv = s->priv_data;
|
FLVContext *flv = s->priv_data;
|
||||||
|
int i;
|
||||||
|
|
||||||
av_set_pts_info(s, 24, 1, 1000); /* 24 bit pts in ms */
|
av_set_pts_info(s, 24, 1, 1000); /* 24 bit pts in ms */
|
||||||
|
|
||||||
|
@ -139,14 +149,19 @@ static int flv_write_header(AVFormatContext *s)
|
||||||
put_be32(pb,9);
|
put_be32(pb,9);
|
||||||
put_be32(pb,0);
|
put_be32(pb,0);
|
||||||
|
|
||||||
return 0;
|
for(i=0; i<s->nb_streams; i++){
|
||||||
}
|
AVCodecContext *enc = &s->streams[i]->codec;
|
||||||
|
if(enc->codec_tag == 5){
|
||||||
|
put_byte(pb,8); // message type
|
||||||
|
put_be24(pb,0); // include flags
|
||||||
|
put_be24(pb,0); // time stamp
|
||||||
|
put_be32(pb,0); // reserved
|
||||||
|
put_be32(pb,11); // size
|
||||||
|
flv->reserved=5;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void put_be24(ByteIOContext *pb, int value)
|
return 0;
|
||||||
{
|
|
||||||
put_byte(pb, (value>>16) & 0xFF );
|
|
||||||
put_byte(pb, (value>> 8) & 0xFF );
|
|
||||||
put_byte(pb, (value>> 0) & 0xFF );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void InsertSorted(FLVContext *flv, FLVFrame *frame)
|
static void InsertSorted(FLVContext *flv, FLVFrame *frame)
|
||||||
|
@ -157,7 +172,7 @@ static void InsertSorted(FLVContext *flv, FLVFrame *frame)
|
||||||
FLVFrame *trav = flv->frames;
|
FLVFrame *trav = flv->frames;
|
||||||
FLVFrame *prev = 0;
|
FLVFrame *prev = 0;
|
||||||
for (;trav;) {
|
for (;trav;) {
|
||||||
if ( trav->timestamp >= frame->timestamp ) {
|
if ( trav->timestamp > frame->timestamp) {
|
||||||
frame->next = trav;
|
frame->next = trav;
|
||||||
if ( prev ) {
|
if ( prev ) {
|
||||||
prev->next = frame;
|
prev->next = frame;
|
||||||
|
@ -177,10 +192,11 @@ static void InsertSorted(FLVContext *flv, FLVFrame *frame)
|
||||||
|
|
||||||
static void DumpFrame(ByteIOContext *pb, FLVFrame *frame)
|
static void DumpFrame(ByteIOContext *pb, FLVFrame *frame)
|
||||||
{
|
{
|
||||||
|
//av_log(NULL, AV_LOG_DEBUG, "T%02X S%d T%d R%d F%02X ... R%08X\n", frame->type, frame->size+1, frame->timestamp, 0, frame->flags, frame->size+1+11);
|
||||||
put_byte(pb,frame->type); // message type
|
put_byte(pb,frame->type); // message type
|
||||||
put_be24(pb,frame->size+1); // include flags
|
put_be24(pb,frame->size+1); // include flags
|
||||||
put_be24(pb,frame->timestamp); // time stamp
|
put_be24(pb,frame->timestamp); // time stamp
|
||||||
put_be32(pb,0); // reserved
|
put_be32(pb,frame->reserved); // reserved
|
||||||
put_byte(pb,frame->flags);
|
put_byte(pb,frame->flags);
|
||||||
put_buffer(pb, frame->data, frame->size);
|
put_buffer(pb, frame->data, frame->size);
|
||||||
put_be32(pb,frame->size+1+11); // reserved
|
put_be32(pb,frame->size+1+11); // reserved
|
||||||
|
@ -236,6 +252,7 @@ static int flv_write_packet(AVFormatContext *s, int stream_index,
|
||||||
frame->size = size;
|
frame->size = size;
|
||||||
frame->data = av_malloc(size);
|
frame->data = av_malloc(size);
|
||||||
frame->timestamp = timestamp;
|
frame->timestamp = timestamp;
|
||||||
|
frame->reserved= flv->reserved;
|
||||||
memcpy(frame->data,buf,size);
|
memcpy(frame->data,buf,size);
|
||||||
|
|
||||||
// av_log(s, AV_LOG_DEBUG, "type:%d pts: %lld size:%d\n", enc->codec_type, timestamp, size);
|
// av_log(s, AV_LOG_DEBUG, "type:%d pts: %lld size:%d\n", enc->codec_type, timestamp, size);
|
||||||
|
|
Loading…
Reference in New Issue