jpegdec: be less picky on padding
[ffmpeg.git] / libavcodec / paf.c
index aa8370c..5ff09b9 100644 (file)
@@ -251,8 +251,7 @@ static int paf_vid_decode(AVCodecContext *avctx, void *data,
     uint8_t code, *dst, *src, *end;
     int i, frame, ret;
 
-    c->pic.reference = 3;
-    if ((ret = avctx->reget_buffer(avctx, &c->pic)) < 0)
+    if ((ret =ff_reget_buffer(avctx, &c->pic)) < 0)
         return ret;
 
     bytestream2_init(&c->gb, pkt->data, pkt->size);
@@ -356,9 +355,10 @@ static int paf_vid_decode(AVCodecContext *avctx, void *data,
     }
 
     c->current_frame = (c->current_frame + 1) & 3;
+    if ((ret = av_frame_ref(data, &c->pic)) < 0)
+        return ret;
 
     *got_frame       = 1;
-    *(AVFrame *)data = c->pic;
 
     return pkt->size;
 }
@@ -368,8 +368,7 @@ static av_cold int paf_vid_close(AVCodecContext *avctx)
     PAFVideoDecContext *c = avctx->priv_data;
     int i;
 
-    if (c->pic.data[0])
-        avctx->release_buffer(avctx, &c->pic);
+    av_frame_unref(&c->pic);
 
     for (i = 0; i < 4; i++)
         av_freep(&c->frame[i]);
@@ -377,22 +376,14 @@ static av_cold int paf_vid_close(AVCodecContext *avctx)
     return 0;
 }
 
-typedef struct PAFAudioDecContext {
-    AVFrame frame;
-} PAFAudioDecContext;
-
 static av_cold int paf_aud_init(AVCodecContext *avctx)
 {
-    PAFAudioDecContext *c = avctx->priv_data;
-
     if (avctx->channels != 2) {
         av_log(avctx, AV_LOG_ERROR, "invalid number of channels\n");
         return AVERROR_INVALIDDATA;
     }
 
-    avcodec_get_frame_defaults(&c->frame);
     avctx->channel_layout = AV_CH_LAYOUT_STEREO;
-    avctx->coded_frame    = &c->frame;
     avctx->sample_fmt     = AV_SAMPLE_FMT_S16;
 
     return 0;
@@ -401,7 +392,7 @@ static av_cold int paf_aud_init(AVCodecContext *avctx)
 static int paf_aud_decode(AVCodecContext *avctx, void *data,
                           int *got_frame_ptr, AVPacket *pkt)
 {
-    PAFAudioDecContext *c = avctx->priv_data;
+    AVFrame *frame = data;
     uint8_t *buf = pkt->data;
     int16_t *output_samples;
     const uint8_t *t;
@@ -411,11 +402,11 @@ static int paf_aud_decode(AVCodecContext *avctx, void *data,
     if (frames < 1)
         return AVERROR_INVALIDDATA;
 
-    c->frame.nb_samples = PAF_SOUND_SAMPLES * frames;
-    if ((ret = ff_get_buffer(avctx, &c->frame)) < 0)
+    frame->nb_samples = PAF_SOUND_SAMPLES * frames;
+    if ((ret = ff_get_buffer(avctx, frame, 0)) < 0)
         return ret;
 
-    output_samples = (int16_t *)c->frame.data[0];
+    output_samples = (int16_t *)frame->data[0];
     for (i = 0; i < frames; i++) {
         t = buf + 256 * sizeof(uint16_t);
         for (j = 0; j < PAF_SOUND_SAMPLES; j++) {
@@ -428,7 +419,6 @@ static int paf_aud_decode(AVCodecContext *avctx, void *data,
     }
 
     *got_frame_ptr   = 1;
-    *(AVFrame *)data = c->frame;
 
     return pkt->size;
 }
@@ -449,7 +439,6 @@ AVCodec ff_paf_audio_decoder = {
     .name           = "paf_audio",
     .type           = AVMEDIA_TYPE_AUDIO,
     .id             = AV_CODEC_ID_PAF_AUDIO,
-    .priv_data_size = sizeof(PAFAudioDecContext),
     .init           = paf_aud_init,
     .decode         = paf_aud_decode,
     .capabilities   = CODEC_CAP_DR1,