uint8_t color_type; /**< color type (see FF_COLOR_xxx constants) */
uint8_t pixel_type; /**< pixel storage type (see FF_PIXEL_xxx constants) */
uint8_t is_alpha : 1; /**< true if alpha can be specified */
+ uint8_t is_hwaccel : 1; /**< true if this is an HW accelerated format */
uint8_t x_chroma_shift; /**< X chroma subsampling factor is 2 ^ shift */
uint8_t y_chroma_shift; /**< Y chroma subsampling factor is 2 ^ shift */
uint8_t depth; /**< bit depth of the color components */
},
[PIX_FMT_XVMC_MPEG2_MC] = {
.name = "xvmcmc",
+ .is_hwaccel = 1,
},
[PIX_FMT_XVMC_MPEG2_IDCT] = {
.name = "xvmcidct",
+ .is_hwaccel = 1,
},
[PIX_FMT_VDPAU_MPEG1] = {
.name = "vdpau_mpeg1",
+ .is_hwaccel = 1,
},
[PIX_FMT_VDPAU_MPEG2] = {
.name = "vdpau_mpeg2",
+ .is_hwaccel = 1,
},
[PIX_FMT_VDPAU_H264] = {
.name = "vdpau_h264",
+ .is_hwaccel = 1,
},
[PIX_FMT_VDPAU_WMV3] = {
.name = "vdpau_wmv3",
+ .is_hwaccel = 1,
},
[PIX_FMT_VDPAU_VC1] = {
.name = "vdpau_vc1",
+ .is_hwaccel = 1,
},
[PIX_FMT_UYYVYY411] = {
.name = "uyyvyy411",
}
}
+int ff_is_hwaccel_pix_fmt(enum PixelFormat pix_fmt)
+{
+ return pix_fmt_info[pix_fmt].is_hwaccel;
+}
+
int ff_set_systematic_pal(uint32_t pal[256], enum PixelFormat pix_fmt){
int i;
*/
//#define DEBUG
+#include "internal.h"
#include "avcodec.h"
#include "dsputil.h"
#include "mpegvideo.h"
avctx->pix_fmt = mpeg_get_pixelformat(avctx);
//until then pix_fmt may be changed right after codec init
if( avctx->pix_fmt == PIX_FMT_XVMC_MPEG2_IDCT ||
+ avctx->hwaccel ||
s->avctx->codec->capabilities&CODEC_CAP_HWACCEL_VDPAU )
if( avctx->idct_algo == FF_IDCT_AUTO )
avctx->idct_algo = FF_IDCT_SIMPLE;
//just to make sure that all data is rendered.
if(CONFIG_MPEG_XVMC_DECODER && s->avctx->xvmc_acceleration){
ff_xvmc_field_end(s);
- }else if(!(s->avctx->codec->capabilities&CODEC_CAP_HWACCEL_VDPAU)
+ }else if(!s->avctx->hwaccel
+ && !(s->avctx->codec->capabilities&CODEC_CAP_HWACCEL_VDPAU)
&& s->unrestricted_mv
&& s->current_picture.reference
&& !s->intra_only
return 0;
}
-enum PixelFormat avcodec_default_get_format(struct AVCodecContext *s, const enum PixelFormat * fmt){
+enum PixelFormat avcodec_default_get_format(struct AVCodecContext *s, const enum PixelFormat *fmt){
+ while (*fmt != PIX_FMT_NONE && ff_is_hwaccel_pix_fmt(*fmt))
+ ++fmt;
return fmt[0];
}
* VC-1 and WMV3 decoder
*
*/
+#include "internal.h"
#include "dsputil.h"
#include "avcodec.h"
#include "mpegvideo.h"