VirtualBox

Changeset 65176 in vbox for trunk/src/VBox/Main


Ignore:
Timestamp:
Jan 6, 2017 10:17:41 AM (8 years ago)
Author:
vboxsync
Message:

VideoRec: Put VPX codec data into VIDEORECCODEC union.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/src-client/VideoRec.cpp

    r65175 r65176  
    6363
    6464/**
     65 * Structure for keeping specific video recording codec data.
     66 */
     67typedef struct VIDEORECCODEC
     68{
     69    union
     70    {
     71        struct
     72        {
     73            /** VPX codec context. */
     74            vpx_codec_ctx_t     CodecCtx;
     75            /** VPX codec configuration. */
     76            vpx_codec_enc_cfg_t Config;
     77            /** VPX image context. */
     78            vpx_image_t         RawImage;
     79        } VPX;
     80    };
     81} VIDEORECCODEC, *PVIDEORECCODEC;
     82
     83/**
    6584 * Strucutre for maintaining a video recording stream.
    6685 */
     
    6988    /** Container context. */
    7089    WebMWriter         *pEBML;
    71     /** VPX codec context. */
    72     vpx_codec_ctx_t     VpxCodec;
    73     /** VPX configuration. */
    74     vpx_codec_enc_cfg_t VpxConfig;
     90    /** Codec data. */
     91    VIDEORECCODEC       Codec;
    7592    /** Target X resolution (in pixels). */
    7693    uint32_t            uTargetWidth;
     
    87104    /** YUV buffer the encode function fetches the frame from. */
    88105    uint8_t            *pu8YuvBuf;
    89     /** VPX image context. */
    90     vpx_image_t         VpxRawImage;
    91106    /** Whether video recording is enabled or not. */
    92107    bool                fEnabled;
     
    565580            pStream->pEBML->close();
    566581
    567             vpx_img_free(&pStream->VpxRawImage);
    568             vpx_codec_err_t rcv = vpx_codec_destroy(&pStream->VpxCodec);
     582            vpx_img_free(&pStream->Codec.VPX.RawImage);
     583            vpx_codec_err_t rcv = vpx_codec_destroy(&pStream->Codec.VPX.CodecCtx);
    569584            Assert(rcv == VPX_CODEC_OK); RT_NOREF(rcv);
    570585
     
    628643    }
    629644
    630     vpx_codec_err_t rcv = vpx_codec_enc_config_default(DEFAULTCODEC, &pStream->VpxConfig, 0);
     645    vpx_codec_err_t rcv = vpx_codec_enc_config_default(DEFAULTCODEC, &pStream->Codec.VPX.Config, 0);
    631646    if (rcv != VPX_CODEC_OK)
    632647    {
     
    668683
    669684    /* target bitrate in kilobits per second */
    670     pStream->VpxConfig.rc_target_bitrate = uRate;
     685    pStream->Codec.VPX.Config.rc_target_bitrate = uRate;
    671686    /* frame width */
    672     pStream->VpxConfig.g_w = uWidth;
     687    pStream->Codec.VPX.Config.g_w = uWidth;
    673688    /* frame height */
    674     pStream->VpxConfig.g_h = uHeight;
     689    pStream->Codec.VPX.Config.g_h = uHeight;
    675690    /* 1ms per frame */
    676     pStream->VpxConfig.g_timebase.num = 1;
    677     pStream->VpxConfig.g_timebase.den = 1000;
     691    pStream->Codec.VPX.Config.g_timebase.num = 1;
     692    pStream->Codec.VPX.Config.g_timebase.den = 1000;
    678693    /* disable multithreading */
    679     pStream->VpxConfig.g_threads = 0;
     694    pStream->Codec.VPX.Config.g_threads = 0;
    680695
    681696    pStream->uDelay = 1000 / uFps;
    682697
    683698    struct vpx_rational arg_framerate = { (int)uFps, 1 };
    684     rc = pStream->pEBML->writeHeader(&pStream->VpxConfig, &arg_framerate);
     699    rc = pStream->pEBML->writeHeader(&pStream->Codec.VPX.Config, &arg_framerate);
    685700    AssertRCReturn(rc, rc);
    686701
    687702    /* Initialize codec */
    688     rcv = vpx_codec_enc_init(&pStream->VpxCodec, DEFAULTCODEC, &pStream->VpxConfig, 0);
     703    rcv = vpx_codec_enc_init(&pStream->Codec.VPX.CodecCtx, DEFAULTCODEC, &pStream->Codec.VPX.Config, 0);
    689704    if (rcv != VPX_CODEC_OK)
    690705    {
     
    693708    }
    694709
    695     if (!vpx_img_alloc(&pStream->VpxRawImage, VPX_IMG_FMT_I420, uWidth, uHeight, 1))
     710    if (!vpx_img_alloc(&pStream->Codec.VPX.RawImage, VPX_IMG_FMT_I420, uWidth, uHeight, 1))
    696711    {
    697712        LogFlow(("Failed to allocate image %dx%d", uWidth, uHeight));
    698713        return VERR_NO_MEMORY;
    699714    }
    700     pStream->pu8YuvBuf = pStream->VpxRawImage.planes[0];
     715    pStream->pu8YuvBuf = pStream->Codec.VPX.RawImage.planes[0];
    701716
    702717    pCtx->fEnabled = true;
     
    793808    /* presentation time stamp */
    794809    vpx_codec_pts_t pts = pStream->u64TimeStamp;
    795     vpx_codec_err_t rcv = vpx_codec_encode(&pStream->VpxCodec,
    796                                            &pStream->VpxRawImage,
     810    vpx_codec_err_t rcv = vpx_codec_encode(&pStream->Codec.VPX.CodecCtx,
     811                                           &pStream->Codec.VPX.RawImage,
    797812                                           pts /* time stamp */,
    798813                                           pStream->uDelay  /* how long to show this frame */,
     
    809824    for (;;)
    810825    {
    811         const vpx_codec_cx_pkt_t *pkt = vpx_codec_get_cx_data(&pStream->VpxCodec, &iter);
     826        const vpx_codec_cx_pkt_t *pkt = vpx_codec_get_cx_data(&pStream->Codec.VPX.CodecCtx, &iter);
    812827        if (!pkt)
    813828            break;
     
    815830        {
    816831            case VPX_CODEC_CX_FRAME_PKT:
    817                 rc = pStream->pEBML->writeBlock(&pStream->VpxConfig, pkt);
     832                rc = pStream->pEBML->writeBlock(&pStream->Codec.VPX.Config, pkt);
    818833                break;
    819834            default:
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette