2010-05-18 19:58:33 +04:00
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DEC_INCLUDES
|
|
|
|
#define VPX_CODEC_DISABLE_COMPAT 1
|
2010-05-24 19:39:59 +04:00
|
|
|
#include "vpx/vpx_decoder.h"
|
2012-11-01 22:09:58 +04:00
|
|
|
#include "vpx/vp9dx.h"
|
2011-03-01 04:06:56 +03:00
|
|
|
#define interface (vpx_codec_vp8_dx())
|
2010-05-18 19:58:33 +04:00
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 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];
|
|
|
|
|
2011-09-14 19:25:24 +04:00
|
|
|
for(y=0; y < (plane ? (img->d_h + 1) >> 1 : img->d_h); y++) {
|
2012-05-03 01:12:57 +04:00
|
|
|
(void) fwrite(buf, 1, (plane ? (img->d_w + 1) >> 1 : img->d_w),
|
|
|
|
outfile);
|
2010-05-18 19:58:33 +04:00
|
|
|
buf += img->stride[plane];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ PROCESS_DX
|
|
|
|
|
|
|
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DESTROY
|
|
|
|
if(vpx_codec_destroy(&codec))
|
|
|
|
die_codec(&codec, "Failed to destroy codec");
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DESTROY
|