Bug 178 - Added support for CVS ffmpeg.

git-svn-id: http://svn.zoneminder.com/svn/zm/trunk@1509 e3e1d417-86f3-4887-817a-d78f3d33393f
This commit is contained in:
stan 2005-10-16 21:32:37 +00:00
parent 865f8e3816
commit ce7164a065
1 changed files with 8 additions and 10 deletions

View File

@ -86,6 +86,7 @@ void VideoStream::SetupCodec( int colours, int width, int height, int bitrate, i
/* put sample parameters */ /* put sample parameters */
c->bit_rate = bitrate; c->bit_rate = bitrate;
c->pix_fmt = PIX_FMT_YUV420P;
/* resolution must be a multiple of two */ /* resolution must be a multiple of two */
c->width = width; c->width = width;
c->height = height; c->height = height;
@ -102,15 +103,12 @@ void VideoStream::SetupCodec( int colours, int width, int height, int bitrate, i
c->frame_rate_base = 1; c->frame_rate_base = 1;
#endif #endif
c->gop_size = frame_rate/2; /* emit one intra frame every half second or so */ c->gop_size = frame_rate/2; /* emit one intra frame every half second or so */
c->gop_size = 30; c->gop_size = 12;
if ( c->gop_size < 3 ) if ( c->gop_size < 3 )
c->gop_size = 3; c->gop_size = 3;
if (c->codec_id == CODEC_ID_MPEG1VIDEO || // some formats want stream headers to be seperate
c->codec_id == CODEC_ID_MPEG2VIDEO) if(!strcmp(ofc->oformat->name, "mp4") || !strcmp(ofc->oformat->name, "mov") || !strcmp(ofc->oformat->name, "3gp"))
{ c->flags |= CODEC_FLAG_GLOBAL_HEADER;
/* just for testing, we also add B frames */
c->max_b_frames = 2;
}
} }
} }
@ -147,7 +145,7 @@ void VideoStream::OpenStream()
/* open the codec */ /* open the codec */
if (avcodec_open(c, codec) < 0) if (avcodec_open(c, codec) < 0)
{ {
Fatal(( "could not open codec" )); Fatal(( "Could not open codec" ));
} }
/* allocate the encoded raw picture */ /* allocate the encoded raw picture */
@ -322,7 +320,7 @@ double VideoStream::EncodeFrame( uint8_t *buffer, int buffer_size, bool add_time
if ( add_timestamp ) if ( add_timestamp )
ost->pts.val = timestamp; ost->pts.val = timestamp;
int out_size = avcodec_encode_video(c, video_outbuf, video_outbuf_size, opicture_ptr); int out_size = avcodec_encode_video(c, video_outbuf, video_outbuf_size, opicture_ptr);
if (out_size != 0) if (out_size > 0)
{ {
#if FFMPEG_VERSION_INT < 0x000409 #if FFMPEG_VERSION_INT < 0x000409
ret = av_write_frame(ofc, ost->index, video_outbuf, out_size); ret = av_write_frame(ofc, ost->index, video_outbuf, out_size);
@ -330,7 +328,7 @@ double VideoStream::EncodeFrame( uint8_t *buffer, int buffer_size, bool add_time
AVPacket pkt; AVPacket pkt;
av_init_packet(&pkt); av_init_packet(&pkt);
pkt.pts = c->coded_frame->pts; pkt.pts= av_rescale_q( c->coded_frame->pts, c->time_base, ost->time_base );
if(c->coded_frame->key_frame) if(c->coded_frame->key_frame)
pkt.flags |= PKT_FLAG_KEY; pkt.flags |= PKT_FLAG_KEY;
pkt.stream_index = ost->index; pkt.stream_index = ost->index;