mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2025-02-18 04:47:12 +00:00
examples/decode_video: switch to the new decoding API
This commit is contained in:
parent
f78d360bba
commit
728ea23cce
@ -54,26 +54,31 @@ static void decode(AVCodecContext *dec_ctx, AVFrame *frame, AVPacket *pkt,
|
|||||||
const char *filename)
|
const char *filename)
|
||||||
{
|
{
|
||||||
char buf[1024];
|
char buf[1024];
|
||||||
int ret, got_picture;
|
int ret;
|
||||||
|
|
||||||
while (pkt->size > 0) {
|
ret = avcodec_send_packet(dec_ctx, pkt);
|
||||||
ret = avcodec_decode_video2(dec_ctx, frame, &got_picture, pkt);
|
if (ret < 0) {
|
||||||
if (ret < 0) {
|
fprintf(stderr, "Error sending a packet for decoding\n");
|
||||||
fprintf(stderr, "Error while decoding frame %d\n", dec_ctx->frame_number);
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
while (ret >= 0) {
|
||||||
|
ret = avcodec_receive_frame(dec_ctx, frame);
|
||||||
|
if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF)
|
||||||
|
return;
|
||||||
|
else if (ret < 0) {
|
||||||
|
fprintf(stderr, "Error during decoding\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
if (got_picture) {
|
|
||||||
printf("saving frame %3d\n", dec_ctx->frame_number);
|
|
||||||
fflush(stdout);
|
|
||||||
|
|
||||||
/* the picture is allocated by the decoder. no need to
|
printf("saving frame %3d\n", dec_ctx->frame_number);
|
||||||
free it */
|
fflush(stdout);
|
||||||
snprintf(buf, sizeof(buf), filename, dec_ctx->frame_number);
|
|
||||||
pgm_save(frame->data[0], frame->linesize[0],
|
/* the picture is allocated by the decoder. no need to
|
||||||
frame->width, frame->height, buf);
|
free it */
|
||||||
}
|
snprintf(buf, sizeof(buf), filename, dec_ctx->frame_number);
|
||||||
pkt->size -= ret;
|
pgm_save(frame->data[0], frame->linesize[0],
|
||||||
pkt->data += ret;
|
frame->width, frame->height, buf);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -161,9 +166,7 @@ int main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* flush the decoder */
|
/* flush the decoder */
|
||||||
avpkt.data = NULL;
|
decode(c, picture, NULL, outfilename);
|
||||||
avpkt.size = 0;
|
|
||||||
decode(c, picture, &avpkt, outfilename);
|
|
||||||
|
|
||||||
fclose(f);
|
fclose(f);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user