VLC 4.0.0-dev
|
Files | |
file | vlc_picture.h |
This file defines picture structures and functions in vlc. | |
Data Structures | |
struct | plane_t |
Description of a planar graphic field. More... | |
struct | picture_context_t |
struct | picture_buffer_t |
struct | vlc_video_context_operations |
struct | picture_t |
Video picture. More... | |
struct | vlc_pic_chain |
picture chaining helpers More... | |
struct | picture_resource_t |
Resource for a picture. More... | |
Macros | |
#define | PICTURE_PLANE_MAX (VOUT_MAX_PLANES) |
Maximum number of plane for a picture. More... | |
#define | Y_PIXELS p[Y_PLANE].p_pixels |
#define | Y_PITCH p[Y_PLANE].i_pitch |
#define | U_PIXELS p[U_PLANE].p_pixels |
#define | U_PITCH p[U_PLANE].i_pitch |
#define | V_PIXELS p[V_PLANE].p_pixels |
#define | V_PITCH p[V_PLANE].i_pitch |
#define | A_PIXELS p[A_PLANE].p_pixels |
#define | A_PITCH p[A_PLANE].i_pitch |
Typedefs | |
typedef struct plane_t | plane_t |
Description of a planar graphic field. More... | |
typedef struct picture_context_t | picture_context_t |
typedef struct picture_buffer_t | picture_buffer_t |
typedef struct vlc_decoder_device | vlc_decoder_device |
typedef struct vlc_video_context | vlc_video_context |
typedef struct vlc_pic_chain | vlc_picture_chain_t |
picture chaining helpers More... | |
Enumerations | |
enum | vlc_video_context_type { VLC_VIDEO_CONTEXT_VAAPI = 1 , VLC_VIDEO_CONTEXT_VDPAU , VLC_VIDEO_CONTEXT_DXVA2 , VLC_VIDEO_CONTEXT_D3D11VA , VLC_VIDEO_CONTEXT_AWINDOW , VLC_VIDEO_CONTEXT_NVDEC , VLC_VIDEO_CONTEXT_CVPX , VLC_VIDEO_CONTEXT_MMAL , VLC_VIDEO_CONTEXT_GSTDECODE } |
Decoder device type. More... | |
enum | { Y_PLANE = 0 , U_PLANE = 1 , V_PLANE = 2 , A_PLANE = 3 } |
Functions | |
vlc_video_context * | vlc_video_context_Create (vlc_decoder_device *, enum vlc_video_context_type private_type, size_t private_size, const struct vlc_video_context_operations *) |
void | vlc_video_context_Release (vlc_video_context *) |
enum vlc_video_context_type | vlc_video_context_GetType (const vlc_video_context *) |
void * | vlc_video_context_GetPrivate (vlc_video_context *, enum vlc_video_context_type) |
vlc_video_context * | vlc_video_context_Hold (vlc_video_context *) |
vlc_decoder_device * | vlc_video_context_HoldDevice (vlc_video_context *) |
Get the decoder device used by the device context. More... | |
static vlc_video_context * | picture_GetVideoContext (picture_t *pic) |
static bool | picture_HasChainedPics (const picture_t *pic) |
Check whether a picture has other pictures linked. More... | |
static void | vlc_picture_chain_Init (vlc_picture_chain_t *chain) |
Initializes or reset a picture chain. More... | |
static bool | vlc_picture_chain_IsEmpty (const vlc_picture_chain_t *chain) |
Check whether a picture chain holds pictures or not. More... | |
static bool | vlc_picture_chain_HasNext (const vlc_picture_chain_t *chain) |
Check whether a picture chain has more than one picture. More... | |
static picture_t * | vlc_picture_chain_PopFront (vlc_picture_chain_t *chain) |
Pop the front of a picture chain. More... | |
static picture_t * | vlc_picture_chain_PeekFront (vlc_picture_chain_t *chain) |
Peek the front of a picture chain. More... | |
static void | vlc_picture_chain_Append (vlc_picture_chain_t *chain, picture_t *pic) |
Append a picture to a picture chain. More... | |
static void | vlc_picture_chain_AppendChain (picture_t *chain, picture_t *tail) |
Append a picture chain to a picture chain. More... | |
static void | vlc_picture_chain_GetAndClear (vlc_picture_chain_t *in, vlc_picture_chain_t *out) |
Copy the picture chain in another picture chain and clear the original picture chain. More... | |
static vlc_picture_chain_t | picture_GetAndResetChain (picture_t *pic) |
Reset a picture chain. More... | |
picture_t * | picture_New (vlc_fourcc_t i_chroma, int i_width, int i_height, int i_sar_num, int i_sar_den) |
This function will create a new picture. More... | |
picture_t * | picture_NewFromFormat (const video_format_t *p_fmt) |
This function will create a new picture using the given format. More... | |
picture_t * | picture_NewFromResource (const video_format_t *, const picture_resource_t *) |
This function will create a new picture using the provided resource. More... | |
void | picture_Destroy (picture_t *picture) |
Destroys a picture without references. More... | |
static picture_t * | picture_Hold (picture_t *picture) |
Increments the picture reference count. More... | |
static void | picture_Release (picture_t *picture) |
Decrements the picture reference count. More... | |
void | picture_CopyProperties (picture_t *p_dst, const picture_t *p_src) |
This function will copy all picture dynamic properties. More... | |
void | picture_Reset (picture_t *) |
This function will reset a picture information (properties and quantizers). More... | |
void | picture_CopyPixels (picture_t *p_dst, const picture_t *p_src) |
This function will copy the picture pixels. More... | |
void | plane_CopyPixels (plane_t *p_dst, const plane_t *p_src) |
void | picture_Copy (picture_t *p_dst, const picture_t *p_src) |
This function will copy both picture dynamic properties and pixels. More... | |
picture_t * | picture_Clone (picture_t *pic) |
Perform a shallow picture copy. More... | |
int | picture_AttachAncillary (picture_t *pic, struct vlc_ancillary *ancillary) |
Attach an ancillary to the picture. More... | |
void * | picture_AttachNewAncillary (picture_t *pic, vlc_ancillary_id id, size_t size) |
Allocate a new ancillary and attach it to a picture. More... | |
struct vlc_ancillary * | picture_GetAncillary (const picture_t *pic, vlc_ancillary_id id) |
Return the ancillary identified by an ID. More... | |
int | picture_Export (vlc_object_t *p_obj, block_t **pp_image, video_format_t *p_fmt, picture_t *p_picture, vlc_fourcc_t i_format, int i_override_width, int i_override_height, bool b_crop) |
This function will export a picture to an encoded bitstream. More... | |
int | picture_Setup (picture_t *, const video_format_t *) |
This function will setup all fields of a picture_t without allocating any memory. More... | |
static void | picture_SwapUV (picture_t *picture) |
Swap UV planes of a Tri Planars picture. More... | |
#define PICTURE_PLANE_MAX (VOUT_MAX_PLANES) |
Maximum number of plane for a picture.
typedef struct picture_buffer_t picture_buffer_t |
typedef struct picture_context_t picture_context_t |
typedef struct vlc_decoder_device vlc_decoder_device |
typedef struct vlc_pic_chain vlc_picture_chain_t |
picture chaining helpers
typedef struct vlc_video_context vlc_video_context |
Decoder device type.
int picture_AttachAncillary | ( | picture_t * | pic, |
struct vlc_ancillary * | ancillary | ||
) |
Attach an ancillary to the picture.
pic | the picture to attach an ancillary |
ancillary | ancillary that will be held by the frame, can't be NULL |
References picture_priv_t::ancillaries, container_of, picture_priv_buffer_t::priv, and vlc_ancillary_array_Insert().
Referenced by picture_AttachNewAncillary().
void * picture_AttachNewAncillary | ( | picture_t * | pic, |
vlc_ancillary_id | id, | ||
size_t | size | ||
) |
Allocate a new ancillary and attach it to a picture.
Helper equivalent to malloc + vlc_ancillary_Create + picture_AttachAncillary. The returned memory is not initialized.
pic | picture to attach created ancillary to |
id | id of the ancillary to create |
size | allocation size in bytes |
References vlc_ancillary::data, picture_AttachAncillary(), vlc_ancillary_Create(), and vlc_ancillary_Release().
Perform a shallow picture copy.
This function makes a shallow copy of an existing picture. The same planes and resources will be used, and the cloned picture reference count will be incremented.
References picture_priv_t::ancillaries, container_of, picture_DestroyClone(), picture_InternalClone(), picture_priv_buffer_t::priv, and vlc_ancillary_array_Dup().
Referenced by vout_snapshot_Set().
This function will copy both picture dynamic properties and pixels.
You have to notice that sometime a simple picture_Hold may do what you want without the copy overhead. Provided for convenience.
p_dst | pointer to the destination picture. |
p_src | pointer to the source picture. |
References picture_CopyPixels(), and picture_CopyProperties().
Referenced by PrerenderPicture().
This function will copy the picture pixels.
You can safely copy between pictures that do not have the same size, only the compatible(smaller) part will be copied.
References picture_t::context, picture_context_t::copy, picture_t::i_planes, picture_t::p, and plane_CopyPixels().
Referenced by picture_Copy().
This function will copy all picture dynamic properties.
References picture_priv_t::ancillaries, picture_t::b_force, picture_t::b_progressive, picture_t::b_still, picture_t::b_top_field_first, container_of, picture_t::date, picture_t::i_nb_fields, and vlc_ancillary_array_Dup().
Referenced by picture_Copy().
void picture_Destroy | ( | picture_t * | picture | ) |
Destroys a picture without references.
This function destroys a picture with zero references left. Never call this function directly. Use picture_Release() instead.
References picture_priv_t::ancillaries, container_of, picture_priv_t::destroy, picture_priv_t::gc, PictureDestroyContext(), picture_priv_buffer_t::priv, picture_t::refs, vlc_ancillary_array_Clear(), and vlc_atomic_rc_get().
Referenced by picture_Release().
int picture_Export | ( | vlc_object_t * | p_obj, |
block_t ** | pp_image, | ||
video_format_t * | p_fmt, | ||
picture_t * | p_picture, | ||
vlc_fourcc_t | i_format, | ||
int | i_override_width, | ||
int | i_override_height, | ||
bool | b_crop | ||
) |
This function will export a picture to an encoded bitstream.
pp_image will contain the encoded bitstream in psz_format format.
p_fmt can be NULL otherwise it will be set with the format used for the picture before encoding.
i_override_width/height allow to override the width and/or the height of the picture to be encoded:
References picture_t::date, picture_t::format, video_format_t::i_chroma, vlc_frame_t::i_dts, video_format_t::i_height, vlc_frame_t::i_pts, video_format_t::i_sar_den, video_format_t::i_sar_num, video_format_t::i_visible_height, video_format_t::i_visible_width, video_format_t::i_width, video_format_t::i_x_offset, video_format_t::i_y_offset, image_HandlerCreate, image_HandlerDelete(), image_Write, VLC_EGENERIC, VLC_ENOMEM, and VLC_SUCCESS.
Referenced by vout_GetSnapshot().
struct vlc_ancillary * picture_GetAncillary | ( | const picture_t * | pic, |
vlc_ancillary_id | id | ||
) |
Return the ancillary identified by an ID.
id | id of ancillary to request |
References picture_priv_t::ancillaries, container_of, and vlc_ancillary_array_Get().
|
inlinestatic |
Reset a picture chain.
References picture_t::p_next, and vlc_pic_chain::tail.
Referenced by FilterChainVideoFilter().
|
inlinestatic |
References picture_t::context, and picture_context_t::vctx.
Referenced by ImageConvert(), ImageRead(), ImageWrite(), and PreparePicture().
|
inlinestatic |
Check whether a picture has other pictures linked.
References picture_t::p_next.
Referenced by decoder_QueueVideo(), ImageConvert(), ImageRead(), ImageWrite(), picture_pool_ClonePicture(), PictureFifoPush(), SpuRenderRegion(), vlc_picture_chain_Append(), and vout_PutPicture().
Increments the picture reference count.
References picture_t::refs, and vlc_atomic_rc_inc().
Referenced by ConvertRGB32AndBlend(), FilterPictureInteractive(), ImageConvert(), ImageWrite(), on_thumbnailer_input_event(), picture_InternalClone(), PreparePicture(), and SpuRenderRegion().
picture_t * picture_New | ( | vlc_fourcc_t | i_chroma, |
int | i_width, | ||
int | i_height, | ||
int | i_sar_num, | ||
int | i_sar_den | ||
) |
This function will create a new picture.
The picture created will implement a default release management compatible with picture_Hold and picture_Release. This default management will release p_sys, gc.p_sys fields if non NULL.
References picture_NewFromFormat(), video_format_Init(), and video_format_Setup().
picture_t * picture_NewFromFormat | ( | const video_format_t * | p_fmt | ) |
This function will create a new picture using the given format.
When possible, it is preferred to use this function over picture_New as more information about the format is kept.
picture_t * picture_NewFromResource | ( | const video_format_t * | p_fmt, |
const picture_resource_t * | p_resource | ||
) |
This function will create a new picture using the provided resource.
References plane_t::i_lines, picture_resource_t::i_lines, plane_t::i_pitch, picture_resource_t::i_pitch, picture_t::i_planes, picture_t::p, picture_resource_t::p, plane_t::p_pixels, picture_resource_t::p_pixels, picture_priv_t::picture, picture_InitPrivate(), and unlikely.
Referenced by picture_InternalClone().
|
inlinestatic |
Decrements the picture reference count.
If the reference count reaches zero, the picture is destroyed. If it was allocated from a pool, the underlying picture buffer will be returned to the pool. Otherwise, the picture buffer will be freed.
References picture_Destroy(), picture_t::refs, and vlc_atomic_rc_dec().
Referenced by ConvertRGB32AndBlend(), DisplayNextFrame(), FilterDeletePictures(), FilterFlush(), ImageRead(), ImageWrite(), ModuleThread_PlayVideo(), ModuleThread_QueueThumbnail(), picture_DestroyClone(), picture_fifo_Flush(), picture_pool_NewFromFormat(), picture_pool_Release(), picture_pool_ReleaseClone(), picture_pool_Reserve(), PreparePicture(), PrerenderPicture(), RenderPicture(), RunnableRun(), spuregion_CreateFromPicture(), SpuRenderRegion(), subpicture_NewFromPicture(), subpicture_region_Delete(), subpicture_region_private_Delete(), UpdateCurrentPicture(), video_splitter_DeletePicture(), video_splitter_NewPicture(), vout_ConvertForDisplay(), vout_FlushUnlocked(), vout_GetSnapshot(), vout_snapshot_Destroy(), and VoutSaveSnapshot().
void picture_Reset | ( | picture_t * | p_picture | ) |
This function will reset a picture information (properties and quantizers).
It is sometimes useful for reusing pictures (like from a pool).
References picture_priv_t::ancillaries, picture_t::b_force, picture_t::b_progressive, picture_t::b_still, picture_t::b_top_field_first, container_of, picture_t::date, picture_t::i_nb_fields, PictureDestroyContext(), vlc_ancillary_array_Clear(), and VLC_TICK_INVALID.
Referenced by ModuleThread_NewVideoBuffer(), and VoutVideoFilterInteractiveNewPicture().
int picture_Setup | ( | picture_t * | , |
const video_format_t * | |||
) |
This function will setup all fields of a picture_t without allocating any memory.
XXX The memory must already be initialized. It does not need to be released.
It will return VLC_EGENERIC if the core does not understand the requested format.
It can be useful to get the properties of planes.
|
inlinestatic |
Swap UV planes of a Tri Planars picture.
It just swap the planes information without doing any copy.
References picture_t::i_planes, picture_t::p, U_PLANE, V_PLANE, and vlc_assert.
References plane_t::i_pitch, plane_t::i_visible_lines, plane_t::i_visible_pitch, and plane_t::p_pixels.
Referenced by picture_CopyPixels().
|
inlinestatic |
Append a picture to a picture chain.
chain | the picture chain pointer |
pic | the picture to append to the chain |
References vlc_pic_chain::front, picture_t::p_next, picture_HasChainedPics(), vlc_pic_chain::tail, and vlc_assert.
Referenced by picture_fifo_Flush(), PictureFifoPush(), and vout_snapshot_Set().
Append a picture chain to a picture chain.
References picture_t::p_next.
|
inlinestatic |
Copy the picture chain in another picture chain and clear the original picture chain.
in | picture chain to copy and clear |
out | picture chain to copy into |
References vlc_picture_chain_Init().
Referenced by picture_fifo_Flush().
|
inlinestatic |
Check whether a picture chain has more than one picture.
References vlc_pic_chain::front, vlc_pic_chain::tail, and vlc_picture_chain_IsEmpty().
|
inlinestatic |
Initializes or reset a picture chain.
References vlc_pic_chain::front.
Referenced by filter_chain_AppendInner(), picture_fifo_Flush(), PictureFifoReset(), vlc_picture_chain_GetAndClear(), and vout_snapshot_New().
|
inlinestatic |
Check whether a picture chain holds pictures or not.
References vlc_pic_chain::front.
Referenced by filter_chain_VideoFilter(), FilterChainVideoFilter(), FilterDeletePictures(), picture_fifo_Flush(), picture_fifo_IsEmpty(), vlc_picture_chain_HasNext(), vout_snapshot_Destroy(), and vout_snapshot_Get().
|
inlinestatic |
Peek the front of a picture chain.
The picture chain is unchanged.
References vlc_pic_chain::front.
|
inlinestatic |
Pop the front of a picture chain.
The next picture in the chain becomes the front of the picture chain.
References vlc_pic_chain::front, and picture_t::p_next.
Referenced by filter_chain_VideoFilter(), FilterDeletePictures(), picture_fifo_Flush(), PictureFifoPop(), vout_snapshot_Destroy(), and vout_snapshot_Get().
vlc_video_context * vlc_video_context_Create | ( | vlc_decoder_device * | device, |
enum vlc_video_context_type | private_type, | ||
size_t | private_size, | ||
const struct vlc_video_context_operations * | ops | ||
) |
void * vlc_video_context_GetPrivate | ( | vlc_video_context * | vctx, |
enum | vlc_video_context_type | ||
) |
References vlc_video_context::private, and vlc_video_context::private_type.
Referenced by vlc_video_context_Release().
enum vlc_video_context_type vlc_video_context_GetType | ( | const vlc_video_context * | vctx | ) |
References vlc_video_context::private_type.
vlc_video_context * vlc_video_context_Hold | ( | vlc_video_context * | vctx | ) |
References vlc_video_context::rc, and vlc_atomic_rc_inc().
Referenced by filter_chain_Reset(), ModuleThread_UpdateVideoFormat(), PreparePicture(), vout_display_New(), vout_SetDisplayFormat(), and vout_Start().
vlc_decoder_device * vlc_video_context_HoldDevice | ( | vlc_video_context * | vctx | ) |
Get the decoder device used by the device context.
This will increment the refcount of the decoder device.
References vlc_video_context::device, and vlc_decoder_device_Hold().
Referenced by DisplayHoldDecoderDevice(), and vout_Start().
void vlc_video_context_Release | ( | vlc_video_context * | vctx | ) |
References vlc_video_context_operations::destroy, vlc_video_context::device, vlc_video_context::ops, vlc_video_context::private_type, vlc_video_context::rc, vlc_atomic_rc_dec(), vlc_decoder_device_Release(), and vlc_video_context_GetPrivate().
Referenced by DeleteDecoder(), filter_chain_Delete(), filter_chain_Reset(), ModuleThread_UpdateVideoFormat(), PictureDestroyContext(), PreparePicture(), vout_display_Delete(), vout_ReleaseDisplay(), vout_SetDisplayFormat(), and vout_Start().