From 492cd3a9203779380cea24f23190b92af2b48007 Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Mon, 9 Dec 2002 12:03:43 +0000 Subject: [PATCH] AVVideoFrame -> AVFrame Originally committed as revision 1327 to svn://svn.ffmpeg.org/ffmpeg/trunk --- ffmpeg.c | 18 +++++++++--------- ffserver.c | 4 ++-- libavcodec/ac3enc.c | 10 +++++++++- libavcodec/adpcm.c | 8 ++++++-- libavcodec/apiexample.c | 8 ++++---- libavcodec/avcodec.h | 35 ++++++++++++++--------------------- libavcodec/dv.c | 6 +++--- libavcodec/h263dec.c | 8 ++++---- libavcodec/huffyuv.c | 16 ++++++++-------- libavcodec/mpeg12.c | 12 ++++++------ libavcodec/mpegaudio.c | 9 ++++++++- libavcodec/mpegvideo.c | 26 +++++++++++++------------- libavcodec/mpegvideo.h | 2 +- libavcodec/oggvorbis.c | 9 +++++++-- libavcodec/pcm.c | 7 ++++++- libavcodec/rv10.c | 6 +++--- libavcodec/svq1.c | 6 +++--- libavcodec/utils.c | 16 ++++++++-------- libavformat/asf.c | 2 +- libavformat/avienc.c | 2 +- libavformat/ffm.c | 2 +- libavformat/rm.c | 4 ++-- libavformat/utils.c | 2 +- 23 files changed, 120 insertions(+), 98 deletions(-) diff --git a/ffmpeg.c b/ffmpeg.c index 4c0b01a6a2..e52e3783bb 100644 --- a/ffmpeg.c +++ b/ffmpeg.c @@ -629,9 +629,9 @@ static void do_video_out(AVFormatContext *s, /* XXX: pb because no interleaving */ for(i=0;icodec_id != CODEC_ID_RAWVIDEO) { - AVVideoFrame big_picture; + AVFrame big_picture; - memset(&big_picture, 0, sizeof(AVVideoFrame)); + memset(&big_picture, 0, sizeof(AVFrame)); *(AVPicture*)&big_picture= *final_picture; /* handles sameq here. This is not correct because it may @@ -709,9 +709,9 @@ static void do_video_stats(AVFormatContext *os, AVOutputStream *ost, total_size += frame_size; if (enc->codec_type == CODEC_TYPE_VIDEO) { frame_number = ost->frame_number; - fprintf(fvstats, "frame= %5d q= %2.1f ", frame_number, enc->coded_picture->quality); + fprintf(fvstats, "frame= %5d q= %2.1f ", frame_number, enc->coded_frame->quality); if (enc->flags&CODEC_FLAG_PSNR) - fprintf(fvstats, "PSNR= %6.2f ", psnr(enc->coded_picture->error[0]/(enc->width*enc->height*255.0*255.0))); + fprintf(fvstats, "PSNR= %6.2f ", psnr(enc->coded_frame->error[0]/(enc->width*enc->height*255.0*255.0))); fprintf(fvstats,"f_size= %6d ", frame_size); /* compute pts value */ @@ -723,7 +723,7 @@ static void do_video_stats(AVFormatContext *os, AVOutputStream *ost, avg_bitrate = (double)(total_size * 8) / ti1 / 1000.0; fprintf(fvstats, "s_size= %8.0fkB time= %0.3f br= %7.1fkbits/s avg_br= %7.1fkbits/s ", (double)total_size / 1024, ti1, bitrate, avg_bitrate); - fprintf(fvstats,"type= %s\n", enc->coded_picture->key_frame == 1 ? "I" : "P"); + fprintf(fvstats,"type= %s\n", enc->coded_frame->key_frame == 1 ? "I" : "P"); } } @@ -767,14 +767,14 @@ void print_report(AVFormatContext **output_files, enc = &ost->st->codec; if (vid && enc->codec_type == CODEC_TYPE_VIDEO) { sprintf(buf + strlen(buf), "q=%2.1f ", - enc->coded_picture->quality); + enc->coded_frame->quality); } if (!vid && enc->codec_type == CODEC_TYPE_VIDEO) { frame_number = ost->frame_number; sprintf(buf + strlen(buf), "frame=%5d q=%2.1f ", - frame_number, enc->coded_picture ? enc->coded_picture->quality : 0); + frame_number, enc->coded_frame ? enc->coded_frame->quality : 0); if (enc->flags&CODEC_FLAG_PSNR) - sprintf(buf + strlen(buf), "PSNR= %6.2f ", psnr(enc->coded_picture->error[0]/(enc->width*enc->height*255.0*255.0))); + sprintf(buf + strlen(buf), "PSNR= %6.2f ", psnr(enc->coded_frame->error[0]/(enc->width*enc->height*255.0*255.0))); vid = 1; } /* compute min output value */ @@ -1287,7 +1287,7 @@ static int av_encode(AVFormatContext **output_files, ist->st->codec.height); ret = len; } else { - AVVideoFrame big_picture; + AVFrame big_picture; data_size = (ist->st->codec.width * ist->st->codec.height * 3) / 2; ret = avcodec_decode_video(&ist->st->codec, diff --git a/ffserver.c b/ffserver.c index daa5c9de57..8e66672d23 100644 --- a/ffserver.c +++ b/ffserver.c @@ -1955,7 +1955,7 @@ int av_read_frame(AVFormatContext *s, AVPacket *pkt) /* we use the codec indication because it is more accurate than the demux flags */ pkt->flags = 0; - if (st->codec.coded_picture->key_frame) + if (st->codec.coded_frame->key_frame) pkt->flags |= PKT_FLAG_KEY; return 0; } @@ -2211,7 +2211,7 @@ static int http_prepare_data(HTTPContext *c) codec = &ctx->streams[pkt.stream_index]->codec; } - codec->key_frame = ((pkt.flags & PKT_FLAG_KEY) != 0); + codec->coded_frame->key_frame = ((pkt.flags & PKT_FLAG_KEY) != 0); #ifdef PJSG if (codec->codec_type == CODEC_TYPE_AUDIO) { diff --git a/libavcodec/ac3enc.c b/libavcodec/ac3enc.c index fbd68210ad..641e919a6b 100644 --- a/libavcodec/ac3enc.c +++ b/libavcodec/ac3enc.c @@ -826,7 +826,6 @@ static int AC3_encode_init(AVCodecContext *avctx) }; avctx->frame_size = AC3_FRAME_SIZE; - avctx->key_frame = 1; /* always key frame */ /* number of channels */ if (channels < 1 || channels > 6) @@ -890,6 +889,9 @@ static int AC3_encode_init(AVCodecContext *avctx) } ac3_crc_init(); + + avctx->coded_frame= avcodec_alloc_frame(); + avctx->coded_frame->key_frame= 1; return 0; } @@ -1447,6 +1449,11 @@ static int AC3_encode_frame(AVCodecContext *avctx, return output_frame_end(s); } +static int AC3_encode_close(AVCodecContext *avctx) +{ + av_freep(&avctx->coded_frame); +} + #if 0 /*************************************************************************/ /* TEST */ @@ -1546,5 +1553,6 @@ AVCodec ac3_encoder = { sizeof(AC3EncodeContext), AC3_encode_init, AC3_encode_frame, + AC3_encode_close, NULL, }; diff --git a/libavcodec/adpcm.c b/libavcodec/adpcm.c index 543e364abc..e31c682339 100644 --- a/libavcodec/adpcm.c +++ b/libavcodec/adpcm.c @@ -126,12 +126,17 @@ static int adpcm_encode_init(AVCodecContext *avctx) return -1; break; } + + avctx->coded_frame= avcodec_alloc_frame(); + avctx->coded_frame->key_frame= 1; + return 0; } static int adpcm_encode_close(AVCodecContext *avctx) { - /* nothing to free */ + av_freep(&avctx->coded_frame); + return 0; } @@ -253,7 +258,6 @@ static int adpcm_encode_frame(AVCodecContext *avctx, default: return -1; } - avctx->key_frame = 1; return dst - frame; } diff --git a/libavcodec/apiexample.c b/libavcodec/apiexample.c index b97b09fb87..0f730d4f54 100644 --- a/libavcodec/apiexample.c +++ b/libavcodec/apiexample.c @@ -164,7 +164,7 @@ void video_encode_example(const char *filename) AVCodecContext *c= NULL; int i, out_size, size, x, y, outbuf_size; FILE *f; - AVVideoFrame *picture; + AVFrame *picture; UINT8 *outbuf, *picture_buf; printf("Video encoding\n"); @@ -177,7 +177,7 @@ void video_encode_example(const char *filename) } c= avcodec_alloc_context(); - picture= avcodec_alloc_picture(); + picture= avcodec_alloc_frame(); /* put sample parameters */ c->bit_rate = 400000; @@ -278,7 +278,7 @@ void video_decode_example(const char *outfilename, const char *filename) AVCodecContext *c= NULL; int frame, size, got_picture, len; FILE *f; - AVVideoFrame *picture; + AVFrame *picture; UINT8 inbuf[INBUF_SIZE], *inbuf_ptr; char buf[1024]; @@ -292,7 +292,7 @@ void video_decode_example(const char *outfilename, const char *filename) } c= avcodec_alloc_context(); - picture= avcodec_alloc_picture(); + picture= avcodec_alloc_frame(); if(codec->capabilities&CODEC_CAP_TRUNCATED) c->flags|= CODEC_FLAG_TRUNCATED; /* we dont send complete frames */ diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index d02c3e7211..1cad8c2eae 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -5,8 +5,8 @@ #define LIBAVCODEC_VERSION_INT 0x000406 #define LIBAVCODEC_VERSION "0.4.6" -#define LIBAVCODEC_BUILD 4644 -#define LIBAVCODEC_BUILD_STR "4644" +#define LIBAVCODEC_BUILD 4645 +#define LIBAVCODEC_BUILD_STR "4645" enum CodecID { CODEC_ID_NONE, @@ -159,7 +159,7 @@ static const int Motion_Est_QTab[] = { ME_ZERO, ME_PHODS, ME_LOG, #define FRAME_RATE_BASE 10000 -#define FF_COMMON_PICTURE \ +#define FF_COMMON_FRAME \ uint8_t *data[4];\ int linesize[4];\ /**\ @@ -279,9 +279,9 @@ static const int Motion_Est_QTab[] = { ME_ZERO, ME_PHODS, ME_LOG, #define FF_B_TYPE 3 // Bi-dir predicted #define FF_S_TYPE 4 // S(GMC)-VOP MPEG4 -typedef struct AVVideoFrame { - FF_COMMON_PICTURE -} AVVideoFrame; +typedef struct AVFrame { + FF_COMMON_FRAME +} AVFrame; typedef struct AVCodecContext { /** @@ -395,13 +395,6 @@ typedef struct AVCodecContext { int real_pict_num; /* returns the real picture number of previous encoded frame */ - /** - * 1 -> keyframe, 0-> not (this if for audio only, for video, AVVideoFrame.key_frame should be used) - * encoding: set by lavc (for the outputed bitstream, not the input frame) - * decoding: set by lavc (for the decoded bitstream, not the displayed frame) - */ - int key_frame; - /** * number of frames the decoded output will be delayed relative to * the encoded input @@ -574,7 +567,7 @@ typedef struct AVCodecContext { * encoding: unused * decoding: set by lavc, user can override */ - int (*get_buffer)(struct AVCodecContext *c, AVVideoFrame *pic); + int (*get_buffer)(struct AVCodecContext *c, AVFrame *pic); /** * called to release buffers which where allocated with get_buffer. @@ -583,7 +576,7 @@ typedef struct AVCodecContext { * encoding: unused * decoding: set by lavc, user can override */ - void (*release_buffer)(struct AVCodecContext *c, AVVideoFrame *pic); + void (*release_buffer)(struct AVCodecContext *c, AVFrame *pic); /** * is 1 if the decoded stream contains b frames, 0 otherwise @@ -820,7 +813,7 @@ typedef struct AVCodecContext { * encoding: set by lavc * decoding: set by lavc */ - AVVideoFrame *coded_picture; + AVFrame *coded_frame; /** * debug @@ -1001,16 +994,16 @@ void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode); void avcodec_get_context_defaults(AVCodecContext *s); AVCodecContext *avcodec_alloc_context(void); -AVVideoFrame *avcodec_alloc_picture(void); +AVFrame *avcodec_alloc_frame(void); -int avcodec_default_get_buffer(AVCodecContext *s, AVVideoFrame *pic); -void avcodec_default_release_buffer(AVCodecContext *s, AVVideoFrame *pic); +int avcodec_default_get_buffer(AVCodecContext *s, AVFrame *pic); +void avcodec_default_release_buffer(AVCodecContext *s, AVFrame *pic); int avcodec_open(AVCodecContext *avctx, AVCodec *codec); int avcodec_decode_audio(AVCodecContext *avctx, INT16 *samples, int *frame_size_ptr, UINT8 *buf, int buf_size); -int avcodec_decode_video(AVCodecContext *avctx, AVVideoFrame *picture, +int avcodec_decode_video(AVCodecContext *avctx, AVFrame *picture, int *got_picture_ptr, UINT8 *buf, int buf_size); int avcodec_parse_frame(AVCodecContext *avctx, UINT8 **pdata, @@ -1019,7 +1012,7 @@ int avcodec_parse_frame(AVCodecContext *avctx, UINT8 **pdata, int avcodec_encode_audio(AVCodecContext *avctx, UINT8 *buf, int buf_size, const short *samples); int avcodec_encode_video(AVCodecContext *avctx, UINT8 *buf, int buf_size, - const AVVideoFrame *pict); + const AVFrame *pict); int avcodec_close(AVCodecContext *avctx); diff --git a/libavcodec/dv.c b/libavcodec/dv.c index 05128aee45..fe0e5ec5d2 100644 --- a/libavcodec/dv.c +++ b/libavcodec/dv.c @@ -33,7 +33,7 @@ typedef struct DVVideoDecodeContext { int sampling_411; /* 0 = 420, 1 = 411 */ int width, height; UINT8 *current_picture[3]; /* picture structure */ - AVVideoFrame picture; + AVFrame picture; int linesize[3]; DCTELEM block[5*6][64] __align8; UINT8 dv_zigzag[2][64]; @@ -595,8 +595,8 @@ static int dvvideo_decode_frame(AVCodecContext *avctx, emms_c(); /* return image */ - *data_size = sizeof(AVVideoFrame); - *(AVVideoFrame*)data= s->picture; + *data_size = sizeof(AVFrame); + *(AVFrame*)data= s->picture; avctx->release_buffer(avctx, &s->picture); diff --git a/libavcodec/h263dec.c b/libavcodec/h263dec.c index cf90a95714..60e0f5989b 100644 --- a/libavcodec/h263dec.c +++ b/libavcodec/h263dec.c @@ -349,7 +349,7 @@ static int h263_decode_frame(AVCodecContext *avctx, { MpegEncContext *s = avctx->priv_data; int ret,i; - AVVideoFrame *pict = data; + AVFrame *pict = data; float new_aspect; #ifdef PRINT_FRAME_TIME @@ -676,9 +676,9 @@ retry: } #endif if(s->pict_type==B_TYPE || s->low_delay){ - *pict= *(AVVideoFrame*)&s->current_picture; + *pict= *(AVFrame*)&s->current_picture; } else { - *pict= *(AVVideoFrame*)&s->last_picture; + *pict= *(AVFrame*)&s->last_picture; } /* Return the Picture timestamp as the frame number */ @@ -687,7 +687,7 @@ retry: /* dont output the last pic after seeking */ if(s->last_picture.data[0] || s->low_delay) - *data_size = sizeof(AVVideoFrame); + *data_size = sizeof(AVFrame); #ifdef PRINT_FRAME_TIME printf("%Ld\n", rdtsc()-time); #endif diff --git a/libavcodec/huffyuv.c b/libavcodec/huffyuv.c index 13627b51e7..0eb701037d 100644 --- a/libavcodec/huffyuv.c +++ b/libavcodec/huffyuv.c @@ -57,7 +57,7 @@ typedef struct HYuvContext{ uint8_t len[3][256]; uint32_t bits[3][256]; VLC vlc[3]; - AVVideoFrame picture; + AVFrame picture; uint8_t __align8 bitstream_buffer[1024*1024*3]; //FIXME dynamic alloc or some other solution DSPContext dsp; }HYuvContext; @@ -332,7 +332,7 @@ static int decode_init(AVCodecContext *avctx) width= s->width= avctx->width; height= s->height= avctx->height; - avctx->coded_picture= &s->picture; + avctx->coded_frame= &s->picture; s->bgr32=1; assert(width && height); @@ -460,7 +460,7 @@ static int encode_init(AVCodecContext *avctx) avctx->stats_out= av_mallocz(1024*10); s->version=2; - avctx->coded_picture= &s->picture; + avctx->coded_frame= &s->picture; s->picture.pict_type= FF_I_TYPE; s->picture.key_frame= 1; @@ -670,9 +670,9 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *data_size, uint8 const int width2= s->width>>1; const int height= s->height; int fake_ystride, fake_ustride, fake_vstride; - AVVideoFrame * const p= &s->picture; + AVFrame * const p= &s->picture; - AVVideoFrame *picture = data; + AVFrame *picture = data; *data_size = 0; @@ -893,7 +893,7 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *data_size, uint8 avctx->release_buffer(avctx, p); - *data_size = sizeof(AVVideoFrame); + *data_size = sizeof(AVFrame); return (get_bits_count(&s->gb)+7)>>3; } @@ -920,14 +920,14 @@ static int decode_end(AVCodecContext *avctx) static int encode_frame(AVCodecContext *avctx, unsigned char *buf, int buf_size, void *data){ HYuvContext *s = avctx->priv_data; - AVVideoFrame *pict = data; + AVFrame *pict = data; const int width= s->width; const int width2= s->width>>1; const int height= s->height; const int fake_ystride= s->interlaced ? pict->linesize[0]*2 : pict->linesize[0]; const int fake_ustride= s->interlaced ? pict->linesize[1]*2 : pict->linesize[1]; const int fake_vstride= s->interlaced ? pict->linesize[2]*2 : pict->linesize[2]; - AVVideoFrame * const p= &s->picture; + AVFrame * const p= &s->picture; int i, size; init_put_bits(&s->pb, buf, buf_size, NULL, NULL); diff --git a/libavcodec/mpeg12.c b/libavcodec/mpeg12.c index 22c701340c..36cf98319f 100644 --- a/libavcodec/mpeg12.c +++ b/libavcodec/mpeg12.c @@ -1595,7 +1595,7 @@ static void mpeg_decode_extension(AVCodecContext *avctx, * DECODE_SLICE_EOP if the end of the picture is reached */ static int mpeg_decode_slice(AVCodecContext *avctx, - AVVideoFrame *pict, + AVFrame *pict, int start_code, UINT8 *buf, int buf_size) { @@ -1703,7 +1703,7 @@ eos: //end of slice MPV_frame_end(s); if (s->pict_type == B_TYPE || s->low_delay) { - *pict= *(AVVideoFrame*)&s->current_picture; + *pict= *(AVFrame*)&s->current_picture; } else { s->picture_number++; /* latency of 1 frame for I and P frames */ @@ -1711,7 +1711,7 @@ eos: //end of slice if (s->picture_number == 1) { return DECODE_SLICE_OK; } else { - *pict= *(AVVideoFrame*)&s->last_picture; + *pict= *(AVFrame*)&s->last_picture; } } return DECODE_SLICE_EOP; @@ -1839,7 +1839,7 @@ static int mpeg_decode_frame(AVCodecContext *avctx, Mpeg1Context *s = avctx->priv_data; UINT8 *buf_end, *buf_ptr, *buf_start; int len, start_code_found, ret, code, start_code, input_size; - AVVideoFrame *picture = data; + AVFrame *picture = data; MpegEncContext *s2 = &s->mpeg_enc_ctx; dprintf("fill_buffer\n"); @@ -1849,9 +1849,9 @@ static int mpeg_decode_frame(AVCodecContext *avctx, /* special case for last picture */ if (buf_size == 0) { if (s2->picture_number > 0) { - *picture= *(AVVideoFrame*)&s2->next_picture; + *picture= *(AVFrame*)&s2->next_picture; - *data_size = sizeof(AVVideoFrame); + *data_size = sizeof(AVFrame); } return 0; } diff --git a/libavcodec/mpegaudio.c b/libavcodec/mpegaudio.c index c6ebde1ec6..7d2dd8df19 100644 --- a/libavcodec/mpegaudio.c +++ b/libavcodec/mpegaudio.c @@ -70,7 +70,6 @@ int MPA_encode_init(AVCodecContext *avctx) s->freq = freq; s->bit_rate = bitrate * 1000; avctx->frame_size = MPA_FRAME_SIZE; - avctx->key_frame = 1; /* always key frame */ /* encoding freq */ s->lsf = 0; @@ -169,6 +168,9 @@ int MPA_encode_init(AVCodecContext *avctx) total_quant_bits[i] = 12 * v; } + avctx->coded_frame= avcodec_alloc_frame(); + avctx->coded_frame->key_frame= 1; + return 0; } @@ -765,6 +767,10 @@ int MPA_encode_frame(AVCodecContext *avctx, return pbBufPtr(&s->pb) - s->pb.buf; } +static int MPA_encode_close(AVCodecContext *avctx) +{ + av_freep(&avctx->coded_frame); +} AVCodec mp2_encoder = { "mp2", @@ -773,6 +779,7 @@ AVCodec mp2_encoder = { sizeof(MpegAudioContext), MPA_encode_init, MPA_encode_frame, + MPA_encode_close, NULL, }; diff --git a/libavcodec/mpegvideo.c b/libavcodec/mpegvideo.c index f947634c2c..87eb882ea1 100644 --- a/libavcodec/mpegvideo.c +++ b/libavcodec/mpegvideo.c @@ -282,7 +282,7 @@ static int alloc_picture(MpegEncContext *s, Picture *pic, int shared){ assert(!pic->data[0]); - r= s->avctx->get_buffer(s->avctx, (AVVideoFrame*)pic); + r= s->avctx->get_buffer(s->avctx, (AVFrame*)pic); if(r<0 || !pic->age || !pic->type || !pic->data[0]){ fprintf(stderr, "get_buffer() failed (%d %d %d %X)\n", r, pic->age, pic->type, (int)pic->data[0]); @@ -327,7 +327,7 @@ static void free_picture(MpegEncContext *s, Picture *pic){ int i; if(pic->data[0] && pic->type!=FF_BUFFER_TYPE_SHARED){ - s->avctx->release_buffer(s->avctx, (AVVideoFrame*)pic); + s->avctx->release_buffer(s->avctx, (AVFrame*)pic); } av_freep(&pic->mb_var); @@ -383,7 +383,7 @@ int MPV_common_init(MpegEncContext *s) CHECKED_ALLOCZ(s->edge_emu_buffer, (s->width+64)*2*17*2); //(width + edge + align)*interlaced*MBsize*tolerance - s->avctx->coded_picture= (AVVideoFrame*)&s->current_picture; + s->avctx->coded_frame= (AVFrame*)&s->current_picture; if (s->encoding) { int mv_table_size= (s->mb_width+2)*(s->mb_height+2); @@ -843,7 +843,7 @@ static int find_unused_picture(MpegEncContext *s, int shared){ int MPV_frame_start(MpegEncContext *s, AVCodecContext *avctx) { int i; - AVVideoFrame *pic; + AVFrame *pic; s->mb_skiped = 0; @@ -853,7 +853,7 @@ int MPV_frame_start(MpegEncContext *s, AVCodecContext *avctx) //printf("%8X %d %d %X %X\n", s->picture[i].data[0], s->picture[i].type, i, s->next_picture.data[0], s->last_picture.data[0]); if(s->picture[i].data[0] == s->last_picture.data[0]){ // s->picture[i].reference=0; - avctx->release_buffer(avctx, (AVVideoFrame*)&s->picture[i]); + avctx->release_buffer(avctx, (AVFrame*)&s->picture[i]); break; } } @@ -865,7 +865,7 @@ int MPV_frame_start(MpegEncContext *s, AVCodecContext *avctx) for(i=0; ipicture[i].data[0] && s->picture[i].data[0] != s->next_picture.data[0] && s->picture[i].reference){ fprintf(stderr, "releasing zombie picture\n"); - avctx->release_buffer(avctx, (AVVideoFrame*)&s->picture[i]); + avctx->release_buffer(avctx, (AVFrame*)&s->picture[i]); } } } @@ -874,7 +874,7 @@ alloc: if(!s->encoding){ i= find_unused_picture(s, 0); - pic= (AVVideoFrame*)&s->picture[i]; + pic= (AVFrame*)&s->picture[i]; pic->reference= s->pict_type != B_TYPE; pic->coded_picture_number= s->current_picture.coded_picture_number+1; @@ -946,7 +946,7 @@ void MPV_frame_end(MpegEncContext *s) /* release non refernce frames */ for(i=0; ipicture[i].data[0] && !s->picture[i].reference /*&& s->picture[i].type!=FF_BUFFER_TYPE_SHARED*/) - s->avctx->release_buffer(s->avctx, (AVVideoFrame*)&s->picture[i]); + s->avctx->release_buffer(s->avctx, (AVFrame*)&s->picture[i]); } } @@ -984,8 +984,8 @@ static int get_intra_count(MpegEncContext *s, uint8_t *src, uint8_t *ref, int st } -static int load_input_picture(MpegEncContext *s, AVVideoFrame *pic_arg){ - AVVideoFrame *pic; +static int load_input_picture(MpegEncContext *s, AVFrame *pic_arg){ + AVFrame *pic; int i; const int encoding_delay= s->max_b_frames; int direct=1; @@ -1000,7 +1000,7 @@ static int load_input_picture(MpegEncContext *s, AVVideoFrame *pic_arg){ if(direct){ i= find_unused_picture(s, 1); - pic= (AVVideoFrame*)&s->picture[i]; + pic= (AVFrame*)&s->picture[i]; pic->reference= 1; for(i=0; i<4; i++){ @@ -1011,7 +1011,7 @@ static int load_input_picture(MpegEncContext *s, AVVideoFrame *pic_arg){ }else{ i= find_unused_picture(s, 0); - pic= (AVVideoFrame*)&s->picture[i]; + pic= (AVFrame*)&s->picture[i]; pic->reference= 1; alloc_picture(s, (Picture*)pic, 0); @@ -1194,7 +1194,7 @@ int MPV_encode_picture(AVCodecContext *avctx, unsigned char *buf, int buf_size, void *data) { MpegEncContext *s = avctx->priv_data; - AVVideoFrame *pic_arg = data; + AVFrame *pic_arg = data; int i; init_put_bits(&s->pb, buf, buf_size, NULL, NULL); diff --git a/libavcodec/mpegvideo.h b/libavcodec/mpegvideo.h index fe5abff083..41e92835d9 100644 --- a/libavcodec/mpegvideo.h +++ b/libavcodec/mpegvideo.h @@ -110,7 +110,7 @@ typedef struct ScanTable{ } ScanTable; typedef struct Picture{ - FF_COMMON_PICTURE + FF_COMMON_FRAME int mb_var_sum; /* sum of MB variance for current frame */ int mc_mb_var_sum; /* motion compensated MB variance for current frame */ diff --git a/libavcodec/oggvorbis.c b/libavcodec/oggvorbis.c index 1d046a3bb2..e327e2fd3e 100644 --- a/libavcodec/oggvorbis.c +++ b/libavcodec/oggvorbis.c @@ -24,9 +24,9 @@ typedef struct OggVorbisContext { int oggvorbis_init_encoder(vorbis_info *vi, AVCodecContext *avccontext) { - if(avccontext->quality) /* VBR requested */ + if(avccontext->coded_frame->quality) /* VBR requested */ return vorbis_encode_init_vbr(vi, avccontext->channels, - avccontext->sample_rate, (float)avccontext->quality / 1000) ; + avccontext->sample_rate, (float)avccontext->coded_frame->quality / 1000) ; return vorbis_encode_init(vi, avccontext->channels, avccontext->sample_rate, -1, avccontext->bit_rate, -1) ; @@ -45,6 +45,9 @@ static int oggvorbis_encode_init(AVCodecContext *avccontext) { vorbis_block_init(&context->vd, &context->vb) ; avccontext->frame_size = OGGVORBIS_FRAME_SIZE ; + + avccontext->coded_frame= avcodec_alloc_frame(); + avccontext->coded_frame->key_frame= 1; return 0 ; } @@ -113,6 +116,8 @@ static int oggvorbis_encode_close(AVCodecContext *avccontext) { vorbis_block_clear(&context->vb); vorbis_dsp_clear(&context->vd); vorbis_info_clear(&context->vi); + + av_freep(&avccontext->coded_frame); return 0 ; } diff --git a/libavcodec/pcm.c b/libavcodec/pcm.c index 245afdea4e..811264b550 100644 --- a/libavcodec/pcm.c +++ b/libavcodec/pcm.c @@ -128,11 +128,17 @@ static int pcm_encode_init(AVCodecContext *avctx) default: break; } + + avctx->coded_frame= avcodec_alloc_frame(); + avctx->coded_frame->key_frame= 1; + return 0; } static int pcm_encode_close(AVCodecContext *avctx) { + av_freep(&avctx->coded_frame); + switch(avctx->codec->id) { case CODEC_ID_PCM_ALAW: if (--linear_to_alaw_ref == 0) @@ -237,7 +243,6 @@ static int pcm_encode_frame(AVCodecContext *avctx, default: return -1; } - avctx->key_frame = 1; //avctx->frame_size = (dst - frame) / (sample_size * avctx->channels); return dst - frame; diff --git a/libavcodec/rv10.c b/libavcodec/rv10.c index 8039cdb1ec..4907c23478 100644 --- a/libavcodec/rv10.c +++ b/libavcodec/rv10.c @@ -472,7 +472,7 @@ static int rv10_decode_frame(AVCodecContext *avctx, { MpegEncContext *s = avctx->priv_data; int i; - AVVideoFrame *pict = data; + AVFrame *pict = data; #ifdef DEBUG printf("*****frame %d size=%d\n", avctx->frame_number, buf_size); @@ -505,9 +505,9 @@ static int rv10_decode_frame(AVCodecContext *avctx, if(s->mb_y>=s->mb_height){ MPV_frame_end(s); - *pict= *(AVVideoFrame*)&s->current_picture; + *pict= *(AVFrame*)&s->current_picture; - *data_size = sizeof(AVVideoFrame); + *data_size = sizeof(AVFrame); }else{ *data_size = 0; } diff --git a/libavcodec/svq1.c b/libavcodec/svq1.c index 929dece2ae..77035f1f9a 100644 --- a/libavcodec/svq1.c +++ b/libavcodec/svq1.c @@ -1063,7 +1063,7 @@ static int svq1_decode_frame(AVCodecContext *avctx, MpegEncContext *s=avctx->priv_data; uint8_t *current, *previous; int result, i, x, y, width, height; - AVVideoFrame *pict = data; + AVFrame *pict = data; /* initialize bit buffer */ init_get_bits(&s->gb,buf,buf_size); @@ -1161,12 +1161,12 @@ static int svq1_decode_frame(AVCodecContext *avctx, } } - *pict = *(AVVideoFrame*)&s->current_picture; + *pict = *(AVFrame*)&s->current_picture; MPV_frame_end(s); - *data_size=sizeof(AVVideoFrame); + *data_size=sizeof(AVFrame); return buf_size; } diff --git a/libavcodec/utils.c b/libavcodec/utils.c index 768e8b6546..5733bdf2a3 100644 --- a/libavcodec/utils.c +++ b/libavcodec/utils.c @@ -120,7 +120,7 @@ typedef struct DefaultPicOpaque{ uint8_t *data[4]; }DefaultPicOpaque; -int avcodec_default_get_buffer(AVCodecContext *s, AVVideoFrame *pic){ +int avcodec_default_get_buffer(AVCodecContext *s, AVFrame *pic){ int i; const int width = s->width; const int height= s->height; @@ -202,7 +202,7 @@ int avcodec_default_get_buffer(AVCodecContext *s, AVVideoFrame *pic){ return 0; } -void avcodec_default_release_buffer(AVCodecContext *s, AVVideoFrame *pic){ +void avcodec_default_release_buffer(AVCodecContext *s, AVFrame *pic){ int i; assert(pic->type==FF_BUFFER_TYPE_INTERNAL); @@ -249,11 +249,11 @@ AVCodecContext *avcodec_alloc_context(void){ } /** - * allocates a AVPicture and set it to defaults. + * allocates a AVPFrame and set it to defaults. * this can be deallocated by simply calling free() */ -AVVideoFrame *avcodec_alloc_picture(void){ - AVVideoFrame *pic= av_mallocz(sizeof(AVVideoFrame)); +AVFrame *avcodec_alloc_frame(void){ + AVFrame *pic= av_mallocz(sizeof(AVFrame)); return pic; } @@ -290,7 +290,7 @@ int avcodec_encode_audio(AVCodecContext *avctx, UINT8 *buf, int buf_size, } int avcodec_encode_video(AVCodecContext *avctx, UINT8 *buf, int buf_size, - const AVVideoFrame *pict) + const AVFrame *pict) { int ret; @@ -305,7 +305,7 @@ int avcodec_encode_video(AVCodecContext *avctx, UINT8 *buf, int buf_size, /* decode a frame. return -1 if error, otherwise return the number of bytes used. If no frame could be decompressed, *got_picture_ptr is zero. Otherwise, it is non zero */ -int avcodec_decode_video(AVCodecContext *avctx, AVVideoFrame *picture, +int avcodec_decode_video(AVCodecContext *avctx, AVFrame *picture, int *got_picture_ptr, UINT8 *buf, int buf_size) { @@ -672,7 +672,7 @@ void avcodec_flush_buffers(AVCodecContext *avctx) for(i=0; ipicture[i].data[0] && ( s->picture[i].type == FF_BUFFER_TYPE_INTERNAL || s->picture[i].type == FF_BUFFER_TYPE_USER)) - avctx->release_buffer(avctx, (AVVideoFrame*)&s->picture[i]); + avctx->release_buffer(avctx, (AVFrame*)&s->picture[i]); } break; default: diff --git a/libavformat/asf.c b/libavformat/asf.c index 3635913713..9c327133b2 100644 --- a/libavformat/asf.c +++ b/libavformat/asf.c @@ -556,7 +556,7 @@ static void put_frame_header(AVFormatContext *s, ASFStream *stream, int timestam int val; val = stream->num; - if (s->streams[val - 1]->codec.coded_picture->key_frame /* && frag_offset == 0 */) + if (s->streams[val - 1]->codec.coded_frame->key_frame /* && frag_offset == 0 */) val |= 0x80; put_byte(pb, val); put_byte(pb, stream->seq); diff --git a/libavformat/avienc.c b/libavformat/avienc.c index a9bf3a8d92..f14b1cb274 100644 --- a/libavformat/avienc.c +++ b/libavformat/avienc.c @@ -320,7 +320,7 @@ static int avi_write_packet(AVFormatContext *s, int stream_index, if (enc->codec_type == CODEC_TYPE_VIDEO) { tag[2] = 'd'; tag[3] = 'c'; - flags = enc->coded_picture->key_frame ? 0x10 : 0x00; + flags = enc->coded_frame->key_frame ? 0x10 : 0x00; } else { tag[2] = 'w'; tag[3] = 'b'; diff --git a/libavformat/ffm.c b/libavformat/ffm.c index 2f247e422e..3df2d5e736 100644 --- a/libavformat/ffm.c +++ b/libavformat/ffm.c @@ -232,7 +232,7 @@ static int ffm_write_packet(AVFormatContext *s, int stream_index, /* packet size & key_frame */ header[0] = stream_index; header[1] = 0; - if (st->codec.coded_picture && st->codec.coded_picture->key_frame) + if (st->codec.coded_frame->key_frame) //if st->codec.coded_frame==NULL then there is a bug somewhere else header[1] |= FLAG_KEY_FRAME; header[2] = (size >> 16) & 0xff; header[3] = (size >> 8) & 0xff; diff --git a/libavformat/rm.c b/libavformat/rm.c index 44e384559d..72bd6978c1 100644 --- a/libavformat/rm.c +++ b/libavformat/rm.c @@ -333,7 +333,7 @@ static int rm_write_audio(AVFormatContext *s, UINT8 *buf, int size) /* XXX: suppress this malloc */ buf1= (UINT8*) av_malloc( size * sizeof(UINT8) ); - write_packet_header(s, stream, size, stream->enc->key_frame); + write_packet_header(s, stream, size, stream->enc->coded_frame->key_frame); /* for AC3, the words seems to be reversed */ for(i=0;ipriv_data; ByteIOContext *pb = &s->pb; StreamInfo *stream = rm->video_stream; - int key_frame = stream->enc->coded_picture->key_frame; + int key_frame = stream->enc->coded_frame->key_frame; /* XXX: this is incorrect: should be a parameter */ diff --git a/libavformat/utils.c b/libavformat/utils.c index 3388ddc9ef..239b14eb55 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -458,7 +458,7 @@ int av_find_stream_info(AVFormatContext *ic) AVCodec *codec; AVStream *st; AVPacket *pkt; - AVVideoFrame picture; + AVFrame picture; AVPacketList *pktl=NULL, **ppktl; short samples[AVCODEC_MAX_AUDIO_FRAME_SIZE / 2]; UINT8 *ptr;