Use the new avcodec_decode_* API.

Patch by Thilo Borgmann thilo.borgmann * googlemail ! com.

Originally committed as revision 18414 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
Thilo Borgmann 2009-04-10 12:07:06 +00:00 committed by Stefano Sabatini
parent 222ab26c62
commit bea183757b

View File

@ -135,9 +135,8 @@ typedef struct VideoState {
uint8_t *audio_buf; uint8_t *audio_buf;
unsigned int audio_buf_size; /* in bytes */ unsigned int audio_buf_size; /* in bytes */
int audio_buf_index; /* in bytes */ int audio_buf_index; /* in bytes */
AVPacket audio_pkt_temp;
AVPacket audio_pkt; AVPacket audio_pkt;
uint8_t *audio_pkt_data;
int audio_pkt_size;
enum SampleFormat audio_src_fmt; enum SampleFormat audio_src_fmt;
AVAudioConvert *reformat_ctx; AVAudioConvert *reformat_ctx;
@ -1372,9 +1371,9 @@ static int video_thread(void *arg)
/* NOTE: ipts is the PTS of the _first_ picture beginning in /* NOTE: ipts is the PTS of the _first_ picture beginning in
this packet, if any */ this packet, if any */
is->video_st->codec->reordered_opaque= pkt->pts; is->video_st->codec->reordered_opaque= pkt->pts;
len1 = avcodec_decode_video(is->video_st->codec, len1 = avcodec_decode_video2(is->video_st->codec,
frame, &got_picture, frame, &got_picture,
pkt->data, pkt->size); pkt);
if( (decoder_reorder_pts || pkt->dts == AV_NOPTS_VALUE) if( (decoder_reorder_pts || pkt->dts == AV_NOPTS_VALUE)
&& frame->reordered_opaque != AV_NOPTS_VALUE) && frame->reordered_opaque != AV_NOPTS_VALUE)
@ -1440,9 +1439,9 @@ static int subtitle_thread(void *arg)
if (pkt->pts != AV_NOPTS_VALUE) if (pkt->pts != AV_NOPTS_VALUE)
pts = av_q2d(is->subtitle_st->time_base)*pkt->pts; pts = av_q2d(is->subtitle_st->time_base)*pkt->pts;
len1 = avcodec_decode_subtitle(is->subtitle_st->codec, len1 = avcodec_decode_subtitle2(is->subtitle_st->codec,
&sp->sub, &got_subtitle, &sp->sub, &got_subtitle,
pkt->data, pkt->size); pkt);
// if (len1 < 0) // if (len1 < 0)
// break; // break;
if (got_subtitle && sp->sub.format == 0) { if (got_subtitle && sp->sub.format == 0) {
@ -1577,6 +1576,7 @@ static int synchronize_audio(VideoState *is, short *samples,
/* decode one audio frame and returns its uncompressed size */ /* decode one audio frame and returns its uncompressed size */
static int audio_decode_frame(VideoState *is, double *pts_ptr) static int audio_decode_frame(VideoState *is, double *pts_ptr)
{ {
AVPacket *pkt_temp = &is->audio_pkt_temp;
AVPacket *pkt = &is->audio_pkt; AVPacket *pkt = &is->audio_pkt;
AVCodecContext *dec= is->audio_st->codec; AVCodecContext *dec= is->audio_st->codec;
int n, len1, data_size; int n, len1, data_size;
@ -1584,19 +1584,19 @@ static int audio_decode_frame(VideoState *is, double *pts_ptr)
for(;;) { for(;;) {
/* NOTE: the audio packet can contain several frames */ /* NOTE: the audio packet can contain several frames */
while (is->audio_pkt_size > 0) { while (pkt_temp->size > 0) {
data_size = sizeof(is->audio_buf1); data_size = sizeof(is->audio_buf1);
len1 = avcodec_decode_audio2(dec, len1 = avcodec_decode_audio3(dec,
(int16_t *)is->audio_buf1, &data_size, (int16_t *)is->audio_buf1, &data_size,
is->audio_pkt_data, is->audio_pkt_size); pkt_temp);
if (len1 < 0) { if (len1 < 0) {
/* if error, we skip the frame */ /* if error, we skip the frame */
is->audio_pkt_size = 0; pkt_temp->size = 0;
break; break;
} }
is->audio_pkt_data += len1; pkt_temp->data += len1;
is->audio_pkt_size -= len1; pkt_temp->size -= len1;
if (data_size <= 0) if (data_size <= 0)
continue; continue;
@ -1666,8 +1666,8 @@ static int audio_decode_frame(VideoState *is, double *pts_ptr)
continue; continue;
} }
is->audio_pkt_data = pkt->data; pkt_temp->data = pkt->data;
is->audio_pkt_size = pkt->size; pkt_temp->size = pkt->size;
/* if update the audio clock with the pts */ /* if update the audio clock with the pts */
if (pkt->pts != AV_NOPTS_VALUE) { if (pkt->pts != AV_NOPTS_VALUE) {