Update of /cvsroot/pure-data/externals/pidip/modules
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv23844/modules
Modified Files:
Makefile pdp_ffmpeg~.c pdp_live~.c
Log Message:
PiDiP 0.12.19
Index: Makefile
===================================================================
RCS file: /cvsroot/pure-data/externals/pidip/modules/Makefile,v
retrieving revision 1.15
retrieving revision 1.16
diff -C2 -d -r1.15 -r1.16
*** Makefile 9 Jul 2005 19:35:40 -0000 1.15
--- Makefile 4 Oct 2005 20:37:14 -0000 1.16
***************
*** 22,26 ****
pdp_mapper.o pdp_theonice~.o pdp_icedthe~.o\
pdp_fdiff.o pdp_hue.o \
! # pdp_xcanvas.o pdp_aa.o
all_modules: $(OBJECTS)
--- 22,26 ----
pdp_mapper.o pdp_theonice~.o pdp_icedthe~.o\
pdp_fdiff.o pdp_hue.o \
! pdp_live~.o pdp_ffmpeg~.o # pdp_xcanvas.o pdp_aa.o
all_modules: $(OBJECTS)
Index: pdp_ffmpeg~.c
===================================================================
RCS file: /cvsroot/pure-data/externals/pidip/modules/pdp_ffmpeg~.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -C2 -d -r1.6 -r1.7
*** pdp_ffmpeg~.c 2 Jan 2005 06:02:48 -0000 1.6
--- pdp_ffmpeg~.c 4 Oct 2005 20:37:14 -0000 1.7
***************
*** 113,116 ****
--- 113,138 ----
x->x_avcontext->streams[i] = st;
+ #if FFMPEG_VERSION_INT >= 0x000409
+ if ( ic->streams[i]->codec->codec_type == CODEC_TYPE_UNKNOWN )
+ {
+ post( "pdp_ffmpeg~ : stream #%d # type : unknown", i );
+ }
+ if ( ic->streams[i]->codec->codec_type == CODEC_TYPE_AUDIO )
+ {
+ post( "pdp_ffmpeg~ : stream #%d # type : audio # id : %d # bitrate : %d",
+ i, ic->streams[i]->codec->codec_id, ic->streams[i]->codec->bit_rate );
+ post( "pdp_ffmpeg~ : sample rate : %d # channels : %d",
+ ic->streams[i]->codec->sample_rate, ic->streams[i]->codec->channels );
+ x->x_nbaudiostreams++;
+ }
+ if ( ic->streams[i]->codec->codec_type == CODEC_TYPE_VIDEO )
+ {
+ post( "pdp_ffmpeg~ : stream #%d # type : video # id : %d # bitrate : %d",
+ i, ic->streams[i]->codec->codec_id, ic->streams[i]->codec->bit_rate );
+ post( "pdp_ffmpeg~ : framerate : %d # width : %d # height : %d",
+ av_q2d( ic->streams[i]->r_frame_rate ), ic->streams[i]->codec->width, ic->streams[i]->codec->height );
+ x->x_nbvideostreams++;
+ }
+ #else
if ( ic->streams[i]->codec.codec_type == CODEC_TYPE_UNKNOWN )
{
***************
*** 133,136 ****
--- 155,159 ----
x->x_nbvideostreams++;
}
+ #endif
}
***************
*** 189,193 ****
--- 212,220 ----
for(i=0;i<x->x_avcontext->nb_streams;i++)
{
+ #if FFMPEG_VERSION_INT >= 0x000409
+ avcodec_close( x->x_avcontext->streams[i]->codec );
+ #else
avcodec_close( &x->x_avcontext->streams[i]->codec );
+ #endif
av_free( x->x_avcontext->streams[i] );
}
***************
*** 248,252 ****
--- 275,283 ----
{
AVCodec *codec;
+ #if FFMPEG_VERSION_INT >= 0x000409
+ codec = avcodec_find_encoder(x->x_avcontext->streams[i]->codec->codec_id);
+ #else
codec = avcodec_find_encoder(x->x_avcontext->streams[i]->codec.codec_id);
+ #endif
if (!codec)
{
***************
*** 256,260 ****
--- 287,295 ----
return;
}
+ #if FFMPEG_VERSION_INT >= 0x000409
+ if (avcodec_open(x->x_avcontext->streams[i]->codec, codec) < 0)
+ #else
if (avcodec_open(&x->x_avcontext->streams[i]->codec, codec) < 0)
+ #endif
{
post("pdp_ffmpeg~ : error while opening codec for stream #%d - maybe incorrect parameters such as bit_rate, rate, width or height\n", i);
***************
*** 372,377 ****
svideoindex=0;
saudioindex=0;
! for (i=0; i<x->x_avcontext->nb_streams; i++)
! {
/* convert pixel format and size if needed */
if ( x->x_avcontext->streams[i]->codec.codec_type == CODEC_TYPE_VIDEO )
--- 407,644 ----
svideoindex=0;
saudioindex=0;
! #if FFMPEG_VERSION_INT >= 0x000409
! for (i=0; i<x->x_avcontext->nb_streams; i++)
! {
! /* convert pixel format and size if needed */
! if ( x->x_avcontext->streams[i]->codec->codec_type == CODEC_TYPE_VIDEO )
! {
! t_int size;
!
! // check if the framerate has been exceeded
! if ( gettimeofday(&etime, NULL) == -1)
! {
! post("pdp_ffmpeg~ : could not read time" );
! }
! if ( etime.tv_sec != x->x_cursec )
! {
! x->x_cursec = etime.tv_sec;
! outlet_float( x->x_outlet_framerate, x->x_secondcount[ svideoindex ] );
! for (j=0; j<x->x_nbvideostreams; j++)
! {
! x->x_secondcount[ j ] = 0;
! }
! }
! framerate = av_q2d( x->x_avcontext->streams[i]->r_frame_rate );
! ttime = ( ( x->x_nbframes + 1 ) % framerate ) * ( 1000 / framerate );
! atime = ( etime.tv_usec / 1000 );
! // post("pdp_theonice~ : actual : %d, theoretical : %d", atime, ttime );
! if ( atime < ttime )
! {
! x->x_nbframes_dropped++;
! continue;
! }
!
! if ( x->x_avcontext->streams[i]->codec->pix_fmt != PIX_FMT_YUV420P )
! {
! /* create temporary picture */
! size = avpicture_get_size(x->x_avcontext->streams[i]->codec->pix_fmt,
! x->x_vwidth, x->x_vheight );
! if (!x->x_buf1) x->x_buf1 = (uint8_t*) malloc(size);
! if (!x->x_buf1)
! {
! post ("pdp_ffmpeg~ : severe error : could not allocate image buffer" );
! return;
! }
! x->x_formatted_picture = &x->x_picture_format;
! avpicture_fill(x->x_formatted_picture, x->x_buf1,
! x->x_avcontext->streams[i]->codec->pix_fmt,
! x->x_vwidth, x->x_vheight );
!
! if (img_convert(x->x_formatted_picture,
! x->x_avcontext->streams[i]->codec->pix_fmt,
! &pdppict, PIX_FMT_YUV420P,
! x->x_vwidth, x->x_vheight ) < 0)
! {
! post ("pdp_ffmpeg~ : error : image conversion failed" );
! }
! }
! else
! {
! x->x_formatted_picture = &pdppict;
! }
!
! // post ( "pdp_ffmpeg~ : resampling [%d,%d] -> [%d,%d]",
! // x->x_vwidth, x->x_vheight,
! // x->x_avcontext->streams[i]->codec->width,
! // x->x_avcontext->streams[i]->codec->height );
! if ( ( x->x_avcontext->streams[i]->codec->width < x->x_vwidth ) &&
! ( x->x_avcontext->streams[i]->codec->height < x->x_vheight ) )
! {
! owidth = x->x_avcontext->streams[i]->codec->width;
! oheight = x->x_avcontext->streams[i]->codec->height;
!
! if (x->x_img_resample_ctx) img_resample_close(x->x_img_resample_ctx);
!
! #if LIBAVCODEC_BUILD > 4715
! x->x_img_resample_ctx = img_resample_full_init(
! owidth, oheight,
! x->x_vwidth, x->x_vheight,
! 0, 0, 0, 0,
! 0, 0, 0, 0);
! #else
! x->x_img_resample_ctx = img_resample_full_init(
! owidth, oheight,
! x->x_vwidth, x->x_vheight, 0, 0, 0, 0);
! #endif
!
! size = avpicture_get_size(x->x_avcontext->streams[i]->codec->pix_fmt,
! owidth, oheight );
! if ( !x->x_buf2 )
! {
! x->x_buf2 = (uint8_t*) malloc(size);
! }
! if (!x->x_buf2)
! {
! post ("pdp_ffmpeg~ : severe error : could not allocate image buffer" );
! return;
! }
! x->x_final_picture = &x->x_picture_final;
! avpicture_fill(x->x_final_picture, x->x_buf2,
! x->x_avcontext->streams[i]->codec->pix_fmt,
! owidth, oheight );
!
! img_resample(x->x_img_resample_ctx, x->x_final_picture, x->x_formatted_picture);
!
! }
! else
! {
! x->x_final_picture = x->x_formatted_picture;
! }
!
! // encode and send the picture
! {
! AVFrame aframe;
! #if LIBAVCODEC_BUILD > 4715
! AVPacket vpkt;
! #endif
! t_int fsize, ret;
!
! memset(&aframe, 0, sizeof(AVFrame));
! *(AVPicture*)&aframe= *x->x_final_picture;
! aframe.pts = etime.tv_sec*1000000 + etime.tv_usec;
! aframe.quality = x->x_avcontext->streams[i]->quality;
!
! fsize = avcodec_encode_video(x->x_avcontext->streams[i]->codec,
! x->x_video_buffer, VIDEO_BUFFER_SIZE,
! &aframe);
!
! #if LIBAVCODEC_BUILD > 4715
! av_init_packet(&vpkt);
!
! vpkt.pts = aframe.pts;
! if(x->x_avcontext->streams[i]->codec->coded_frame->key_frame)
! vpkt.flags |= PKT_FLAG_KEY;
! vpkt.stream_index= i;
! vpkt.data= (uint8_t *)x->x_video_buffer;
! vpkt.size= fsize;
!
! if ( ( ret = av_write_frame( x->x_avcontext, &vpkt) ) < 0 )
! #else
! if ( ( ret = av_write_frame( x->x_avcontext, i, x->x_video_buffer, fsize) ) < 0 )
! #endif
! {
! post ("pdp_ffmpeg~ : error : could not send frame : (ret=%d)", ret );
! return;
! }
! else
! {
! x->x_nbframes++;
! x->x_secondcount[ svideoindex ]++;
! // post ("pdp_ffmpeg~ : index=%d count=%d", svideoindex, x->x_secondcount[ svideoindex ] );
! svideoindex++;
! }
! }
! }
!
! /* convert and stream audio data */
! if ( x->x_avcontext->streams[i]->codec->codec_type == CODEC_TYPE_AUDIO )
! {
! // we assume audio is synchronized on next video stream
! if ( ( (i+1) < x->x_avcontext->nb_streams ) &&
! ( x->x_avcontext->streams[i+1]->codec->codec_type == CODEC_TYPE_VIDEO ) )
! {
! x->x_audio_per_frame =
! // 2*( (int) sys_getsr() ) / av_q2d( x->x_avcontext->streams[i+1]->r_frame_rate ) ;
! AUDIO_PACKET_SIZE;
! // post ("pdp_ffmpeg~ : transmit %d samples", x->x_audio_per_frame );
! }
! else
! {
! post ("pdp_ffmpeg~ : can't stream audio : video stream is not found" );
! continue;
! }
!
! if ( x->x_audioin_position > x->x_audio_per_frame )
! {
! size = x->x_audioin_position;
! if ( ( x->x_avcontext->streams[i]->codec->sample_rate != (int)sys_getsr() ) ||
! ( x->x_avcontext->streams[i]->codec->channels != 2 ) )
! {
! if (x->x_audio_resample_ctx) audio_resample_close(x->x_audio_resample_ctx);
! x->x_audio_resample_ctx =
! audio_resample_init(x->x_avcontext->streams[i]->codec->channels, 2,
! x->x_avcontext->streams[i]->codec->sample_rate,
! (int)sys_getsr());
! sizeout = audio_resample(x->x_audio_resample_ctx,
! x->x_audio_enc_buf,
! x->x_audio_buf,
! size / (x->x_avcontext->streams[i]->codec->channels * 2));
! pencbuf = (short*) &x->x_audio_enc_buf;
! sizeout = sizeout * x->x_avcontext->streams[i]->codec->channels * 2;
! }
! else
! {
! pencbuf = (short*) &x->x_audio_buf;
! sizeout = size;
! }
!
! /* output resampled raw samples */
! fifo_write(&x->x_audio_fifo[saudioindex], (uint8_t*)pencbuf, sizeout,
! &x->x_audio_fifo[saudioindex].wptr);
!
! framebytes = x->x_avcontext->streams[i]->codec->frame_size * 2 *
! x->x_avcontext->streams[i]->codec->channels;
!
! while (fifo_read(&x->x_audio_fifo[saudioindex], (uint8_t*)pencbuf, framebytes,
! &x->x_audio_fifo[saudioindex].rptr) == 0)
! {
! #if LIBAVCODEC_BUILD > 4715
! AVPacket apkt;
! #endif
! encsize = avcodec_encode_audio(x->x_avcontext->streams[i]->codec,
! (uint8_t*)&x->x_audio_out, sizeof(x->x_audio_out),
! (short *)pencbuf);
! #if LIBAVCODEC_BUILD > 4715
! av_init_packet(&apkt);
!
! apkt.pts = etime.tv_sec*1000000 + etime.tv_usec;
! if(x->x_avcontext->streams[i]->codec->coded_frame->key_frame)
! apkt.flags |= PKT_FLAG_KEY;
! apkt.stream_index= i;
! apkt.data= (uint8_t *)x->x_audio_out;
! apkt.size= encsize;
!
! av_write_frame(x->x_avcontext, &apkt);
! #else
! av_write_frame(x->x_avcontext, i, x->x_audio_out, encsize);
! #endif
! }
! saudioindex++;
! }
! }
! }
! #else
! for (i=0; i<x->x_avcontext->nb_streams; i++)
! {
/* convert pixel format and size if needed */
if ( x->x_avcontext->streams[i]->codec.codec_type == CODEC_TYPE_VIDEO )
***************
*** 602,605 ****
--- 869,873 ----
}
}
+ #endif
x->x_audioin_position=0;
}
Index: pdp_live~.c
===================================================================
RCS file: /cvsroot/pure-data/externals/pidip/modules/pdp_live~.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -C2 -d -r1.5 -r1.6
*** pdp_live~.c 2 Jan 2005 06:02:49 -0000 1.5
--- pdp_live~.c 4 Oct 2005 20:37:14 -0000 1.6
***************
*** 277,281 ****
--- 277,285 ----
{
if ( !x->x_streaming ) break;
+ #if FFMPEG_VERSION_INT >= 0x000409
+ switch(x->x_avcontext->streams[x->x_pkt.stream_index]->codec->codec_type)
+ #else
switch(x->x_avcontext->streams[x->x_pkt.stream_index]->codec.codec_type)
+ #endif
{
case CODEC_TYPE_AUDIO:
***************
*** 285,289 ****
--- 289,297 ----
return 0;
}
+ #if FFMPEG_VERSION_INT >= 0x000409
+ chunksize = avcodec_decode_audio(x->x_avcontext->streams[x->x_pkt.stream_index]->codec,
+ #else
chunksize = avcodec_decode_audio(&x->x_avcontext->streams[x->x_pkt.stream_index]->codec,
+ #endif
&x->x_audio_buf[0], &audiosize,
pcktptr, length);
***************
*** 317,320 ****
--- 325,343 ----
// (int)sys_getsr(), 2, x->x_audioin_position );
+ #if FFMPEG_VERSION_INT >= 0x000409
+ x->x_audiochannels = x->x_avcontext->streams[x->x_pkt.stream_index]->codec->channels;
+ x->x_samplerate = x->x_avcontext->streams[x->x_pkt.stream_index]->codec->sample_rate;
+ if (x->x_audio_resample_ctx) audio_resample_close(x->x_audio_resample_ctx);
+ x->x_audio_resample_ctx =
+ audio_resample_init(DEFAULT_CHANNELS,
+ x->x_avcontext->streams[x->x_pkt.stream_index]->codec->channels,
+ (int)sys_getsr(),
+ x->x_avcontext->streams[x->x_pkt.stream_index]->codec->sample_rate);
+
+ sizeout = audio_resample(x->x_audio_resample_ctx,
+ &x->x_audio_in[x->x_audioin_position],
+ &x->x_audio_buf[0],
+ audiosize/(x->x_avcontext->streams[x->x_pkt.stream_index]->codec->channels * sizeof(short)));
+ #else
x->x_audiochannels = x->x_avcontext->streams[x->x_pkt.stream_index]->codec.channels;
x->x_samplerate = x->x_avcontext->streams[x->x_pkt.stream_index]->codec.sample_rate;
***************
*** 330,333 ****
--- 353,357 ----
&x->x_audio_buf[0],
audiosize/(x->x_avcontext->streams[x->x_pkt.stream_index]->codec.channels * sizeof(short)));
+ #endif
sizeout = sizeout * DEFAULT_CHANNELS;
***************
*** 355,358 ****
--- 379,401 ----
case CODEC_TYPE_VIDEO:
+ #if FFMPEG_VERSION_INT >= 0x000409
+ imagesize = (x->x_avcontext->streams[x->x_pkt.stream_index]->codec->width *
+ x->x_avcontext->streams[x->x_pkt.stream_index]->codec->height * 3) / 2; // yuv planar
+
+ x->x_framerate = ( t_int ) av_q2d( x->x_avcontext->streams[x->x_pkt.stream_index]->r_frame_rate );
+ if ( x->x_framerate == 0 ) x->x_framerate = DEFAULT_FRAME_RATE;
+ x->x_videoindex = x->x_pkt.stream_index;
+
+ chunksize = avcodec_decode_video(
+ x->x_avcontext->streams[x->x_pkt.stream_index]->codec,
+ &frame, &pictureok,
+ pcktptr, length);
+ if ( x->x_avcontext->streams[x->x_pkt.stream_index]->codec->pix_fmt != PIX_FMT_YUV420P )
+ {
+ post( "pdp_live~ : unsupported image format : %d",
+ x->x_avcontext->streams[x->x_pkt.stream_index]->codec->pix_fmt );
+ pictureok = 0;
+ }
+ #else
imagesize = (x->x_avcontext->streams[x->x_pkt.stream_index]->codec.width *
x->x_avcontext->streams[x->x_pkt.stream_index]->codec.height * 3) / 2; // yuv planar
***************
*** 372,384 ****
pictureok = 0;
}
! // post( "pdp_live~ : decoded new frame : type=%d format=%d (w=%d) (h=%d) (linesizes=%d,%d,%d,%d)",
! // frame.pict_type,
! // x->x_avcontext->streams[x->x_pkt.stream_index]->codec.pix_fmt,
! // x->x_avcontext->streams[x->x_pkt.stream_index]->codec.width,
! // x->x_avcontext->streams[x->x_pkt.stream_index]->codec.height,
! // frame.linesize[0],
! // frame.linesize[1],
! // frame.linesize[2],
! // frame.linesize[3] );
x->x_picture_decoded = *(AVPicture*)&frame;
x->x_avcontext->streams[x->x_pkt.stream_index]->quality= frame.quality;
--- 415,419 ----
pictureok = 0;
}
! #endif
x->x_picture_decoded = *(AVPicture*)&frame;
x->x_avcontext->streams[x->x_pkt.stream_index]->quality= frame.quality;
***************
*** 404,409 ****
--- 439,449 ----
}
x->x_newpicture=1;
+ #if FFMPEG_VERSION_INT >= 0x000409
+ x->x_vwidth = x->x_avcontext->streams[x->x_pkt.stream_index]->codec->width;
+ x->x_vheight = x->x_avcontext->streams[x->x_pkt.stream_index]->codec->height;
+ #else
x->x_vwidth = x->x_avcontext->streams[x->x_pkt.stream_index]->codec.width;
x->x_vheight = x->x_avcontext->streams[x->x_pkt.stream_index]->codec.height;
+ #endif
x->x_vsize = x->x_vwidth*x->x_vheight;
***************
*** 544,548 ****
x->x_avparameters.sample_rate = sys_getsr();
x->x_avparameters.channels = DEFAULT_CHANNELS;
- x->x_avparameters.frame_rate = DEFAULT_FRAME_RATE;
x->x_avparameters.width = DEFAULT_WIDTH;
if ( x->x_framerate = 0 ) x->x_framerate = DEFAULT_FRAME_RATE;
--- 584,587 ----
***************
*** 585,588 ****
--- 624,652 ----
AVStream *st;
+ #if FFMPEG_VERSION_INT >= 0x000409
+ if ( x->x_avcontext->streams[i]->codec->codec_type == CODEC_TYPE_UNKNOWN )
+ {
+ post( "pdp_live~ : stream #%d # type : unknown", i );
+ }
+ if ( x->x_avcontext->streams[i]->codec->codec_type == CODEC_TYPE_AUDIO )
+ {
+ post( "pdp_live~ : stream #%d # type : audio # id : %d # bitrate : %d",
+ i, x->x_avcontext->streams[i]->codec->codec_id, x->x_avcontext->streams[i]->codec->bit_rate );
+ post( "pdp_live~ : sample rate : %d # channels : %d",
+ x->x_avcontext->streams[i]->codec->sample_rate, x->x_avcontext->streams[i]->codec->channels );
+ x->x_nbaudiostreams++;
+ }
+ if ( x->x_avcontext->streams[i]->codec->codec_type == CODEC_TYPE_VIDEO )
+ {
+ post( "pdp_live~ : stream #%d # type : video # id : %d # bitrate : %d",
+ i, x->x_avcontext->streams[i]->codec->codec_id,
+ x->x_avcontext->streams[i]->codec->bit_rate );
+ post( "pdp_live~ : framerate : %d # width : %d # height : %d",
+ av_q2d( x->x_avcontext->streams[i]->r_frame_rate )/10000,
+ x->x_avcontext->streams[i]->codec->width,
+ x->x_avcontext->streams[i]->codec->height );
+ x->x_nbvideostreams++;
+ }
+ #else
if ( x->x_avcontext->streams[i]->codec.codec_type == CODEC_TYPE_UNKNOWN )
{
***************
*** 608,611 ****
--- 672,676 ----
x->x_nbvideostreams++;
}
+ #endif
}
***************
*** 615,619 ****
--- 680,688 ----
AVCodec *codec;
post("pdp_live~ : opening decoder for stream #%d", i);
+ #if FFMPEG_VERSION_INT >= 0x000409
+ codec = avcodec_find_decoder(x->x_avcontext->streams[i]->codec->codec_id);
+ #else
codec = avcodec_find_decoder(x->x_avcontext->streams[i]->codec.codec_id);
+ #endif
if (!codec)
{
***************
*** 625,629 ****
--- 694,702 ----
pthread_exit(NULL);
}
+ #if FFMPEG_VERSION_INT >= 0x000409
+ if (avcodec_open(x->x_avcontext->streams[i]->codec, codec) < 0)
+ #else
if (avcodec_open(&x->x_avcontext->streams[i]->codec, codec) < 0)
+ #endif
{
post("pdp_live~ : error while opening codec for stream #%d - maybe incorrect parameters such as bit_rate, rate, width or height\n", i);
***************
*** 704,708 ****
--- 777,785 ----
for(i=0;i<x->x_avcontext->nb_streams;i++)
{
+ #if FFMPEG_VERSION_INT >= 0x000409
+ if (avcodec_close(x->x_avcontext->streams[i]->codec) < 0)
+ #else
if (avcodec_close(&x->x_avcontext->streams[i]->codec) < 0)
+ #endif
{
post("pdp_live~ : error while closing codec for stream #%d", i);