- avctx->coded_frame->pts = ((AVFrame *)data)->pts;
- return avpicture_layout((AVPicture *)data, avctx->pix_fmt, avctx->width,
- avctx->height, frame, buf_size);
+ int ret = av_image_get_buffer_size(avctx->pix_fmt,
+ avctx->width, avctx->height, 1);
+
+ if (ret < 0)
+ return ret;
+
+ if ((ret = ff_alloc_packet(pkt, ret)) < 0)
+ return ret;
+ if ((ret = av_image_copy_to_buffer(pkt->data, pkt->size,
+ frame->data, frame->linesize,
+ frame->format,
+ frame->width, frame->height, 1)) < 0)
+ return ret;
+
+ if(avctx->codec_tag == AV_RL32("yuv2") && ret > 0 &&
+ avctx->pix_fmt == AV_PIX_FMT_YUYV422) {
+ int x;
+ for(x = 1; x < avctx->height*avctx->width*2; x += 2)
+ pkt->data[x] ^= 0x80;
+ }
+ pkt->flags |= AV_PKT_FLAG_KEY;
+ *got_packet = 1;
+ return 0;