| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 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 < (plane ? (img->d_h + 1) >> 1 : img->d_h); y++) { | |
| if(fwrite(buf, 1, (plane ? (img->d_w + 1) >> 1 : img->d_w), | |
| outfile)); | |
| buf += img->stride[plane]; | |
| } | |
| } | |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ PROCESS_DX | |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DESTROY | |
| if(vpx_codec_destroy(&codec)) | |
| die_codec(&codec, "Failed to destroy codec"); | |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DESTROY |