| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DEC_INCLUDES |
| #define VPX_CODEC_DISABLE_COMPAT 1 |
| #include "vpx/vpx_decoder.h" |
| #include "vpx/vp8dx.h" |
| #define interface (vpx_codec_vp8_dx()) |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DEC_INCLUDES |
| |
| |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DIE_CODEC |
| static void die_codec(vpx_codec_ctx_t *ctx, const char *s) { |
| const char *detail = vpx_codec_error_detail(ctx); |
| |
| printf("%s: %s\n", s, vpx_codec_error(ctx)); |
| if(detail) |
| printf(" %s\n",detail); |
| exit(EXIT_FAILURE); |
| } |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DIE_CODEC |
| |
| |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ USAGE |
| if(argc!=3) |
| die("Usage: %s <infile> <outfile>\n", argv[0]); |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ USAGE |
| |
| |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DEC_INIT |
| /* Initialize codec */ |
| if(vpx_codec_dec_init(&codec, interface, NULL, flags)) |
| die_codec(&codec, "Failed to initialize decoder"); |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DEC_INIT |
| |
| |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DECODE |
| /* Decode the frame */ |
| if(vpx_codec_decode(&codec, frame, frame_sz, NULL, 0)) |
| die_codec(&codec, "Failed to decode frame"); |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DECODE |
| |
| |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ GET_FRAME |
| while((img = vpx_codec_get_frame(&codec, &iter))) { |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ GET_FRAME |
| |
| |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ PROCESS_DX |
| for(plane=0; plane < 3; plane++) { |
| unsigned char *buf =img->planes[plane]; |
| |
| for(y=0; y<img->d_h >> (plane?1:0); y++) { |
| if(fwrite(buf, 1, img->d_w >> (plane?1:0), outfile)); |
| buf += img->stride[plane]; |
| } |
| } |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ PROCESS_DX |
| |
| |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DESTROY |
| if(vpx_codec_destroy(&codec)) |
| die_codec(&codec, "Failed to destroy codec"); |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DESTROY |