You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
158 lines
6.6 KiB
158 lines
6.6 KiB
--- ./src.orig/frame.cc 2016-12-18 12:25:48.480275083 -0600
|
|
+++ ./src/frame.cc 2016-12-18 12:54:17.800740672 -0600
|
|
@@ -103,7 +103,7 @@
|
|
av_register_all();
|
|
libavcodec = avcodec_alloc_context3(NULL);
|
|
avcodec_open2( libavcodec,
|
|
- avcodec_find_decoder( CODEC_ID_DVVIDEO ), NULL );
|
|
+ avcodec_find_decoder( AV_CODEC_ID_DVVIDEO ), NULL );
|
|
pthread_mutex_unlock( &avcodec_mutex );
|
|
data = ( unsigned char* ) av_mallocz( 144000 );
|
|
#if defined(HAVE_SWSCALE)
|
|
@@ -1060,7 +1060,7 @@
|
|
int Frame::ExtractRGB( void * rgb )
|
|
{
|
|
#if defined(HAVE_LIBAVCODEC)
|
|
- AVFrame *frame = avcodec_alloc_frame();
|
|
+ AVFrame *frame = av_frame_alloc();
|
|
AVPicture dest;
|
|
int got_picture;
|
|
|
|
@@ -1072,17 +1072,17 @@
|
|
avcodec_decode_video2( libavcodec, frame, &got_picture, &pkt );
|
|
if ( got_picture )
|
|
{
|
|
- avpicture_fill( &dest, static_cast<uint8_t*>( rgb ), PIX_FMT_RGB24, GetWidth(), GetHeight() );
|
|
+ avpicture_fill( &dest, static_cast<uint8_t*>( rgb ), AV_PIX_FMT_RGB24, GetWidth(), GetHeight() );
|
|
#if defined(HAVE_SWSCALE)
|
|
if ( !imgConvertRgbCtx )
|
|
imgConvertRgbCtx = sws_getContext( libavcodec->width, libavcodec->height, libavcodec->pix_fmt,
|
|
- GetWidth(), GetHeight(), PIX_FMT_RGB24, SWS_FAST_BILINEAR, NULL, NULL, NULL );
|
|
+ GetWidth(), GetHeight(), AV_PIX_FMT_RGB24, SWS_FAST_BILINEAR, NULL, NULL, NULL );
|
|
sws_scale( imgConvertRgbCtx, frame->data, frame->linesize, 0, libavcodec->height, dest.data, dest.linesize );
|
|
#else
|
|
- img_convert( &dest, PIX_FMT_RGB24, reinterpret_cast<AVPicture*>( frame ), libavcodec->pix_fmt, GetWidth(), GetHeight() );
|
|
+ img_convert( &dest, AV_PIX_FMT_RGB24, reinterpret_cast<AVPicture*>( frame ), libavcodec->pix_fmt, GetWidth(), GetHeight() );
|
|
#endif
|
|
}
|
|
- av_free( frame );
|
|
+ av_frame_free( &frame );
|
|
#else
|
|
unsigned char *pixels[ 3 ];
|
|
int pitches[ 3 ];
|
|
@@ -1125,7 +1125,7 @@
|
|
int Frame::ExtractYUV( void *yuv )
|
|
{
|
|
#if defined(HAVE_LIBAVCODEC)
|
|
- AVFrame *frame = avcodec_alloc_frame();;
|
|
+ AVFrame *frame = av_frame_alloc();;
|
|
AVPicture output;
|
|
int got_picture;
|
|
|
|
@@ -1137,14 +1137,14 @@
|
|
avcodec_decode_video2( libavcodec, frame, &got_picture, &pkt );
|
|
if ( got_picture )
|
|
{
|
|
- avpicture_fill( &output, static_cast<uint8_t*>( yuv ), PIX_FMT_YUV422, GetWidth(), GetHeight() );
|
|
+ avpicture_fill( &output, static_cast<uint8_t*>( yuv ), AV_PIX_FMT_YUYV422, GetWidth(), GetHeight() );
|
|
#if defined(HAVE_SWSCALE)
|
|
if ( !imgConvertYuvCtx )
|
|
imgConvertYuvCtx = sws_getContext( libavcodec->width, libavcodec->height, libavcodec->pix_fmt,
|
|
- GetWidth(), GetHeight(), PIX_FMT_YUV422, SWS_FAST_BILINEAR, NULL, NULL, NULL );
|
|
+ GetWidth(), GetHeight(), AV_PIX_FMT_YUYV422, SWS_FAST_BILINEAR, NULL, NULL, NULL );
|
|
sws_scale( imgConvertYuvCtx, frame->data, frame->linesize, 0, libavcodec->height, output.data, output.linesize );
|
|
#else
|
|
- img_convert( &output, PIX_FMT_YUV422, (AVPicture *)frame, libavcodec->pix_fmt, GetWidth(), GetHeight() );
|
|
+ img_convert( &output, AV_PIX_FMT_YUYV422, (AVPicture *)frame, libavcodec->pix_fmt, GetWidth(), GetHeight() );
|
|
#endif
|
|
}
|
|
av_free( frame );
|
|
@@ -1164,7 +1164,7 @@
|
|
int Frame::ExtractYUV420( uint8_t *yuv, uint8_t *output[ 3 ] )
|
|
{
|
|
#if defined(HAVE_LIBAVCODEC)
|
|
- AVFrame *frame = avcodec_alloc_frame();
|
|
+ AVFrame *frame = av_frame_alloc();
|
|
int got_picture;
|
|
|
|
AVPacket pkt;
|
|
@@ -1176,7 +1176,7 @@
|
|
|
|
int width = GetWidth(), height = GetHeight();
|
|
|
|
- if ( libavcodec->pix_fmt == PIX_FMT_YUV420P ) // PAL
|
|
+ if ( libavcodec->pix_fmt == AV_PIX_FMT_YUV420P ) // PAL
|
|
{
|
|
int h2 = height / 2;
|
|
int w2 = width / 2;
|
|
@@ -1204,7 +1204,7 @@
|
|
}
|
|
}
|
|
}
|
|
- else // libavcodec.pix_fmt == PIX_FMT_YUV411P // NTSC
|
|
+ else // libavcodec.pix_fmt == AV_PIX_FMT_YUV411P // NTSC
|
|
{
|
|
int w4 = width / 4;
|
|
|
|
@@ -1341,7 +1341,7 @@
|
|
avformatEncoder->oformat = av_guess_format( "dv", NULL, NULL );
|
|
AVStream* vst = avformat_new_stream( avformatEncoder, NULL );
|
|
vst->codec->codec_type = AVMEDIA_TYPE_VIDEO;
|
|
- vst->codec->codec_id = CODEC_ID_DVVIDEO;
|
|
+ vst->codec->codec_id = AV_CODEC_ID_DVVIDEO;
|
|
vst->codec->bit_rate = 25000000;
|
|
vst->start_time = 0;
|
|
AVCodecContext *avcodecEncoder = vst->codec;
|
|
@@ -1366,14 +1366,14 @@
|
|
#endif
|
|
avcodecEncoder->thread_count = 2;
|
|
avcodecEncoder->time_base= isPAL ? ( AVRational ){ 1, 25 } : ( AVRational ){ 1001, 30000 };
|
|
- avcodecEncoder->pix_fmt = isPAL ? PIX_FMT_YUV420P : PIX_FMT_YUV411P;
|
|
+ avcodecEncoder->pix_fmt = isPAL ? AV_PIX_FMT_YUV420P : AV_PIX_FMT_YUV411P;
|
|
avcodecEncoder->flags |= CODEC_FLAG_INTERLACED_DCT;
|
|
- avcodec_open2( avcodecEncoder, avcodec_find_encoder( CODEC_ID_DVVIDEO ), NULL );
|
|
+ avcodec_open2( avcodecEncoder, avcodec_find_encoder( AV_CODEC_ID_DVVIDEO ), NULL );
|
|
av_new_packet( &avpacketEncoder, 144000 );
|
|
tempImage = ( uint8_t* ) av_malloc(
|
|
avpicture_get_size( avcodecEncoder->pix_fmt, avcodecEncoder->width, avcodecEncoder->height ) );
|
|
#if defined(HAVE_SWSCALE)
|
|
- imgConvertEncoderCtx = sws_getContext( avcodecEncoder->width, avcodecEncoder->height, PIX_FMT_RGB24,
|
|
+ imgConvertEncoderCtx = sws_getContext( avcodecEncoder->width, avcodecEncoder->height, AV_PIX_FMT_RGB24,
|
|
avcodecEncoder->width, avcodecEncoder->height, avcodecEncoder->pix_fmt, SWS_FAST_BILINEAR, NULL, NULL, NULL);
|
|
#endif
|
|
}
|
|
@@ -1452,8 +1452,8 @@
|
|
if ( CreateEncoder( IsPAL(), IsWide() ) )
|
|
{
|
|
#if defined(HAVE_LIBAVCODEC)
|
|
- AVFrame *input = avcodec_alloc_frame();
|
|
- AVFrame *output = avcodec_alloc_frame();
|
|
+ AVFrame *input = av_frame_alloc();
|
|
+ AVFrame *output = av_frame_alloc();
|
|
|
|
if ( input && output )
|
|
{
|
|
@@ -1464,16 +1464,19 @@
|
|
|
|
// Convert color space
|
|
avpicture_fill( ( AVPicture* )output, tempImage, avcodecEncoder->pix_fmt, width, height );
|
|
- avpicture_fill( ( AVPicture* )input, rgb, PIX_FMT_RGB24, width, height );
|
|
+ avpicture_fill( ( AVPicture* )input, rgb, AV_PIX_FMT_RGB24, width, height );
|
|
#if defined(HAVE_SWSCALE)
|
|
sws_scale( imgConvertEncoderCtx, input->data, input->linesize, 0, height,
|
|
output->data, output->linesize);
|
|
#else
|
|
- img_convert( ( AVPicture* )output, avcodecEncoder->pix_fmt, ( AVPicture* )input, PIX_FMT_RGB24, width, height );
|
|
+ img_convert( ( AVPicture* )output, avcodecEncoder->pix_fmt, ( AVPicture* )input, AV_PIX_FMT_RGB24, width, height );
|
|
#endif
|
|
|
|
// Encode
|
|
- bytesInFrame = avcodec_encode_video( avcodecEncoder, avpacketEncoder.data, size, output );
|
|
+
|
|
+ // bytesInFrame = avcodec_encode_video( avcodecEncoder, avpacketEncoder.data, size, output );
|
|
+ int got_packet;
|
|
+ bytesInFrame = avcodec_encode_video2( avcodecEncoder, &avpacketEncoder, output, &got_packet );
|
|
avformatEncoder->pb = avio_alloc_context(data, bytesInFrame, 0, NULL, NULL, NULL, NULL);
|
|
avpacketEncoder.size = bytesInFrame;
|
|
if ( !isEncoderHeaderWritten )
|